|
MFC中,各控件的類都是從窗口類CWnd派生出來(lái)的,所以控件是一窗口的一種;
[size=133%]Ø什么是對(duì)話框?
Ø對(duì)話框就是一個(gè)Dialog控件,和其他的控件不同的是,Dialog控件有自己的消息循環(huán)和Dialog回調(diào)處理程序。
Win32的應(yīng)用程序有一條很明確的主線: 1:進(jìn)入WinMain函數(shù)
2:設(shè)計(jì)窗口類、注冊(cè)窗口類
3:產(chǎn)生窗口、顯示窗口、更新窗口
4:進(jìn)入消息循環(huán),將消息路由到窗口過程函數(shù)(xxxProc)中去處理;
在消息處理函數(shù)中,根據(jù)消息的類型與各控件的屬性,點(diǎn)綴整個(gè)窗口;
在MFC程序設(shè)計(jì)中,為了設(shè)計(jì)的方便,在MFC的“底層框架類”中封裝了每一個(gè)窗口應(yīng)用程序都需要的各步驟;
窗口的創(chuàng)建: CWnd類的CreateEx函數(shù)實(shí)現(xiàn)【CFrameWnd類的Create函數(shù) 調(diào)用 CreateEx函數(shù); CFrameWnd類的LoadFrame函數(shù)調(diào)用Create函數(shù)】,CWnd類派生出CFrameWnd類。
Wnd對(duì)象與Windows的窗口不同,但是兩者有緊密聯(lián)系。CWnd對(duì)象是由CWnd的構(gòu)造函數(shù)和析構(gòu)函數(shù)創(chuàng)建或銷毀的。另一方面,Windows的窗口是Windows的一種內(nèi)部數(shù)據(jù)結(jié)構(gòu),它是由CWnd的Create成員函數(shù)創(chuàng)建的,而由CWnd的虛擬析構(gòu)函數(shù)銷毀。DestroyWindow函數(shù)銷毀Windows的窗口,但是不銷毀對(duì)象。
顯示窗口與更新窗口:ShowWindow(SW_SHOW);
UpdateWindow();
【UpdateWindow 將WM_PAINT消息直接發(fā)送給窗口過程處理函數(shù)進(jìn)行處理,對(duì)窗口進(jìn)行刷新;當(dāng)窗口從無(wú)到有、改變尺寸、最小化后再恢復(fù)、被其他窗口遮蓋后再顯示時(shí),窗口的客戶區(qū)都將變?yōu)闊o(wú)效,此時(shí)系統(tǒng)會(huì)給應(yīng)用程序發(fā)送WM_PAINT消息,我們也可以手動(dòng)調(diào)用UpdateWindow函數(shù)(該函數(shù)會(huì)發(fā)送),我們呢也可以調(diào)用Invalidate(使整個(gè)窗口的客戶區(qū)或者窗口上的某個(gè)控件無(wú)效,具體的名字與參數(shù)因場(chǎng)合不同 可能有不同)】
【CFrameWnd類派生于CWnd類】
【各控件類CEdit、CBotton等都是派生于CWnd,所以控件其實(shí)也是窗口,所以他們其實(shí)也是通過Create函數(shù)創(chuàng)建,創(chuàng)建的過程是類似的】
消息循環(huán):CWinThread類的Run函數(shù)就是完成消息循環(huán)這一任務(wù);該函數(shù)的主要結(jié)構(gòu)是一個(gè)for循環(huán),該循環(huán)在接收到一個(gè)WM_QUIT消息時(shí)退出。
窗口過程函數(shù):
CWnd類:CWnd是MFC窗口類的基類,提供了微軟基礎(chǔ)類庫(kù)中所有窗口類的基本功能。CWnd對(duì)象與Windows的窗口不同,但是兩者有緊密聯(lián)系。CWnd對(duì)象是由CWnd的構(gòu)造函數(shù)和析構(gòu)函數(shù)創(chuàng)建或銷毀的。另一方面,Windows的窗口是Windows的一種內(nèi)部數(shù)據(jù)結(jié)構(gòu),它是由CWnd的Create成員函數(shù)創(chuàng)建的,而由CWnd的虛擬析構(gòu)函數(shù)銷毀。DestroyWindow函數(shù)銷毀Windows的窗口,但是不銷毀對(duì)象。
CFrameWnd類:CFrameWnd類往往用于創(chuàng)建應(yīng)用程序的主窗口,因?yàn)樗芎芎玫刂С窒到y(tǒng)菜單和控制條(工具條、狀態(tài)條等),為此定義了大量的成員函數(shù)和變量。在編寫文檔/視圖結(jié)構(gòu)的應(yīng)用程序時(shí),CFrameWnd作為主窗口管理視圖和文檔對(duì)象。視圖對(duì)象和控制條都成為CFrameWnd的子窗口,它們分享客戶區(qū),其位置被CFrameWnd有效地排列。CFrameWnd直接支持單文檔界面(SDI),對(duì)于多文檔界面(MDI),使用其派生類CMDIFrameWnd和CMDIChildWnd。該類定義了兩個(gè)成員函數(shù)用于創(chuàng)建主窗口,即Create()和LoadFrame()。前者主要通過CWnd::CreateEx()創(chuàng)建窗口;而后者首先組織參數(shù),再調(diào)用前者。它們的定義如下:
|
|