VC 學習(3) MFC框架程式剖析

2021-09-06 04:04:43 字數 2246 閱讀 3487

1、課程內容:

2. 視窗類,視窗物件與視窗關係

視窗類中定義乙個型別為

hwnd

成員變數

,用來儲存與之相關的視窗控制代碼值

,可以用乙個視窗類的例項即視窗物件來對應乙個建立的視窗

(是一種資源

),視窗物件與視窗之間的關係是:

c++視窗類物件與視窗並不是一回事

,它們之間唯一的關係是

c++視窗類物件內部定義了乙個視窗控制代碼變數

,儲存了與這個

c++視窗類物件相關的那個視窗的控制代碼

.視窗銷毀時

,與之對應的

c++視窗類物件銷毀與否

,要看其生命週期是否結束,但

c++視窗類物件銷毀時

,與之相關的視窗將銷毀

,因為它們之間的紐帶

(m_hwnd)

已經斷了

,因此這時要**視窗資源.

視窗銷毀時呼叫

destroywindow函式,

視窗類物件銷毀即將

m_hwnd

變數設定為

null.

3.mfc流程介紹:winmain->建立視窗類->註冊視窗類->建立視窗->顯示視窗->訊息迴圈

以專案為例,我的專案名稱為mfc02;在vs的安裝目錄下可以查詢mfc核心函式的定義,如我的mfc目錄為

d:\program files\visualsdudio\vc\atlmfc\src\mfc\ b、

c、註冊視窗類:

對於單文件來說,要涉及文件管理,在這個initinstance方法中完成視窗類的註冊:

afxenddeferregisterclass 判斷是否註冊過視窗類,mfc已經定義好了視窗類,所以只需要註冊就可以啦;

afxregisterclass 註冊視窗類;

d、建立視窗:cmainframe是cframewnd的子類,呼叫基類的precreatewindow函式完成視窗類的註冊(一般情況),單文件應用程式除外(見c說明)

cframewnd的create函式建立視窗,它會呼叫cwnd的createex函式;

e、顯示和更新視窗:

cmainframe的指標可以呼叫showwindow和updatewindow函式;

f、訊息迴圈:cwinthread::run

pthread->run實現訊息迴圈;

g、訊息處理函式:訊息對映機制;

2.mfc大致流程:

winmain()

afxwinmain();//呼叫下面的函式

afxwinmain()

pthread->initinstance();           //初始化工作和註冊視窗類,視窗顯示和更新,因為

pthread->run();                     //訊息迴圈

csingledoctemplate* pdoctemplate;

pdoctemplate = new csingledoctemplate(

idr_mainframe,

runtime_class(cmfc02doc),

runtime_class(cmainframe),       // main sdi frame window

runtime_class(cmfc02view));

adddoctemplate(pdoctemplate);

完成了將這三個類關聯起來的工作。

3.如何在單文件檔案中顯示乙個cbutton的物件?

在cmainframe::oncreate()中定義乙個cbutton的物件btn;

然後呼叫btn.create("維新",ws_disabled   |ws_child | ws_visible | bs_auto3state, crect(0,0,300,100),/*getparent(),*/this,123);

注意點:

(1).此處btn不能是區域性變數,否則它的生命週期太短,將不能顯示。

(2).在cbutton類的create函式的第二個引數中加入ws_visible 引數才行。否則必須呼叫showwindow也可以在view的oncreate訊息響應函式中加入

(3).cbutton類的定義標頭檔案在afxwin.h中,而stdafx.h包含了afxwin.h,所以可以直接使用。因為mfc中的每乙個類中都有#include "stdafx.h"的宣告。

MFC框架程式剖析 3

我們來看下我們建立的視窗 視視窗對應的是ctestview類,而主框架視窗對應的就是cmainframe類,而cmainframe和ctestview都有共同乙個基類cwnd,它封裝了與視窗相關的操作。此外,還有個ctestdoc類,不過它並不是乙個視窗類,而是乙個文件類。最後,caboutdlg類...

MFC框架程式剖析

1 mfc microsoftfoundation class,微軟基礎類庫 是微軟為了簡化程式設計師的開發工作所開發的一套c 類的集合,是一套物件導向的函式庫,以類的方式提供給使用者使用 二 基於mfc的程式框架剖析 1 mfc程式的classview標籤頁 圖 2 繼承關係 1 cmainfra...

MFC框架程式剖析

mfc程式的執行過程 4 進入訊息迴圈。雖然也設定了預設的視窗過程函式,但是mfc應用程式實際上是採用訊息對映機制來處理各種訊息的。當收到wm quit訊息時,退出訊息迴圈,程式結束。面已經知道,在乙個windows程式中,winmain函式作為程式的入口函式,乙個程式的是 設計視窗 給視窗設定相應...