日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

MFC窗口類函數(shù)的概括

 9loong 2010-12-26
 

SDK寫程序時(shí),main()的地位被WinMain()取代了.

類CWinApp表示應(yīng)用程序本身.

類關(guān)系結(jié)構(gòu)圖

CObject
   |--- CCmdTarget
   |--- CWinThread
   |--- CWinApp
  
          CObject
                |--- CCmdTarget
              |--- CWnd
                |--- CFrameWnd

一、virtual BOOL CWinApp::initlnstance();
聲明Initstance(),就是自己寫一段InitInstance()來重載CWinApp提供的那段程序.

二、主窗口通常是CFrameWnd或者其派生類,先設(shè)置從CFrameWnd派生的新類MyFrameWindow.
生成主窗口對(duì)象后,必須將它賦給CWinApp的成員變量:m_pMainWnd再調(diào)用CFrameWnd::Create()創(chuàng)建主窗口.
在程序中創(chuàng)建一個(gè)MFC對(duì)象并不等于要求Windows系統(tǒng)創(chuàng)建一個(gè)接口對(duì)象,必須等到調(diào)用Create()后,
MFC才要求Windows系統(tǒng)創(chuàng)建相對(duì)的接口對(duì)象.
所以Create()的第一個(gè)參數(shù)是NULL,第二個(gè)參數(shù)是將該窗口的標(biāo)題文字設(shè)置為"Hello".

三、調(diào)用CWnd::ShowWindow()要求Windows將這個(gè)顯示在屏幕上.

四、類MyFrameWindow重載了CFranmeWnd的成員函數(shù)OnPaint(),

當(dāng)被遮蓋的部分再次顯示在屏幕上時(shí),系統(tǒng)會(huì)給該窗口發(fā)出WM_PAINT消息,
告訴此窗口:工作區(qū)哪些部分需要重繪.
處理消息:寫一個(gè)消息映射表將消息交付給指定函數(shù)處理.
創(chuàng)建映射表的類中加上這條語句
DECLARE_MESSAGE_MAP()

在程序的其它部分聲明一個(gè)符合下列格式的表格:
BEGIN_MESSAGE_MAP(類名稱,父類的名稱)
......
END_MESSAGE_MAP()

要處理WM_PAINT在BEGIN與END之間加ON_WM_PAINT()
還要替換MyFrameWindow加上OnPaint()成員函數(shù)才行.

五、設(shè)置窗口的圖標(biāo).

設(shè)置圖標(biāo)的程序代碼集中于 ?App::InitInstance()中

★ HICON CWinApp::Loadicon(LPCTSTR lpszResourceName)const;
★ HICON CWinApp::Loadicon(UINT nIDResource)const;
圖標(biāo)的名稱(字符串)后者以id為參數(shù),要把這個(gè)圖標(biāo)賦給哪個(gè)窗口,
調(diào)用CWnd::SetIcon() 就可以了 。

★ HICON CWnd::Setlcon(HICON hIcon,BOOL bBigIcon)
第一個(gè)參數(shù)是要賦給該窗口的圖標(biāo)的句柄,第二參數(shù)圖標(biāo)是否為大圖標(biāo)16*16 FALSE,32*32設(shè)為TRUE.

載入光標(biāo)資源
★ HCURSOR CWinApp::LoadCursor(LPCTSTR lpszResourceName)const;
★ HCURSOQR CWinApp::LoadCursor(UINT nIDResource)const;

載入標(biāo)準(zhǔn)光標(biāo)資源
★ HCURSOR CWinApp::LoadStandardCursor(LPCTSTR lpszCursorName)const;

載入標(biāo)準(zhǔn)圖標(biāo)資源
★ HICON CWinApp::LoadStandardIcon(LPCTSTR lpszIconName)const;

六、設(shè)置窗口主菜單:

在創(chuàng)建窗口對(duì)象之前,MFC核心會(huì)先跳到虛函數(shù)
CWnd::PreCreateWindow()執(zhí)行,
參數(shù)寫在結(jié)構(gòu)CREATESTRUCT因此只要在CWnd::PreCreateWindows()中修改CREATESTRUCT的參數(shù),
LoadMenu()以便載入菜單資源.
HMENU LoadMenu(HINSTANCE hInstance,LPCTSTR lpMenuName);
第一個(gè)參數(shù)標(biāo)示應(yīng)用程序?qū)嵗浔?通常用NULL表示當(dāng)前這個(gè)應(yīng)用程序,
第二個(gè)圖標(biāo)資源的名字,不過是數(shù)字.常量表示資源,
因此要用MAKEINTRESOURCE()將常量轉(zhuǎn)換成它可接收的格式.
LPTSTR MAKEINTRESOURCE(WORD winteger);

七、關(guān)閉窗口及結(jié)束程序的執(zhí)行

成員函數(shù)MyFrameWindow::OnFileExit()必須負(fù)責(zé)結(jié)束應(yīng)用程序的執(zhí)行,
只要向它發(fā)送一個(gè)消息WM_CLOSE就可以了.
除了Windows操作系統(tǒng)可以發(fā)出消息外,還可以給窗口發(fā)送消息.
PostMessage()發(fā)送一個(gè)WM_CLOSE消息給窗口對(duì)象自己,它收到命令后,就會(huì)關(guān)閉.

(#)

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請遵守用戶 評(píng)論公約

    類似文章 更多