天下

记录修行的印记

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, 00, 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, \
          
00, 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, \
          
00, 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, \
          
00, NULL, NULL, NULL, NULL, NULL, WndClassName, NULL }, \
        OrigWndClassName, NULL, NULL, TRUE, 
0, _T("") \
    }; \
    
return wc; \
}

posted on 2012-02-21 10:26 天下 阅读(518) 评论(0)  编辑 收藏 引用 所属分类: WTL


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2012年1月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234

导航

统计

常用链接

留言簿(4)

随笔分类(378)

随笔档案(329)

链接

最新随笔

搜索

最新评论