[MFC]MFC程式結構(一)

來源:互聯網
上載者:User
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的程式執行流程和架構。

網上系列教程

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.