文章目錄
- 一、概述
- 二、MFC 的主要組件
- 三、創建一個MFC窗口
- 四、控件綁定消息函數
一、概述
MFC 是微軟提供的一個 C++ 類庫,用于簡化 Windows 應用程序的開發。它封裝了 Windows API,提供面向對象的接口,幫助開發者更高效地創建圖形用戶界面(GUI)應用程序。MFC 自 1992 年隨 Microsoft C/C++ 7.0 發布以來,成為 Windows 開發的重要工具。
MFC 的核心作用:
- 封裝 Windows API:MFC 將復雜的 Windows API 封裝為易于使用的 C++ 類,簡化了窗口管理、消息處理等任務。
- 提供應用程序框架:MFC 提供了應用程序框架(如 CWinApp、CFrameWnd),幫助開發者快速搭建應用程序的基本結構。
- 支持圖形用戶界面(GUI)開發:MFC 提供豐富的控件類(如按鈕、列表框、對話框),簡化 GUI 開發。
支持文檔/視圖架構:MFC 的文檔/視圖架構將數據管理與用戶界面分離,便于維護和擴展。
集成開發環境(IDE)支持:MFC 與 Visual Studio 深度集成,提供代碼生成和調試工具,提升開發效率。
兼容性與擴展性:MFC 支持多種 Windows 版本,允許開發者擴展功能或直接調用 Windows API。
二、MFC 的主要組件
- 應用程序類(CWinApp):管理應用程序的生命周期和主消息循環。
- 窗口類(CFrameWnd、CDialog):用于創建和管理主窗口及對話框。
- 文檔/視圖類(CDocument、CView):實現文檔/視圖架構,分離數據與界面。
- 控件類(CButton、CListBox 等):封裝常用控件,簡化 GUI 開發。
- 集合類(CArray、CList 等):提供數據存儲和管理功能
- 文件與數據庫支持:提供文件操作和數據庫訪問類(如 CFile、CDatabase)。
三、創建一個MFC窗口
應用程序類型選擇“基于對話框”:
高級功能中區別取消勾選:
可以更改繼承的基類,也可以更改類名稱。
默認會生成一個帶有兩個按鈕和一個提示文本框的MFC窗口:
雙擊按鈕后可以直接轉到點擊按鈕后執行的事件函數:
void CMFCApplicationDlg::OnBnClickedOk()
{// TODO: 在此添加控件通知處理程序代碼MessageBox(_T("您好"));CDialogEx::OnOK();
}
點擊“確定按鈕”后的結果顯示:
四、控件綁定消息函數
我們可以重新創建控件。如下所示:
每一個控件都有一個控件ID,我們可以通過指定的控件ID進行一些操作,比如按鈕Button1的ID為“IDC_BUTTON1”
雙擊按鈕可以為按鈕生成一個響應函數,當我們點擊按鈕就會觸發這個函數。
函數聲明:
public:afx_msg void OnBnClickedButton1();afx_msg void OnBnClickedButton2();
函數定義:
void CMFCApplicationDlg::OnBnClickedButton1()
{// TODO: 在此添加控件通知處理程序代碼MessageBox(_T("您好"));
}void CMFCApplicationDlg::OnBnClickedButton2()
{// TODO: 在此添加控件通知處理程序代碼MessageBox(_T("大家好"));
}
消息映射表中已經通過按鈕的控件ID將點擊事件與上述函數進行了綁定:
BEGIN_MESSAGE_MAP(CMFCApplicationDlg, CDialogEx)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTON1, &CMFCApplicationDlg::OnBnClickedButton1)ON_BN_CLICKED(IDC_BUTTON2, &CMFCApplicationDlg::OnBnClickedButton2)
END_MESSAGE_MAP()
也可以通過類向導將控件與消息函數進行綁定:
點擊確定后消息映射表中會生成一個與Button3關聯的消息:
BEGIN_MESSAGE_MAP(CMFCApplicationDlg, CDialogEx)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTON1, &CMFCApplicationDlg::OnBnClickedButton1)ON_BN_CLICKED(IDC_BUTTON2, &CMFCApplicationDlg::OnBnClickedButton2)ON_BN_CLICKED(IDC_BUTTON3, &CMFCApplicationDlg::OnClickedButton3)
END_MESSAGE_MAP()