mfc學習筆記之如何自己動手實現最簡單的mfc程序

    在剛開始學完c++基本語法之後,發現要用c++寫一個窗口應用程序必須與操作系統結合起來,於是自然而然的選擇了從mfc入手,但是通過新建的mfc程序發現太過於臃腫,不知道如何下手,因此從網上查閱資料發現可以自己動手使用mfc庫實現一個最簡單的mfc程序。

  1. 由於mfc只是對win32API進行了大量的封裝,因此可以通過修改win32項目來創建mfc工程


2. 工程名起名爲FirstMFC,然後下一步選擇windows應用程序,然後點擊完成

3. 創建完成後發現主cpp文件已經爲我們自動生成了win32創建窗口的代碼,因爲要用mfc實現,所以只需保留頭文件,刪掉其餘的代碼

FirstMFC.cpp內只剩下如下代碼

// FirstMFC.cpp : 定義應用程序的入口點。
//

#include "stdafx.h"
#include "FirstMFC.h"

4.由於我們要使用MFC庫,因此需要在stdafx頭文件裏包含afxwin.h  而afxwin.h內已經包含windows.h,因此可以直接將stdafx.h內的#include <windows.h>替換成<afxwin.h>。

5. 右鍵點擊工程名,選擇屬性,在彈出對話框中MFC使用這一項選擇在靜態庫中使用MFC,然後選擇應用確定。

6. 因爲mfc程序需要至少包含一個應用程序類和窗口框架類,因此我們需要在FirstMFC.cpp定義一個CFrameWnd和CWinApp的子類,併爲CWinApp的子類創建一個全局的實

    例化對象,並在CwinApp的子類中重載InitInstance函數創建窗口,代碼如下:

class CMyFrameWnd : public CFrameWnd
{

};

class CMyWinApp : public CWinApp
{
	virtual BOOL InitInstance();
};

CMyWinApp myApp;


InitInstance函數中創建窗口代碼如下<pre name="code" class="cpp">BOOL CMyWinApp::InitInstance()
{
	CMyFrameWnd * pFrame = new CMyFrameWnd();
	pFrame->Create(NULL,"FirstMFC");
	m_pMainWnd = pFrame;
	pFrame->ShowWindow(SW_SHOW);
	pFrame->UpdateWindow();
	return TRUE;
}
從代碼可以看出,InitInstance主要完成的工作就是窗口的創建過程,查閱csdn可以發現

CFrameWnd::Create

BOOL Create( LPCTSTR lpszClassName,

LPCTSTR lpszWindowName,

DWORD dwStyle = WS_OVERLAPPEDWINDOW,

const RECT& rect = rectDefault,

CWnd* pParentWnd = NULL,

LPCTSTR lpszMenuName = NULL,

DWORD dwExStyle = 0,

CCreateContext* pContext = NULL );

create函數的第一個參數爲類名,可以置空,在創建的過程中mfc會自己重新爲它賦值,第二個參數爲要創建的窗口的名稱,後面的參數固定參數,無須賦值







至此,第一個MFC程序創建完畢,只定義了兩個類,重寫了一個類成員函數,不像新建一個MFC工程那樣生成一大堆的冗餘代碼,便於我們分析mfc程序的整個執行流程。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章