WTL中窗口类的一些特殊处理

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; \
}

你可能感兴趣的:(WTL中窗口类的一些特殊处理)