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