nim_duilib/ui_components/windows_manager/windows_manager.h

110 lines
2.6 KiB
C
Raw Normal View History

2019-04-19 17:19:57 +08:00
#pragma once
#include "window_ex.h"
namespace nim_comp
{
//map<<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>map<<3C><><EFBFBD><EFBFBD>id<69><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>>>, <20><><EFBFBD><EFBFBD>ͬһ<CDAC><D2BB>ֻ<EFBFBD><D6BB>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊid
typedef std::map<std::wstring, std::map<std::wstring, WindowEx*>> WindowsMap;
typedef std::list<WindowEx *> WindowList;
/** @class WindowsManager
* @brief <EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD>ƽ<EFBFBD>
* @copyright (c) 2015, NetEase Inc. All rights reserved
* @author Redrain
* @date 2015/9/16
*/
class WindowsManager
{
public:
SINGLETON_DEFINE(WindowsManager);
WindowsManager();
virtual ~WindowsManager();
/**
* <EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>idע<EFBFBD><EFBFBD><EFBFBD>
* @param[in] wnd_class_name <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] wnd_id <EFBFBD><EFBFBD><EFBFBD><EFBFBD>id
* @param[in] wnd <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
* @return bool true <EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>false ʧ<EFBFBD><EFBFBD>
*/
bool RegisterWindow(const std::wstring wnd_class_name, const std::wstring wnd_id, WindowEx *wnd);
/**
* <EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>idע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] wnd_class_name <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] wnd_id <EFBFBD><EFBFBD><EFBFBD><EFBFBD>id
* @param[in] wnd <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
* @return void <EFBFBD>޷<EFBFBD><EFBFBD><EFBFBD>ֵ
*/
void UnRegisterWindow(const std::wstring &wnd_class_name, const std::wstring &wnd_id, WindowEx *wnd);
/**
* <EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>id<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] wnd_class_name <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] wnd_id <EFBFBD><EFBFBD><EFBFBD><EFBFBD>id
* @return WindowEx* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
*/
WindowEx* GetWindow(const std::wstring &wnd_class_name, const std::wstring &wnd_id);
/**
* <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD>ڻ<EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return WindowList <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
*/
WindowList GetAllWindows();
/**
* <EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>
* @param[in] classname <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return WindowList <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
*/
WindowList GetWindowsByClassName(LPCTSTR classname);
/**
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>
* @return void <EFBFBD>޷<EFBFBD><EFBFBD><EFBFBD>ֵ
*/
void DestroyAllWindows();
/**
* <EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD>ֹ<EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>
* @param[in] stop <EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>
* @return void <EFBFBD>޷<EFBFBD><EFBFBD><EFBFBD>ֵ
*/
void SetStopRegister(bool stop = true) { stop_register_ = stop; }
/**
* <EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>
* @return bool true <EFBFBD><EFBFBD>ֹ<EFBFBD><EFBFBD>false <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ
*/
bool IsStopRegister() { return stop_register_; }
/**
* <EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD><EFBFBD>id<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>Ψһ<EFBFBD><EFBFBD><EFBFBD>ڵĴ<EFBFBD><EFBFBD><EFBFBD>
* @param[in] window_id <EFBFBD><EFBFBD><EFBFBD><EFBFBD>id
* @return WindowType* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
*/
template<typename WindowType, typename... TInstanceParams>
static WindowType* SingletonShow(const std::wstring& window_id, const TInstanceParams&... params)
{
WindowType *window = (WindowType*)(WindowsManager::GetInstance()->GetWindow(WindowType::kClassName, window_id));
if (!window)
{
window = new WindowType(params...);
window->Create(NULL, WindowType::kClassName, WS_OVERLAPPEDWINDOW & ~WS_MAXIMIZEBOX, 0);
window->CenterWindow();
window->ShowWindow();
}
else
{
window->ActiveWindow();
}
return window;
}
private:
WindowsMap windows_map_; //<2F><><EFBFBD>д<EFBFBD><D0B4><EFBFBD>
std::string user_id_;
bool stop_register_; //<2F><>ֹ<EFBFBD><D6B9><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
};
}