在剛開始學完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程序的整個執行流程。