nim_duilib/duilib/Core/Window.h

950 lines
22 KiB
C
Raw Normal View History

2019-04-19 17:19:57 +08:00
#ifndef UI_CORE_WINDOW_H_
#define UI_CORE_WINDOW_H_
#pragma once
namespace ui
{
class Box;
// Flags for Control::GetControlFlags()
#define UIFLAG_DEFAULT 0x00000000 // Ĭ<><C4AC>״̬
#define UIFLAG_TABSTOP 0x00000001 // <20><>ʶ<EFBFBD>ؼ<EFBFBD><D8BC>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>յ<EFBFBD> TAB <20>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>
2019-04-19 17:19:57 +08:00
// Flags for FindControl()
#define UIFIND_ALL 0x00000000
#define UIFIND_VISIBLE 0x00000001
#define UIFIND_ENABLED 0x00000002
#define UIFIND_HITTEST 0x00000004
#define UIFIND_TOP_FIRST 0x00000008
#define UIFIND_ME_FIRST 0x80000000
/////////////////////////////////////////////////////////////////////////////////////
//
typedef struct tagTFontInfo
{
HFONT hFont;
std::wstring sFontName;
int iSize;
bool bBold;
bool bUnderline;
bool bItalic;
TEXTMETRIC tm;
} TFontInfo;
// MessageFilter interface
class IUIMessageFilter
{
public:
virtual LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) = 0;
};
class ITranslateAccelerator
{
public:
virtual LRESULT TranslateAccelerator(MSG *pMsg) = 0;
};
class IControlFromPointFinder
{
public:
virtual Control* FindControlFromPoint(const CPoint& pt) = 0;
};
/////////////////////////////////////////////////////////////////////////////////////
//
#ifndef ASSERT
#define ASSERT(expr) _ASSERTE(expr)
#endif
/////////////////////////////////////////////////////////////////////////////////////
//
class UILIB_API Window : public virtual nbase::SupportWeakCallback
{
public:
Window();
~Window();
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Windows <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD><EFBFBD>ڹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Windows <EFBFBD><EFBFBD><EFBFBD>ھ<EFBFBD><EFBFBD><EFBFBD>
*/
HWND GetHWND() const;
/**
* @brief ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD> true <EFBFBD><EFBFBD>ʾ<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾʧ<EFBFBD><EFBFBD>
*/
bool RegisterWindowClass();
/**
* @brief ע<EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵĹ<EFBFBD><EFBFBD>̺<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD> true <EFBFBD><EFBFBD>ʾ<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾʧ<EFBFBD><EFBFBD>
*/
bool RegisterSuperClass();
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
virtual std::wstring GetWindowClassName() const;
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD>ؼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD>ؿؼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
virtual std::wstring GetSuperClassName() const;
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>֣<EFBFBD>https://docs.microsoft.com/en-us/windows/desktop/winmsg/window-class-styles
* @return <EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
*/
virtual UINT GetClassStyle() const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><EFBFBD>ڹ<EFBFBD><EFBFBD>̺<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] <EFBFBD><EFBFBD><EFBFBD>ھ<EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD>µĴ<EFBFBD><EFBFBD>ھ<EFBFBD><EFBFBD><EFBFBD>
*/
HWND Subclass(HWND hWnd);
/**
* @brief ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><EFBFBD>ָ<EFBFBD>ԭ<EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><EFBFBD>ڹ<EFBFBD><EFBFBD>̺<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void Unsubclass();
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] hwndParent <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ھ<EFBFBD><EFBFBD><EFBFBD>
* @param[in] pstrName <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] dwStyle <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
* @param[in] dwExStyle <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><EFBFBD>ʽ
* @param[in] isLayeredWindow <EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD>Ĭ<EFBFBD><EFBFBD>Ϊ true
* @param[in] rc <EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>С
* @return <EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD><EFBFBD>ھ<EFBFBD><EFBFBD><EFBFBD>
*/
virtual HWND Create(HWND hwndParent, LPCTSTR pstrName, DWORD dwStyle, DWORD dwExStyle, bool isLayeredWindow = true, const UiRect& rc = UiRect(0, 0, 0, 0));
/**
* @brief <EFBFBD>رմ<EFBFBD><EFBFBD><EFBFBD>
* @param[in] <EFBFBD>ر<EFBFBD><EFBFBD><EFBFBD>Ϣ
* @return <EFBFBD><EFBFBD>
*/
virtual void Close(UINT nRet = IDOK);
/**
* @brief <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD><EFBFBD><EFBFBD>
* @param[in] bShow Ϊ true ʱ<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD>Ϊ false ʱΪ<EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD><EFBFBD>ڣ<EFBFBD>Ĭ<EFBFBD><EFBFBD>Ϊ true
* @param[in] bTakeFocus <EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><EFBFBD>Ϊ true
* @return <EFBFBD><EFBFBD>
*/
virtual void ShowWindow(bool bShow = true, bool bTakeFocus = true);
/**
* @brief <EFBFBD><EFBFBD>ʾģ̬<EFBFBD>Ի<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƽ<EFBFBD><EFBFBD><EFBFBD>
* @param[in] parent_hwnd <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ھ<EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void ShowModalFake(HWND parent_hwnd);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD>ڣ<EFBFBD>֧<EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><EFBFBD>Ļ
* @return <EFBFBD><EFBFBD>
*/
void CenterWindow();
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD>
* @param[in] nRes <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ ID
* @return <EFBFBD><EFBFBD>
*/
void SetIcon(UINT nRes);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> Windows SendMessage <EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ
* @param[in] uMsg <EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] wParam <EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD>
* @param[in] lParam <EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD><EFBFBD>ڶ<EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
LRESULT SendMessage(UINT uMsg, WPARAM wParam = 0, LPARAM lParam = 0L);
/**
* @brief Ͷ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] uMsg <EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] wParam <EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD>
* @param[in] lParam <EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD><EFBFBD>ڶ<EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
LRESULT PostMessage(UINT uMsg, WPARAM wParam = 0, LPARAM lParam = 0L);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڹر<EFBFBD><EFBFBD>¼<EFBFBD>
* @param[in] callback ָ<EFBFBD><EFBFBD><EFBFBD>رպ<EFBFBD><EFBFBD>Ļص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void AttachWindowClose(const EventCallback& callback);
protected:
/**
* @brief <EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD> WM_NCDESTROY <EFBFBD><EFBFBD>Ϣʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] hWnd <EFBFBD><EFBFBD><EFBFBD>ھ<EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
virtual void OnFinalMessage(HWND hWnd);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ڹ<EFBFBD><EFBFBD>̺<EFBFBD><EFBFBD><EFBFBD>
* @param[in] hWnd <EFBFBD><EFBFBD><EFBFBD>ھ<EFBFBD><EFBFBD><EFBFBD>
* @param[in] uMsg <EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>
* @param[in] wParam <EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD>
* @param[in] lParam <EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
static LRESULT CALLBACK __WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
static LRESULT CALLBACK __ControlProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
public:
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><EFBFBD>յ<EFBFBD> WM_CREATE <EFBFBD><EFBFBD>Ϣʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] hWnd <EFBFBD><EFBFBD><EFBFBD>ھ<EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void Init(HWND hWnd);
/**
* @brief <EFBFBD>󶨴<EFBFBD><EFBFBD>ڵĶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] pRoot <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD> true <EFBFBD>󶨳ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊʧ<EFBFBD><EFBFBD>
*/
bool AttachDialog(Box* pRoot);
/**
* @brief <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿؼ<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڶԿؼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] pControl <EFBFBD>ؼ<EFBFBD>ָ<EFBFBD><EFBFBD>
* @param[in] pParent <EFBFBD>ؼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return true Ϊ<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊʧ<EFBFBD><EFBFBD>
*/
bool InitControls(Control* pControl, Box* pParent = NULL);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>տؼ<EFBFBD>
* @param[in] pControl <EFBFBD>ؼ<EFBFBD>ָ<EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void ReapObjects(Control* pControl);
/// <20><>Դ<EFBFBD><D4B4><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ·<EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ·<EFBFBD><EFBFBD>
*/
std::wstring GetWindowResourcePath();
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ·<EFBFBD><EFBFBD>
* @param[in] strPath Ҫ<EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>·<EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void SetWindowResourcePath(const std::wstring& strPath);
/**
* @brief <EFBFBD><EFBFBD>ȡĬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>
*/
TFontInfo* GetDefaultFontInfo();
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
* @param[in] strClassName ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] strControlAttrList ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD> XML ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void AddClass(const std::wstring& strClassName, const std::wstring& strControlAttrList);
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD> map <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
const std::map<std::wstring, std::wstring>* GetClassMap();
/**
* @brief <EFBFBD><EFBFBD>ȡָ<EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] strClassName ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>XML ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
std::wstring GetClassAttributes(const std::wstring& strClassName) const;
/**
* @brief ɾ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
* @param[in] strClassName Ҫɾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD> true Ϊ<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>false Ϊʧ<EFBFBD>ܻ<EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
bool RemoveClass(const std::wstring& strClassName);
/**
* @brief ɾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
* @return <EFBFBD><EFBFBD>
*/
void RemoveAllClass();
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] strGroupName <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] pControl <EFBFBD>ؼ<EFBFBD>ָ<EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD> true <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD>ӳɹ<EFBFBD><EFBFBD><EFBFBD>false <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
bool AddOptionGroup(const std::wstring& strGroupName, Control* pControl);
/**
* @brief <EFBFBD><EFBFBD>ȡָ<EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>пؼ<EFBFBD><EFBFBD>б<EFBFBD>
* @param[in] strGroupName ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>пؼ<EFBFBD><EFBFBD>б<EFBFBD>
*/
std::vector<Control*>* GetOptionGroup(const std::wstring& strGroupName);
/**
* @brief ɾ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] strGroupName <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] pControl <EFBFBD>ؼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void RemoveOptionGroup(const std::wstring& strGroupName, Control* pControl);
/**
* @brief ɾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void RemoveAllOptionGroups();
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼƬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void ClearImageCache();
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>õ<EFBFBD> x <EFBFBD><EFBFBD> y <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
POINT GetMousePos() const;
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı߿<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD>Ĵ<EFBFBD>С
* @return <EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı߿<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD>Ĵ<EFBFBD>С
*/
UiRect GetSizeBox();
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı߿<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD>Ĵ<EFBFBD>С
* @param[in] rcSizeBox Ҫ<EFBFBD><EFBFBD><EFBFBD>õĴ<EFBFBD>С
* @return <EFBFBD><EFBFBD>
*/
void SetSizeBox(const UiRect& rcSizeBox);
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>򣨿<EFBFBD><EFBFBD>϶<EFBFBD><EFBFBD><EFBFBD><EFBFBD>򣩣<EFBFBD><EFBFBD><EFBFBD>Ӧ XML <EFBFBD><EFBFBD> caption <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
UiRect GetCaptionRect() const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD>ڱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] rcCaption Ҫ<EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ
* @return <EFBFBD><EFBFBD>
*/
void SetCaptionRect(UiRect& rcCaption);
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Բ<EFBFBD>Ǵ<EFBFBD>С<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ XML <EFBFBD><EFBFBD> roundcorner <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Բ<EFBFBD>Ǵ<EFBFBD>С
*/
CSize GetRoundCorner() const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD><EFBFBD>Բ<EFBFBD>Ǵ<EFBFBD>С
* @param[in] cx Բ<EFBFBD>ǿ<EFBFBD>
* @param[in] cy Բ<EFBFBD>Ǹ<EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void SetRoundCorner(int cx, int cy);
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
* @return <EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
*/
UiRect GetMaximizeInfo() const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
* @param[in] rcMaximize Ҫ<EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
* @return <EFBFBD><EFBFBD>
*/
void SetMaximizeInfo(UiRect& rcMaximize);
/**
* @brief <EFBFBD><EFBFBD>ȡ͸<EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD>޲<EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD>ĵľŹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ XML <EFBFBD><EFBFBD> alphafixcorner <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޲<EFBFBD><EFBFBD><EFBFBD>Χ
*/
UiRect GetAlphaFixCorner() const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD>޲<EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD>ĵľŹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] rc Ҫ<EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD>޲<EFBFBD><EFBFBD><EFBFBD>Χ
* @return <EFBFBD><EFBFBD>
*/
void SetAlphaFixCorner(UiRect& rc);
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>ڵij<EFBFBD>ʼ<EFBFBD>߶<EFBFBD>ռ<EFBFBD><EFBFBD>Ļ<EFBFBD>߶ȵİٷֱȣ<EFBFBD><EFBFBD><EFBFBD>Ӧ XML <EFBFBD><EFBFBD> heightpercent <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD>ٷֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
double GetHeightPercent() const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD>ڵij<EFBFBD>ʼ<EFBFBD>߶<EFBFBD>ռ<EFBFBD><EFBFBD>Ļ<EFBFBD>߶ȵİٷֱ<EFBFBD>
* @param[in] heightPercent <EFBFBD>ٷֱ<EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void SetHeightPercent(double heightPercent);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><EFBFBD>е<EFBFBD><EFBFBD>ı<EFBFBD> ID <EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD>ڱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>
* @param[in] strTextId <EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void SetTextId(const std::wstring& strTextId);
/// <20><>Ӱ<EFBFBD><D3B0><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ񸽼<EFBFBD><EFBFBD><EFBFBD>ӰЧ<EFBFBD><EFBFBD>
* @param[in] bShadowAttached Ϊ true ʱ<EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD>false ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void SetShadowAttached(bool bShadowAttached);
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ӰͼƬ
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӰͼƬλ<EFBFBD><EFBFBD>
*/
std::wstring GetShadowImage() const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӰͼƬ
* @param[in] strImage ͼƬλ<EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void SetShadowImage(const std::wstring &strImage);
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>Ӱ<EFBFBD>ľŹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӱ<EFBFBD>ľŹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
*/
UiRect GetShadowCorner() const;
/**
* @brief ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӱ<EFBFBD>زĵľŹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] rect <EFBFBD>Ź<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
* @return <EFBFBD><EFBFBD>
*/
void SetShadowCorner(const UiRect rect);
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
* @param[in] bContainShadow <EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӱ<EFBFBD><EFBFBD>true Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><EFBFBD>Ϊ false <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
*/
UiRect GetPos(bool bContainShadow = false) const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>ã<EFBFBD><EFBFBD><EFBFBD> SetWindowPos <EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD>
* @param[in] rc <EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
* @param[in] bNeedDpiScale Ϊ false <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD> rc <EFBFBD><EFBFBD><EFBFBD><EFBFBD> DPI <EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] uFlags <EFBFBD><EFBFBD>Ӧ SetWindowPos <EFBFBD><EFBFBD> uFlags ѡ<EFBFBD><EFBFBD>
* @param[in] hWndInsertAfter <EFBFBD><EFBFBD>Ӧ SetWindowPos <EFBFBD><EFBFBD> hWndInsertAfter ѡ<EFBFBD><EFBFBD>
* @param[in] bContainShadow <EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӱ<EFBFBD><EFBFBD>Χ<EFBFBD><EFBFBD>Ĭ<EFBFBD><EFBFBD>Ϊ false
* @return <EFBFBD><EFBFBD>
*/
void SetPos(const UiRect& rc, bool bNeedDpiScale, UINT uFlags, HWND hWndInsertAfter = NULL, bool bContainShadow = false);
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><EFBFBD>Χ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ XML <EFBFBD><EFBFBD> mininfo <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] bContainShadow <EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӱ<EFBFBD><EFBFBD>Χ<EFBFBD><EFBFBD>Ĭ<EFBFBD><EFBFBD>Ϊ false
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
*/
CSize GetMinInfo(bool bContainShadow = false) const;
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ XML <EFBFBD><EFBFBD> maxinfo <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] bContainShadow <EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӱ<EFBFBD><EFBFBD>Χ<EFBFBD><EFBFBD>Ĭ<EFBFBD><EFBFBD>Ϊ false
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
*/
CSize GetMaxInfo(bool bContainShadow = false) const;
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>ڳ<EFBFBD>ʼ<EFBFBD><EFBFBD>С
* @param[in] bContainShadow <EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӱ<EFBFBD><EFBFBD>Χ<EFBFBD><EFBFBD>Ĭ<EFBFBD><EFBFBD>Ϊ false
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
*/
CSize GetInitSize(bool bContainShadow = false) const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><EFBFBD>Χ
* @param[in] cx <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] cy <EFBFBD>߶<EFBFBD>
* @param[in] bContainShadow Ϊ false <EFBFBD><EFBFBD>ʾ cx cy <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӱ
* @return <EFBFBD><EFBFBD>
*/
//
void SetMinInfo(int cx, int cy, bool bContainShadow = false);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ
* @param[in] cx <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] cy <EFBFBD>߶<EFBFBD>
* @param[in] bContainShadow Ϊ false <EFBFBD><EFBFBD>ʾ cx cy <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӱ
* @return <EFBFBD><EFBFBD>
*/
void SetMaxInfo(int cx, int cy, bool bContainShadow = false);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD>ڳ<EFBFBD>ʼ<EFBFBD><EFBFBD>С
* @param[in] cx <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] cy <EFBFBD>߶<EFBFBD>
* @param[in] bContainShadow Ϊ false <EFBFBD><EFBFBD>ʾ cx cy <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӱ
* @param[in] bNeedDpiScale Ϊ false <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DPI <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void SetInitSize(int cx, int cy, bool bContainShadow = false, bool bNeedDpiScale = true);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>Ϣ<EFBFBD>Ѿ<EFBFBD><EFBFBD>ɷ<EFBFBD>
* @param[in] pFilter һ<EFBFBD><EFBFBD><EFBFBD>̳<EFBFBD><EFBFBD><EFBFBD> IUIMessageFilter <EFBFBD>Ķ<EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫʵ<EFBFBD><EFBFBD> MessageHandler <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return ʼ<EFBFBD>շ<EFBFBD><EFBFBD><EFBFBD> true
*/
bool AddMessageFilter(IUIMessageFilter* pFilter);
/**
* @brief <EFBFBD>Ƴ<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] pFilter һ<EFBFBD><EFBFBD><EFBFBD>̳<EFBFBD><EFBFBD><EFBFBD> IUIMessageFilter <EFBFBD>Ķ<EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD> true <EFBFBD><EFBFBD>ʾ<EFBFBD>Ƴ<EFBFBD><EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܸù<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
bool RemoveMessageFilter(IUIMessageFilter* pFilter);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ҿؼ<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>ò<EFBFBD><EFBFBD>ҿؼ<EFBFBD><EFBFBD>Ĺ<EFBFBD><EFBFBD><EFBFBD>
* @param[in] pFinder <EFBFBD>̳<EFBFBD><EFBFBD><EFBFBD> IControlFromPointFinder <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD> FindControlFromPoint <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return ʼ<EFBFBD>շ<EFBFBD><EFBFBD><EFBFBD> true
*/
bool AddControlFromPointFinder(IControlFromPointFinder* pFinder);
/**
* @brief <EFBFBD>Ƴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҿؼ<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>ò<EFBFBD><EFBFBD>ҿؼ<EFBFBD><EFBFBD>Ĺ<EFBFBD><EFBFBD><EFBFBD>
* @param[in] pFinder <EFBFBD>̳<EFBFBD><EFBFBD><EFBFBD> IControlFromPointFinder <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
* @return <EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ù<EFBFBD><EFBFBD>ӿ<EFBFBD><EFBFBD>ܲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
bool RemoveControlFromPointFinder(IControlFromPointFinder* pFinder);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD> TranslateMessage ֮ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] pTranslateAccelerator <EFBFBD>̳<EFBFBD><EFBFBD><EFBFBD> ITranslateAccelerator <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD> TranslateAccelerator <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return ʼ<EFBFBD>շ<EFBFBD><EFBFBD><EFBFBD> true
*/
bool AddTranslateAccelerator(ITranslateAccelerator *pTranslateAccelerator);
/**
* @brief <EFBFBD>Ƴ<EFBFBD>һ<EFBFBD><EFBFBD> TranslateMessage ֮ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] pTranslateAccelerator <EFBFBD>̳<EFBFBD><EFBFBD><EFBFBD> ITranslateAccelerator <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
* @return <EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>򷵻<EFBFBD> false <EFBFBD><EFBFBD><EFBFBD>ܸù<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
bool RemoveTranslateAccelerator(ITranslateAccelerator *pTranslateAccelerator);
/**
* @brief ִ<EFBFBD><EFBFBD> TranslateMessage <EFBFBD>׶εĹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] pMsg <EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD> true <EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>򷵻<EFBFBD> false
*/
bool TranslateAccelerator(LPMSG pMsg);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD>ɷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] uMsg <EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>
* @param[in] wParam <EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD>
* @param[in] lParam <EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD> true <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
*/
virtual LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>ִ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>и<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
* @param[in] uMsg <EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>
* @param[in] wParam <EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD>
* @param[in] lParam <EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD>
* @param[out] handled <EFBFBD><EFBFBD>Ϣ<EFBFBD>Ƿ<EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڹ<EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
LRESULT DoHandlMessage(UINT uMsg, WPARAM wParam, LPARAM lParam, bool& handled);
/**
* @brief <EFBFBD><EFBFBD> CallWindowProc API <EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ
* @param[in] uMsg <EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>
* @param[in] wParam <EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD>
* @param[in] lParam <EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
LRESULT CallWindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam);
/**
* @brief <EFBFBD>ж<EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
* @param[in] pt <EFBFBD><EFBFBD><EFBFBD>ǰλ<EFBFBD><EFBFBD>
* @param[in] wParam <EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD>
* @param[in] lParam <EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD> true <EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> false Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ
*/
inline bool HandleMouseEnterLeave(const POINT &pt, WPARAM wParam, LPARAM lParam);
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀؼ<EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD>ؿؼ<EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
*/
Control* GetFocus() const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD><EFBFBD><EFBFBD>
* @param[in] pControl <EFBFBD>ؼ<EFBFBD>ָ<EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void SetFocus(Control* pControl);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>пؼ<EFBFBD>
* @param[in] pControl <EFBFBD>ؼ<EFBFBD>ָ<EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void SetFocusNeeded(Control* pControl);
/**
* @brief <EFBFBD>ô<EFBFBD><EFBFBD><EFBFBD>ʧȥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void KillFocus();
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ھ<EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD>ƴ<EFBFBD><EFBFBD><EFBFBD>
* @param[in]
* @return <EFBFBD><EFBFBD>
*/
void SetCapture();
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD>Դ
* @return <EFBFBD><EFBFBD>
*/
void ReleaseCapture();
/**
* @brief <EFBFBD>ж<EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD><EFBFBD>Ƿ񱻵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>򴥿<EFBFBD>
* @paran[in] pControl <EFBFBD>ؼ<EFBFBD>ָ<EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD> true <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>ǰ<EFBFBD>ؼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>򴥿<EFBFBD>״̬
*/
bool IsCaptureControl(const Control* pControl);
/**
* @brief <EFBFBD>жϵ<EFBFBD>ǰ<EFBFBD>Ƿ񲶻<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD> true Ϊ<EFBFBD><EFBFBD><EFBFBD>񣬷<EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
bool IsCaptured() const;
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><EFBFBD>ؼ<EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD>ؿؼ<EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
*/
Control* GetNewHover();
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
*/
POINT GetLastMousePos() const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
* @param[in] bHandle <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ true <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>false Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void SetHandlePointer(bool bHandle) { m_bHandlePointer = bHandle; };
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><EFBFBD>ھ<EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>Ϣ<EFBFBD>Ĵ<EFBFBD><EFBFBD>ھ<EFBFBD><EFBFBD><EFBFBD>
*/
HWND GetTooltipWindow() const;
/**
* @brief <EFBFBD>л<EFBFBD><EFBFBD>ؼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD>
* @param[in] bForward true Ϊ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ false<EFBFBD><EFBFBD>Ĭ<EFBFBD><EFBFBD>Ϊ true
* @return ʼ<EFBFBD>շ<EFBFBD><EFBFBD><EFBFBD> true<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޲ο<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
bool SetNextTabControl(bool bForward = true);
2019-04-19 17:19:57 +08:00
/// <20>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD><EFBFBD>
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
Control* GetRoot() const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ÿؼ<EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] bArrange true Ϊ<EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ false
* @return <EFBFBD><EFBFBD>
*/
void SetArrange(bool bArrange);
/**
* @brief <EFBFBD>ӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD>
* @param[in] pControl <EFBFBD>ؼ<EFBFBD>ָ<EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void AddDelayedCleanup(Control* pControl);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD>
* @param[in] pt ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD>ؿؼ<EFBFBD>ָ<EFBFBD><EFBFBD>
*/
Control* FindControl(POINT pt) const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ݿؼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʋ<EFBFBD><EFBFBD>ҿؼ<EFBFBD>
* @param[in] strName <EFBFBD>ؼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD>ؿؼ<EFBFBD>ָ<EFBFBD><EFBFBD>
*/
Control* FindControl(const std::wstring& strName) const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿؼ<EFBFBD>
* @param[in] pParent Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀؼ<EFBFBD>
* @param[in] pt Ҫ<EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD>ؿؼ<EFBFBD>ָ<EFBFBD><EFBFBD>
*/
Control* FindSubControlByPoint(Control* pParent, POINT pt) const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿؼ<EFBFBD>
* @param[in] pParent Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀؼ<EFBFBD>
* @param[in] strName Ҫ<EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD>ؿؼ<EFBFBD>ָ<EFBFBD><EFBFBD>
*/
Control* FindSubControlByName(Control* pParent, const std::wstring& strName) const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿؼ<EFBFBD>
* @param[in] pParent Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀؼ<EFBFBD>
* @param[in] typeinfo <EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><EFBFBD><EFBFBD>Ϣ
* @param[in] iIndex <EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>ȡ<EFBFBD>ڼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD>ؼ<EFBFBD>ָ<EFBFBD><EFBFBD>
*/
Control* FindSubControlByClass(Control* pParent, const type_info& typeinfo, int iIndex = 0);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿؼ<EFBFBD>
* @param[in] pParent Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀؼ<EFBFBD>
* @param[in] typeinfo <EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><EFBFBD><EFBFBD>Ϣ
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀؼ<EFBFBD><EFBFBD>б<EFBFBD>
*/
std::vector<Control*>* FindSubControlsByClass(Control* pParent, const type_info& typeinfo);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿ؼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD>б<EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
std::vector<Control*>* GetSubControlsByClass();
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
* @param[in] eventType ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>
* @param[in] wParam <EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD>
* @param[in] lParam <EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD>
* @return ʼ<EFBFBD>շ<EFBFBD><EFBFBD><EFBFBD> true
*/
bool SendNotify(EventType eventType, WPARAM wParam = 0, LPARAM lParam = 0);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
* @param[in] pControl <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><EFBFBD>ĸ<EFBFBD><EFBFBD>ؼ<EFBFBD>
* @param[in] msg <EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>
* @param[in] wParam <EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD>
* @param[in] lParam <EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD>
* @return ʼ<EFBFBD>շ<EFBFBD><EFBFBD><EFBFBD> true
*/
bool SendNotify(Control* pControl, EventType msg, WPARAM wParam = 0, LPARAM lParam = 0);
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DC
* @return <EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DC
*/
HDC GetPaintDC() const;
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD><EFBFBD>ƶ<EFBFBD><EFBFBD><EFBFBD>
*/
IRenderContext* GetRenderContext() const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD><EFBFBD><EFBFBD>Ϣ
* @param[in] rcItem <EFBFBD>ػΧ
* @return <EFBFBD><EFBFBD>
*/
void Invalidate(const UiRect& rcItem);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ƺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void Paint();
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] nAlpha ͸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
* @return <EFBFBD><EFBFBD>
*/
void SetAlpha(int nAlpha);
/**
* @brief <EFBFBD>жϵ<EFBFBD>ǰ<EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD>Ⱦ͸<EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD> true Ϊ<EFBFBD>ǣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ false
*/
bool IsRenderTransparent() const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ⱦ͸<EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD>
* @param[in] bCanvasTransparent <EFBFBD><EFBFBD><EFBFBD><EFBFBD> true Ϊ<EFBFBD><EFBFBD>Ⱦ͸<EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ false
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD>״̬
*/
bool SetRenderTransparent(bool bCanvasTransparent);
/**
* @brief <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
virtual void OnInitLayout();
private:
static Control* CALLBACK __FindControlFromNameHash(Control* pThis, LPVOID pData);
static Control* CALLBACK __FindControlFromCount(Control* pThis, LPVOID pData);
static Control* CALLBACK __FindControlFromPoint(Control* pThis, LPVOID pData);
static Control* CALLBACK __FindControlFromTab(Control* pThis, LPVOID pData);
2019-04-19 17:19:57 +08:00
//static Control* CALLBACK __FindControlFromShortcut(Control* pThis, LPVOID pData);
static Control* CALLBACK __FindControlFromUpdate(Control* pThis, LPVOID pData);
static Control* CALLBACK __FindControlFromName(Control* pThis, LPVOID pData);
static Control* CALLBACK __FindControlFromClass(Control* pThis, LPVOID pData);
static Control* CALLBACK __FindControlsFromClass(Control* pThis, LPVOID pData);
private:
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><EFBFBD>
* @param[in] renderOffset ƫ<EFBFBD><EFBFBD>ֵ
* @return <EFBFBD><EFBFBD>
*/
void SetRenderOffset(CPoint renderOffset);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><EFBFBD> x <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] renderOffsetX <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
* @return <EFBFBD><EFBFBD>
*/
void SetRenderOffsetX(int renderOffsetX);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><EFBFBD> y <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] renderOffsetY <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
* @return <EFBFBD><EFBFBD>
*/
void SetRenderOffsetY(int renderOffsetY);
protected:
HWND m_hWnd;
WNDPROC m_OldWndProc;
bool m_bSubclassed;
Box* m_pRoot;
EventMap OnEvent;
protected:
CSize m_szMinWindow;
CSize m_szMaxWindow;
CSize m_szInitWindowSize;
UiRect m_rcMaximizeInfo;
UiRect m_rcSizeBox;
UiRect m_rcAlphaFix;
CSize m_szRoundCorner;
UiRect m_rcCaption;
double m_heightPercent;
HDC m_hDcPaint;
std::unique_ptr<IRenderContext> m_renderContext;
bool m_bIsLayeredWindow;
int m_nAlpha;
CPoint m_renderOffset;
bool m_bFirstLayout;
HWND m_hwndTooltip;
TOOLINFO m_ToolTip;
Control* m_pFocus;
Control* m_pNewHover;
Control* m_pEventHover;
Control* m_pEventClick;
Control* m_pEventKey;
CPoint m_ptLastMousePos;
Control* m_pEventTouch;
CPoint m_ptLastTouchPos;
Control* m_pEventPointer;
bool m_bHandlePointer;
UINT m_uTimerID;
bool m_bIsArranged;
bool m_bFocusNeeded;
bool m_bMouseTracking;
bool m_bMouseCapture;
std::wstring m_strWindowResourcePath; //ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD>Դ·<D4B4><C2B7>,<2C><><EFBFBD><EFBFBD>GetSkinFolder()
TFontInfo m_defaultFontInfo;
std::map<std::wstring, std::wstring> m_defaultAttrHash;
std::map<std::wstring, std::vector<Control*>> m_mOptionGroup;
std::vector<IUIMessageFilter*> m_aPreMessageFilters;
std::vector<IUIMessageFilter*> m_aMessageFilters;
std::vector<ITranslateAccelerator*> m_aTranslateAccelerator;
std::vector<IControlFromPointFinder*> m_aIControlFromPointFinder;
std::vector<Control*> m_aDelayedCleanup;
std::vector<Control*> m_aFoundControls;
std::map<std::wstring, Control*> m_mNameHash;
nbase::WeakCallbackFlag m_closeFlag;
Shadow m_shadow;
bool m_bFakeModal = false;
};
} // namespace ui
#endif // UI_CORE_WINDOW_H_