|
MFC中,各控件的類都是從窗口類CWnd派生出來的,所以控件是一窗口的一種;
[size=133%]Ø什么是對話框?
Ø對話框就是一個(gè)Dialog控件,和其他的控件不同的是,Dialog控件有自己的消息循環(huán)和Dialog回調(diào)處理程序。
Win32的應(yīng)用程序有一條很明確的主線: 1:進(jìn)入WinMain函數(shù)
2:設(shè)計(jì)窗口類、注冊窗口類
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對象與Windows的窗口不同,但是兩者有緊密聯(lián)系。CWnd對象是由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的窗口,但是不銷毀對象。
顯示窗口與更新窗口:ShowWindow(SW_SHOW);
UpdateWindow();
【UpdateWindow 將WM_PAINT消息直接發(fā)送給窗口過程處理函數(shù)進(jìn)行處理,對窗口進(jìn)行刷新;當(dāng)窗口從無到有、改變尺寸、最小化后再恢復(fù)、被其他窗口遮蓋后再顯示時(shí),窗口的客戶區(qū)都將變?yōu)闊o效,此時(shí)系統(tǒng)會給應(yīng)用程序發(fā)送WM_PAINT消息,我們也可以手動調(diào)用UpdateWindow函數(shù)(該函數(shù)會發(fā)送),我們呢也可以調(diào)用Invalidate(使整個(gè)窗口的客戶區(qū)或者窗口上的某個(gè)控件無效,具體的名字與參數(shù)因場合不同 可能有不同)】
【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ǔ)類庫中所有窗口類的基本功能。CWnd對象與Windows的窗口不同,但是兩者有緊密聯(lián)系。CWnd對象是由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的窗口,但是不銷毀對象。
CFrameWnd類:CFrameWnd類往往用于創(chuàng)建應(yīng)用程序的主窗口,因?yàn)樗芎芎玫刂С窒到y(tǒng)菜單和控制條(工具條、狀態(tài)條等),為此定義了大量的成員函數(shù)和變量。在編寫文檔/視圖結(jié)構(gòu)的應(yīng)用程序時(shí),CFrameWnd作為主窗口管理視圖和文檔對象。視圖對象和控制條都成為CFrameWnd的子窗口,它們分享客戶區(qū),其位置被CFrameWnd有效地排列。CFrameWnd直接支持單文檔界面(SDI),對于多文檔界面(MDI),使用其派生類CMDIFrameWnd和CMDIChildWnd。該類定義了兩個(gè)成員函數(shù)用于創(chuàng)建主窗口,即Create()和LoadFrame()。前者主要通過CWnd::CreateEx()創(chuàng)建窗口;而后者首先組織參數(shù),再調(diào)用前者。它們的定義如下:
|
|