WTL中窗口类的一些特殊处理
//
WTL中窗口类的一些特殊处理
struct CWndClassInfo
{
WNDCLASSEX m_wc;
LPCSTR m_lpszOrigName;
WNDPROC pWndProc;
LPCSTR m_lpszCursorID;
BOOL m_bSystemCursor;
ATOM m_atom;
CHAR m_szAutoName[ 5 + sizeof ( void * ) * CHAR_BIT];
};
这个结构中有两个最重要的成员:m_wc和m_atom。m_wc是窗口类的结构,想要手动注册类时所使用的结构。m_atom用于确定这个类是否已经注册,在还没有注册类之前,修改m_wc还是有效果的。
typedef struct {
UINT cbSize;
UINT style;
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCTSTR lpszMenuName;
LPCTSTR lpszClassName;
HICON hIconSm;
} WNDCLASSEX;
ATL::CWndClassInfo wc =
{
{ sizeof (WNDCLASSEX), style, StartWindowProc, 0 , 0 , NULL, NULL, NULL, (HBRUSH)(bkgnd + 1 ), NULL, WndClassName, NULL }, // WNDCLASSEX
NULL, // m_lpszOrigName
NULL, // pWndProc
IDC_ARROW, // m_lpszCursorID
TRUE, // m_bSystemCursor
0 , // m_atom
_T( "" ) // m_szAutoName
};
/////////////////////////////////////////////////////////////////////////// //
// CWndClassInfo - Manages Windows class information
#define DECLARE_WND_CLASS(WndClassName) \
static ATL::CWndClassInfo & GetWndClassInfo() \
{ \
static ATL::CWndClassInfo wc = \
{ \
{ sizeof (WNDCLASSEX), CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS, StartWindowProc, \
0 , 0 , NULL, NULL, NULL, (HBRUSH)(COLOR_WINDOW + 1 ), NULL, WndClassName, NULL }, \
NULL, NULL, IDC_ARROW, TRUE, 0 , _T( "" ) \
}; \
return wc; \
}
#define DECLARE_WND_CLASS_EX(WndClassName, style, bkgnd) \
static ATL::CWndClassInfo & GetWndClassInfo() \
{ \
static ATL::CWndClassInfo wc = \
{ \
{ sizeof (WNDCLASSEX), style, StartWindowProc, \
0 , 0 , NULL, NULL, NULL, (HBRUSH)(bkgnd + 1 ), NULL, WndClassName, NULL }, \
NULL, NULL, IDC_ARROW, TRUE, 0 , _T( "" ) \
}; \
return wc; \
}
#define DECLARE_WND_SUPERCLASS(WndClassName, OrigWndClassName) \
static ATL::CWndClassInfo & GetWndClassInfo() \
{ \
static ATL::CWndClassInfo wc = \
{ \
{ sizeof (WNDCLASSEX), 0 , StartWindowProc, \
0 , 0 , NULL, NULL, NULL, NULL, NULL, WndClassName, NULL }, \
OrigWndClassName, NULL, NULL, TRUE, 0 , _T( "" ) \
}; \
return wc; \
}
struct CWndClassInfo
{
WNDCLASSEX m_wc;
LPCSTR m_lpszOrigName;
WNDPROC pWndProc;
LPCSTR m_lpszCursorID;
BOOL m_bSystemCursor;
ATOM m_atom;
CHAR m_szAutoName[ 5 + sizeof ( void * ) * CHAR_BIT];
};
这个结构中有两个最重要的成员:m_wc和m_atom。m_wc是窗口类的结构,想要手动注册类时所使用的结构。m_atom用于确定这个类是否已经注册,在还没有注册类之前,修改m_wc还是有效果的。
typedef struct {
UINT cbSize;
UINT style;
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCTSTR lpszMenuName;
LPCTSTR lpszClassName;
HICON hIconSm;
} WNDCLASSEX;
ATL::CWndClassInfo wc =
{
{ sizeof (WNDCLASSEX), style, StartWindowProc, 0 , 0 , NULL, NULL, NULL, (HBRUSH)(bkgnd + 1 ), NULL, WndClassName, NULL }, // WNDCLASSEX
NULL, // m_lpszOrigName
NULL, // pWndProc
IDC_ARROW, // m_lpszCursorID
TRUE, // m_bSystemCursor
0 , // m_atom
_T( "" ) // m_szAutoName
};
/////////////////////////////////////////////////////////////////////////// //
// CWndClassInfo - Manages Windows class information
#define DECLARE_WND_CLASS(WndClassName) \
static ATL::CWndClassInfo & GetWndClassInfo() \
{ \
static ATL::CWndClassInfo wc = \
{ \
{ sizeof (WNDCLASSEX), CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS, StartWindowProc, \
0 , 0 , NULL, NULL, NULL, (HBRUSH)(COLOR_WINDOW + 1 ), NULL, WndClassName, NULL }, \
NULL, NULL, IDC_ARROW, TRUE, 0 , _T( "" ) \
}; \
return wc; \
}
#define DECLARE_WND_CLASS_EX(WndClassName, style, bkgnd) \
static ATL::CWndClassInfo & GetWndClassInfo() \
{ \
static ATL::CWndClassInfo wc = \
{ \
{ sizeof (WNDCLASSEX), style, StartWindowProc, \
0 , 0 , NULL, NULL, NULL, (HBRUSH)(bkgnd + 1 ), NULL, WndClassName, NULL }, \
NULL, NULL, IDC_ARROW, TRUE, 0 , _T( "" ) \
}; \
return wc; \
}
#define DECLARE_WND_SUPERCLASS(WndClassName, OrigWndClassName) \
static ATL::CWndClassInfo & GetWndClassInfo() \
{ \
static ATL::CWndClassInfo wc = \
{ \
{ sizeof (WNDCLASSEX), 0 , StartWindowProc, \
0 , 0 , NULL, NULL, NULL, NULL, NULL, WndClassName, NULL }, \
OrigWndClassName, NULL, NULL, TRUE, 0 , _T( "" ) \
}; \
return wc; \
}