青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

天下

記錄修行的印記

wtl學(xué)習(xí)筆記(1),窗口類的注冊(cè)

 

任何非對(duì)話框窗口都是來(lái)自CWindowImpl派生
對(duì)話框窗口都是來(lái)自CDialogImpl派生    
定義一個(gè)窗口的實(shí)現(xiàn)
你的新窗口類需要包含三件事情:
一、一個(gè)窗口類的定義,如:
    默認(rèn)由父類CWindowImpl的DECLARE_WND_CLASS(NULL) 完成窗口WNDCLASS結(jié)構(gòu)體的定義.
    也可以自己通過(guò)DECLARE_WND_CLASS(_T(
"My Window Class")) 完成窗口WNDCLASS結(jié)構(gòu)體的定義.
    
二、添加消息映射鏈
    其中祖先類CWindowImplRoot繼承自CMessageMap
三、窗口使用的默認(rèn)窗口類型,稱為稱為window traits
預(yù)定義的window traits:
typedef CWinTraits
<WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, 0> CControlWinTraits;
typedef CWinTraits
<WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, WS_EX_APPWINDOW | WS_EX_WINDOWEDGE> CFrameWinTraits;
typedef CWinTraits
<WS_OVERLAPPEDWINDOW | WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, WS_EX_MDICHILD>    CMDIChildWinTraits;
typedef CWinTraits
<00> CNullTraits;


類繼承關(guān)系:
template 
<class T, class TBase /* = CWindow */class TWinTraits /* = CControlWinTraits */>
class ATL_NO_VTABLE CWindowImpl : public CWindowImplBaseT< TBase, TWinTraits >
{
};

template 
<class TBase = CWindow, class TWinTraits = CControlWinTraits>
class ATL_NO_VTABLE CWindowImplBaseT : public CWindowImplRoot< TBase >
{
public:
    WNDPROC m_pfnSuperWindowProc;

    CWindowImplBaseT() : m_pfnSuperWindowProc(::DefWindowProc)
    {}    
};

template 
<class TBase /* = CWindow */>
class ATL_NO_VTABLE CWindowImplRoot : public TBase, public CMessageMap 
{
};


//窗口類的注冊(cè),宏:DECLARE_WND_CLASS
#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; \
}




全局變量:_AtlWinModule,_AtlBaseModule
extern CAtlWinModule _AtlWinModule;
extern CAtlBaseModule _AtlBaseModule;

//窗口類WNDCLASS結(jié)構(gòu)體的填充
struct _ATL_WNDCLASSINFOA
{
    WNDCLASSEXA m_wc;
    LPCSTR m_lpszOrigName;
    WNDPROC pWndProc;
    LPCSTR m_lpszCursorID;
    BOOL m_bSystemCursor;
    ATOM m_atom;
    CHAR m_szAutoName[
5+sizeof(void*)*CHAR_BIT];
    ATOM Register(WNDPROC
* p)
    {
        
return AtlWinModuleRegisterWndClassInfoA(&_AtlWinModule, &_AtlBaseModule, this, p);
    }
};    
typedef _ATL_WNDCLASSINFOA CWndClassInfoA;

窗口注冊(cè)過(guò)程
CMainFrame wndMain;
CFrameWindowImpl::Create()
ATOM atom 
= T::GetWndClassInfo().Register(&m_pfnSuperWindowProc);
//模板展開(kāi)后
//ATOM atom = CMainFrame::GetWndClassInfo().Register(&m_pfnSuperWindowProc);
//這里的T就是類 CMainFrame
//然后通過(guò)如下代碼,返回一個(gè)靜態(tài)變量 static WTL::CFrameWndClassInfo wc;

CFrameWndClassInfo::Register(
&m_pfnSuperWindowProc);
//CWindowImplBaseT::m_pfnSuperWindowProc
//CWindowImplBaseT() : m_pfnSuperWindowProc(::DefWindowProc){}





 

#include <atlbase.h>
#include 
<atlwin.h>


//可選的消息處理類
template <typename T>
class CPaintBkgnd : public CMessageMap
{
public:
    BEGIN_MSG_MAP(CPaintBkgnd)
        MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBkgnd)
    END_MSG_MAP()

    LRESULT OnEraseBkgnd(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL
& bHandled)
    {
        T
*   pT = static_cast<T*>(this);
        HDC  dc 
= (HDC)wParam;
        RECT rcClient;
        pT
->GetClientRect ( &rcClient );
        ::FillRect(dc, 
&rcClient, CreateSolidBrush(RGB(0xff,0x66,0x99)) );
        
return 1
    }
};

class CMyWindow : 
    
public CWindowImpl<CMyWindow, CWindow,CFrameWinTraits>,
    
public CPaintBkgnd<CMyWindow>
                    
{
public:
    
//DECLARE_WND_CLASS(_T("abc"))
    BEGIN_MSG_MAP(CMyWindow)
        MESSAGE_HANDLER(WM_CREATE, OnCreate)
        MESSAGE_HANDLER(WM_CLOSE, OnClose)
        
//CHAIN_MSG_MAP(CPaintBkgnd)
        MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBkgnd)
    END_MSG_MAP()

    LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL
& bHandled)
    {
        ATLTRACE(
"WM_CREATE==0x0001,MSG ID:0x%u\n",uMsg);
        
return 0;
    }
    LRESULT OnClose(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL
& bHandled)
    {
        DestroyWindow();
        PostQuitMessage(
0);
        
return 0;
    }
    LRESULT OnEraseBkgnd(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL
& bHandled)
    {
        HDC  dc 
= (HDC) wParam;
        RECT rcClient;
        
this->GetClientRect ( &rcClient );
        ::FillRect(dc, 
&rcClient, CreateSolidBrush(RGB(0xff,0x66,0x00)) );
        
return 1
    }
};


int _tWinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPTSTR lpstrCmdLine, int nCmdShow)
{
    CMyWindow wndMain;
    HWND hWnd 
= wndMain.Create(NULL,NULL,"good luck Aaron");
    
if (hWnd==NULL)
    {
        ::MessageBox(NULL,
"創(chuàng)建窗口失敗","提示",MB_OK);
    }
    wndMain.ShowWindow(nCmdShow);
    wndMain.UpdateWindow();

    MSG msg;
    
while ( GetMessage ( &msg, NULL, 00 ) > 0 )
    {
        TranslateMessage ( 
&msg );
        DispatchMessage ( 
&msg );
    }
    
return 0;
}

 

posted on 2011-12-03 11:54 天下 閱讀(1059) 評(píng)論(0)  編輯 收藏 引用 所屬分類: C/C++Win32WTL

<2012年2月>
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910

導(dǎo)航

統(tǒng)計(jì)

常用鏈接

留言簿(4)

隨筆分類(378)

隨筆檔案(329)

鏈接

最新隨筆

搜索

最新評(píng)論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久久人成影片一区二区三区观看| 久久久久久久久久久一区 | 国产精品豆花视频| 欧美一级夜夜爽| 亚洲乱码国产乱码精品精98午夜| 久久久久欧美| 久久久久久伊人| 久久精品99国产精品日本 | 亚洲精品一区久久久久久| 欧美大学生性色视频| 美女免费视频一区| 老牛影视一区二区三区| 久久婷婷人人澡人人喊人人爽| 久久精品色图| 欧美在线免费观看视频| 亚洲美女视频在线观看| 亚洲伦理在线观看| 一区二区三区偷拍| 亚洲图片自拍偷拍| 亚洲欧美激情视频| 久久精品国产精品| 免费亚洲电影在线| 亚洲国产欧美一区| 美国十次了思思久久精品导航| 久久综合狠狠综合久久综合88| 欧美+亚洲+精品+三区| 欧美福利一区| 一本大道久久a久久精品综合| 正在播放欧美视频| 欧美在线1区| 欧美大成色www永久网站婷| 亚洲在线黄色| 久久精品欧美日韩| 欧美电影免费观看高清| 国产精品成av人在线视午夜片| 国产精品视频在线观看| 黄色成人在线网址| 国产一区二区三区丝袜| 亚洲成色www8888| 夜夜嗨av一区二区三区免费区| 亚洲欧美日韩国产一区二区| 久久久久国产免费免费| 亚洲日本成人在线观看| 午夜精品一区二区三区在线视| 午夜在线a亚洲v天堂网2018| 免费在线观看一区二区| 国产精品一区在线播放| 亚洲精品午夜| 亚洲制服丝袜在线| 欧美电影美腿模特1979在线看| 亚洲最新中文字幕| 久久久久久久网| 欧美午夜在线| 91久久黄色| 久久久久久久成人| 一本色道久久综合亚洲91| 亚洲国产精品成人综合| 亚洲欧美日韩另类| 亚洲第一黄网| 久久久久久有精品国产| 国产精品尤物福利片在线观看| 亚洲精品中文字幕有码专区| 久久精品主播| 亚洲在线黄色| 欧美午夜视频在线观看| 亚洲激情网站| 欧美成人精品高清在线播放| 亚洲欧美激情视频| 欧美视频网站| 99在线|亚洲一区二区| 羞羞答答国产精品www一本| 亚洲日本欧美日韩高观看| 久久国产手机看片| 国产乱码精品一区二区三区不卡 | 亚洲美女精品成人在线视频| 久久久综合网| 亚洲电影免费在线| 久久久免费观看视频| 午夜久久一区| 国产一区二区欧美| 午夜伦欧美伦电影理论片| 亚洲黄色在线| 欧美成人a∨高清免费观看| 伊人久久婷婷| 免费观看亚洲视频大全| 亚洲视频一区二区在线观看| 欧美一区二区成人6969| 国产日本欧美一区二区三区在线| 午夜精品一区二区三区在线| 国产精品99久久99久久久二8| 欧美日韩三级电影在线| 亚洲一区二区三区乱码aⅴ| 中国女人久久久| 国产女人精品视频| 久久久精品欧美丰满| 久久精品亚洲乱码伦伦中文| 亚洲第一在线| 免费日韩av片| 欧美日韩另类视频| 午夜精品久久久久久久99水蜜桃| 亚洲午夜激情免费视频| 国产日韩亚洲| 欧美不卡高清| 欧美日韩亚洲一区| 午夜国产一区| 久久久久久亚洲综合影院红桃| 在线观看成人一级片| 最新国产成人av网站网址麻豆| 欧美日韩精品一区二区| 久久国产精品免费一区| 美女任你摸久久| 亚洲午夜日本在线观看| 亚欧成人精品| 欧美日韩在线播放三区| 久久久免费精品视频| 欧美日韩免费观看一区二区三区| 久久久女女女女999久久| 国产精品麻豆成人av电影艾秋| 亚洲高清123| 黄网动漫久久久| 午夜精品成人在线| 亚洲五月六月| 欧美欧美全黄| 亚洲国产精品嫩草影院| 韩国v欧美v日本v亚洲v| 亚洲一区高清| 午夜激情久久久| 欧美视频一区| 99精品久久| aa级大片欧美| 欧美精品999| 亚洲国产精品热久久| 亚洲国产经典视频| 久久视频免费观看| 六月婷婷久久| 亚洲国产成人高清精品| 久久一区精品| 欧美承认网站| 亚洲精品美女久久7777777| 久久美女性网| 欧美成人r级一区二区三区| 影音先锋成人资源站| 久久视频精品在线| 亚洲国产精品va在线看黑人| 亚洲精品乱码久久久久久黑人 | 国产精品国产a| 一本色道久久88亚洲综合88| 亚洲一区二区三区久久| 国产欧美日韩一区二区三区| 欧美亚洲日本国产| 美女网站久久| 亚洲欧洲日韩女同| 欧美另类女人| 亚洲一级在线| 久久在线免费| 日韩视频在线一区| 国产精品国产a级| 久久精品国产在热久久| 欧美成人高清| 日韩视频一区二区三区在线播放免费观看| 美女啪啪无遮挡免费久久网站| 亚洲国产成人porn| 在线一区二区三区四区| 国产欧美精品国产国产专区| 久久久久国产一区二区| 亚洲美女免费精品视频在线观看| 午夜国产欧美理论在线播放| 狠狠噜噜久久| 欧美日韩国产精品自在自线| 亚洲欧美日韩视频一区| 男同欧美伦乱| 亚洲欧美成人一区二区三区| 狠色狠色综合久久| 欧美精品电影| 欧美一区二区三区视频免费播放| 欧美福利一区| 久久精品日韩一区二区三区| 亚洲美洲欧洲综合国产一区| 国产精品一页| 欧美片第1页综合| 久久国产手机看片| 一区二区三区 在线观看视频| 裸体素人女欧美日韩| 亚洲综合999| 欧美激情一区二区三区成人 | 午夜电影亚洲| 亚洲三级色网| 另类国产ts人妖高潮视频| 亚洲视频在线观看| 亚洲国产精品久久91精品| 国产精品拍天天在线| 欧美aⅴ一区二区三区视频| 先锋影音网一区二区| 亚洲精品午夜| 欧美xx69| 美女在线一区二区| 欧美在线视频免费播放| 亚洲视频专区在线| 亚洲激情av在线| 在线免费观看日韩欧美|