110 lines
2.6 KiB
C
110 lines
2.6 KiB
C
![]() |
#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>
|
|||
|
};
|
|||
|
}
|