MFC 使用MFC建立視窗

2021-09-02 01:27:39 字數 2258 閱讀 1095

標頭檔案

/*

mfc是乙個封裝了windowsapi且物件導向的c++類庫,同時也是乙個應用程式的框架結構。另外,並非所有mfc提供的函式都是類的成員,mfc也以

全域性函式的形式,為使用者提供了各類字首為afx的函式,可供使用者在必要時隨時隨地進行呼叫。

由mfc建立的應用,我們不能夠直接看到其程式的入口。入口函式afxwinmain()被mfc深深的封裝在其框架之中,最後直接由編譯器編入應用程式。

因此,我們必須站在物件導向這個巨人的肩膀(高度)上,來分析、審視由mfc建立的windows應用。

由mfc建立的應用其巨集觀執行的大致流程為:

2、在入口函式中呼叫應用程式物件的initinstance()成員函式。

3、由initinstance()負責建立視窗、顯示視窗並向視窗傳送第乙個wm_paint訊息。

4、最後,由入口函式呼叫應用程式物件的成員函式run()啟動訊息迴圈,然後程式在訊息迴圈中不斷收取並響應(處理)屬於自己的訊息。

windows的c++程式設計師習慣把類的定義放在.h檔案中,把類的實現或程式的其它源**放在.cpp檔案中。我們這裡也遵從這個習慣。 */

#pragma once //在標頭檔案開始處加入這條雜注,可保證標頭檔案只被編譯一次。

//這裡的「afxwin.h」是用mfc建立視窗應用需要包含的標頭檔案。

#include //下面我們來討論應用程式物件與框架(頂層)視窗物件的類定義。

/* 上述的應用程式物件。

*/public:

virtual bool initinstance();

};//這裡的cmainwindow是從cframewnd繼承而來(cframewnd->cwnd->ccmdtarget->cobject),其實例代表應用程式框架(頂層)視窗物件。

class cmainwindow : public cframewnd ;

原始檔

/*

這裡是應用的原程式檔案hello.cpp。

下面我們來討論應用程式物件與框架(頂層)視窗物件的類的實現**(源程式)。 */

#include "hello.h"

/* 下面的程式首先在堆上建立乙個框架視窗物件,並將指標賦予成員變數m_pmainwnd。

然後按照m_ncmdshow方式顯示這個視窗,最後呼叫updatewindow()成員函式向視窗傳送乙個wm_paint訊息。這和用windowsapi建立視窗時的

情形基本相同。

值得注意的是,程式中從未見到用delete m_pmainwnd來顯式刪除這個動態建立的框架視窗物件的語句。實際上,視窗在被清除之前接收的

最後乙個訊息是wm_ncdestroy,在這個訊息處理程式cwind::onncdestroy()中,呼叫了乙個虛函式cwnd::postncdestroy(),而cframewnd正

好覆蓋了這個虛函式並在其中執行了delete this語句。顯然,這條語句的作用正是視窗在自己的程式中最終刪除了自己(堆上建立的視窗)。

*/ m_pmainwnd = new cmainwindow;

m_pmainwnd->showwindow(m_ncmdshow);

m_pmainwnd->updatewindow();

return true;

}//這是cmainwindow的建構函式的實現**,其中覆蓋了父類的虛函式create()來實際建立具體的視窗。

cmainwindow::cmainwindow()

//下面就是wm_paint訊息處理程式的實現**。

void cmainwindow::onpaint()

/* 最後來看實現訊息對映的巨集。

在begin_message_map()與end_message_map()之間的每一條巨集定義都代表乙個訊息對映。

*/begin_message_map(cmainwindow, cframewnd)

on_wm_paint() //這個巨集實現了wm_paint訊息與處理程式onpaint()的對映。

end_message_map()

/* 下面是在程式編譯前的兩個編譯選項的設定,先在這裡熟悉一下。

在專案上,右鍵->屬性->配置屬性->常規—>專案預設值—>mfc的使用—>選擇「在靜態庫中使用mfc」就好了,這是呼叫靜態庫的時候。

如果呼叫dll,就要選擇「在共享dll中使用mfc」。

2、入口點的定義:

我們現在就來啟動vs2017的ide,來編譯和執行我們的視窗應用。

*/

MFC學習筆記 MFC建立視窗

mfc 微軟基礎類庫 microsoft foundation classes 微軟公司提供的類庫,以 c 形式封裝了windows api,並且包含了乙個應用程式框架,減少開發工作量。mfc需要包含標頭檔案 include原始檔是.cpp 配置 程式開始時,先例項化應用程式類物件 執行程式的入口函...

MFC視窗建立過程

本文針對單文件模式的mfc程式進行分析。一步步說明,如何建立視窗並顯示。首先我們建立乙個單文件的mfc程式 test。csingledoctemplate pdoctemplate pdoctemplate new csingledoctemplate idr mainframe,runtime c...

MFC視窗的建立

新建乙個空的win32 project 我的編譯器版本vs2013 在新增項中選擇空專案 工程建立完成後,在標頭檔案與原始檔的資料夾中分別新增乙個乙個.h檔案與.cpp檔案起名為mfc.h與mfc.cpp 自擬 在標頭檔案中分別建立應用程式類與視窗架構類,如下 include mfc標頭檔案 cla...