MFC類庫相關的標頭檔
- stdafx.h:不是類庫的標頭檔,可以稱為項目的標頭檔,在其中包含了一些MFC標準標頭檔(如:windows.h,afxwin.h),預先編譯,以後該工程編譯時間,不再編譯這部分標頭檔,僅僅使用先行編譯的結果(產生projectname.pch)。這樣可以加快編譯速度,節省時間。
- Afxwin.h:MFC核心組件和標準組件
- Afxext.h:MFC擴充
- Afxcmn.h:MFC對Windows 公用控制項的支援
- Afxdisp.h:MFC自動化類
- Afxdtctl.h:MFC對Internet Explorer 4 公用控制項的支援
MFC相關類的說明
對象類CObject |
MFC類庫中絕大部分類的父類。提供了MFC類庫的一些基本的機制。包括對運行時類資訊,動態建立和序列化的支援 |
應用程式類CWinApp |
封裝應用程式,線程等資訊。是應用程式開始建立的第一個對象(theApp),並且是結束前最後一個執行的對象。啟動時,應用程式類負責建立程式的其它對象,在InitInstance()函數中完成。 |
文件範本類 CDocTemplate |
兩個子類CSingleDocTemplate和CMultiDocTemplate。 |
文檔類CDocument |
封裝資料的管理 |
架構視窗類別 Frame Windows |
封裝了視窗程序組成的各種架構 |
對話方塊類Dialog Boxes |
封裝了各種對話方塊,通用對話方塊等 |
視圖類Views |
封裝了各種顯示視窗 |
控制項類Controls |
封裝了各種常用的控制項 |
異常類 Exceptions |
封裝了MFC各種常見的異常 |
檔案類File Service |
封裝了各種檔案的I/O操作 |
繪圖類 CDC/CGdiObject |
封裝了繪圖DC/API/繪圖對象 |
資料支援 ODBC/DAO |
|
資料集合類 CArray/CList/CMap |
|
以上都是CObject的子類 非CObject類的子類 |
提供了各種資料結構相關的管理 |
MFC應用程式類型
應用程式 |
對話方塊程式 ① CWinApp-應用程式類 ② CDialog-對話方塊視窗類別 註:①和②匯出的項目是相同的 單文檔視圖程式 ① CWinApp-應用程式類 ② CFrameWnd-架構視窗類別 ③ CView-視圖視窗類別 ④ CDocument-文檔類 多文檔視圖程式 ① CWinApp-應用程式類 ② CMDIFrameWnd-多文檔主架構視窗類別 ③ CMDIChildWnd-多文檔子架構視窗類別 ④ CView-視圖視窗類別 ⑤ CDocument-文檔類 |
MFC庫程式 |
支援MFC的靜態庫 MFC的動態庫 ① 靜態連結MFC庫 ② 動態連結MFC庫 ③ MFC擴充庫 |
支援MFC的控制台程式 |
官網有詳細介紹
MFC程式啟動過程
1.0 程式啟動,CXXApp中的全域變數定義:CXXApp theApp,調用CWinApp()建構函式(將theApp對象的地址分別儲存到線程狀態資訊和模組狀態資訊中);調用CXXApp()建構函式
1.1 進入WinMain函數,調用AfxWinMain(_tWinMain為宏,值為WinMain)
1.2 AfxWinMain函數的執行
1.2.1 擷取theApp對象的地址
1.2.2 調用AfxWinInit,初始化MFC庫
1.2.3 調用InitApplication,初始化應用程式資料
1.2.4 調用InitInstance,在函數中建立並顯示視窗
1.2.5 調用Run進行訊息迴圈處理
1.2.6 結束MFC庫,退出程式
涉及到MFC函數的源檔案位置根目錄
- CWinApp建構函式: MFC=>SRC=>APPCORE.CPP
- AfxWinMain:MFC=>SRC=>WINMAIN.CPP
- AfxEndDeferRegisterClass: MFC=>SRC=>APPCORE.CPP
- CFrameWnd::PreCreateWindow()函數所在檔案:MFC=>SRC=>WINFRM.CPP
- CFrameWnd::Create()函數路徑:MFC=>SRC=>WINFRM.CPP
- CWnd::CreateEx()函數路徑:MFC=>SRC=>WINCORE.CPP
- CWinThread::Run()方法路徑:MFC=>SRC=>THRDCORE.CPP
執行個體:對話方塊類應用程式
1.建立項目MFCTest-->MFC應用程式-->下一步-->選擇基於對話方塊-->下一步-->下一步-->-下一步->CMFCTestDlg-->完成。
2.做成:
3.在介面中,右擊某一控制項,添加變數
其會自動產生如下代碼
CDlogMFCADlg::CDlogMFCADlg(CWnd* pParent /*=NULL*/): CDialogEx(CDlogMFCADlg::IDD, pParent) , m_nX(0)//當在介面給控制項添加關聯變數時,會自動添加, m_nY(0), m_nAnser(0){m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);}void CDlogMFCADlg::DoDataExchange(CDataExchange* pDX){CDialogEx::DoDataExchange(pDX); //與上面是一起的,當在介面給控制項添加關聯變數時,會自動添加DDX_Text(pDX, IDC_EDIT_X, m_nX); DDX_Text(pDX, IDC_EDIT_Y, m_nY);DDX_Text(pDX, IDC_EDIT_ANSSER, m_nAnser);}BEGIN_MESSAGE_MAP(CDlogMFCADlg, CDialogEx)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTON_ADD, &CDlogMFCADlg::OnBnClickedButtonAdd)//當雙擊介面按鈕時,會自動添加ON_BN_CLICKED(IDC_BUTTON_MINUS, &CDlogMFCADlg::OnBnClickedButtonMinus)ON_BN_CLICKED(IDC_BUTTON_OK, &CDlogMFCADlg::OnBnClickedButtonOk)END_MESSAGE_MAP()
4.雙擊控制項,添加邏輯處理
void CDlogMFCADlg::OnBnClickedButtonAdd(){UpdateData(TRUE);m_nAnser=m_nX+m_nY;UpdateData(FALSE);}void CDlogMFCADlg::OnBnClickedButtonMinus(){ UpdateData(TRUE);m_nAnser=m_nX-m_nY;UpdateData(FALSE);}void CDlogMFCADlg::OnBnClickedButtonOk(){ CDialogEx::OnOK();}
5.其結果會有
其實,我們做的工作並不多,大部分流程都是系統架構給做了,這樣有主要把精力放在實際的商務邏輯上。不過要熟悉其MFC的程式執行流程和架構。
網上系列教程