MFC開發:如何創建第一個MFC應用程序

文章目錄

    • 一、概述
    • 二、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()

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/71733.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/71733.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/71733.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Git版本控制器】第四彈——分支管理,合并沖突,--no-ff,git stash

🎁個人主頁:我們的五年 🔍系列專欄:Linux網絡編程 🌷追光的人,終會萬丈光芒 🎉歡迎大家點贊👍評論📝收藏?文章 ? 相關筆記: https://blog.csdn.net/djd…

AI助力小微企業技術開發規范化管理 | 雜談

AI助力小微企業技術開發規范化管理 在小型技術研發企業中,人員配置緊張,往往一名員工需要承擔多項職務和任務。例如,后端程序開發人員可能同時要負責需求調研、數據庫設計、后端設計及開發,甚至在某些情況下還需兼任架構師的角色。…

SpringBoot+Vue+微信小程序的貓咖小程序平臺(程序+論文+講解+安裝+調試+售后)

感興趣的可以先收藏起來,還有大家在畢設選題,項目以及論文編寫等相關問題都可以給我留言咨詢,我會一一回復,希望幫助更多的人。 系統介紹 在當下這個高速發展的時代,網絡科技正以令人驚嘆的速度不斷迭代更新。從 5G …

DeepSeek提效實操革命,全場景應用指南 AI提示詞萬能公式四步法以及對話技巧

歡迎來到濤濤聊AI DeepSeek系列文章 三塊顯示器如何擺放效率最高,讓deepseek給深度思考下 阿里云免費試用 DeepSeek大模型。 限時送 100 萬 tokens,快來搶先免費體驗!AI 助手不再出現系統繁忙阿里云免費試用 DeepSeek大模型。 限時送 100 萬 …

智慧教室與無紙化同屏技術方案探討與實現探究

引言 隨著教育信息化的不斷發展,智慧教室和無紙化同屏技術逐漸成為提升教學效率和質量的重要手段。大牛直播SDK憑借其強大的音視頻處理能力和豐富的功能特性,在智慧教室和無紙化同屏領域積累了眾多成功案例。本文將深入探討基于大牛直播SDK的智慧教室、…

Linux MySQL 8.0.29 忽略表名大小寫配置

Linux MySQL 8.0.29 忽略表名大小寫配置 問題背景解決方案遇到的問題: 問題背景 突然發現有個大寫的表報不存在。 在Windows上,MySQL是默認支持忽略大小寫的。 這個時候你要查詢一下是不是沒有配置: SHOW VARIABLES LIKE lower_case_table…

【藍橋杯單片機】第十三屆省賽第二場

一、真題 二、模塊構建 1.編寫初始化函數(init.c) void Cls_Peripheral(void); 關閉led led對應的鎖存器由Y4C控制關閉蜂鳴器和繼電器 2.編寫LED函數(led.c) void Led_Disp(unsigned char ucLed); 將ucLed取反的值賦給P0 開啟鎖存器 關閉鎖存…

【CMake 教程】常用函數與構建案例解析(三)

一、CMake 常用函數簡析 1. 條件判斷 if() / elseif() / else() 在 CMake 腳本中,條件判斷是控制邏輯的重要工具。if() 支持多種比較語句,包括數值、字符串、布爾值和變量存在性等。在條件滿足時執行特定邏輯代碼,下面是典型語法&#xff1…

ASP.NET Core 8.0學習筆記(二十七)——數據遷移:Migrations深入與其他遷移命令

一、數據庫架構的管理 1.EF Core提供兩種方式來保持EF Core的模型與數據庫保持同步。 (1)以數據庫為準:反向工程(Db First),適用于中大型工程 (2)以代碼為準:數據遷移(Code First),…

Python 基本語法的詳細解釋

目錄 (1)注釋 (2)縮進 (3)變量和數據類型 變量定義 數據類型 (4)輸入和輸出 輸出:print() 函數 輸入:input() 函數 (1)注釋 注…

20-R 繪圖 - 餅圖

R 繪圖 - 餅圖 R 語言提供來大量的庫來實現繪圖功能。 餅圖,或稱餅狀圖,是一個劃分為幾個扇形的圓形統計圖表,用于描述量、頻率或百分比之間的相對關系。 R 語言使用 pie() 函數來實現餅圖,語法格式如下: pie(x, l…

Ubuntu 22.04 一鍵部署MinerU1.1.0

MinerU MinerU是一款將PDF轉化為機器可讀格式的工具(如markdown、json),可以很方便地抽取為任意格式。 MinerU誕生于書生-浦語的預訓練過程中,我們將會集中精力解決科技文獻中的符號轉化問題,希望在大模型時代為科技發…

紫光同創開發板使用教程(二):sbit文件下載

sbit文件相當于zynq里面的bit文件,紫光的fpga工程編譯完成后會自動生成sbit文件,因工程編譯比較簡單,這里不在講解工程編譯,所以我這里直接下載sbit文件。 1.工程編譯完成后,可以看到Flow列表里面沒有報錯&#xff0c…

DeepSeek 部署全指南:常見問題解析與最新技術實踐

引言 隨著開源大模型DeepSeek的爆火,其部署需求激增,但用戶在實際操作中常面臨服務器壓力、本地部署性能瓶頸、API配置復雜等問題。本文結合2025年最新技術動態,系統梳理DeepSeek部署的核心問題與解決方案,并分享行業實踐案例&am…

Vue02

Vue02 綁定class樣式 字符串寫法,適用于:樣式的類名不確定,需要動態指定 數組寫法,適用于:要綁定的樣式個數不確定,名字也不確定 對象寫法,適用于:要綁定的樣式個數缺點&#xff…

超導量子計算機的最新進展:走向實用化的量子革命

超導量子計算機的最新進展:走向實用化的量子革命 大家好,我是 Echo_Wish,今天我們來聊聊科技圈最炙手可熱的話題之一——超導量子計算機。近年來,量子計算領域可謂是風起云涌,而超導量子計算機作為主流路線之一,已經在學術界和工業界取得了不少突破性進展。 那么,超導…

LangChain構建行業知識庫實踐:從架構設計到生產部署全指南

文章目錄 引言:行業知識庫的進化挑戰一、系統架構設計1.1 核心組件拓撲1.2 模塊化設計原則二、關鍵技術實現2.1 文檔預處理流水線2.2 混合檢索增強三、領域適配優化3.1 醫學知識圖譜融合3.2 檢索結果重排序算法四、生產環境部署4.1 性能優化方案4.2 安全防護體系五、評估與調優…

Node.js中如何修改全局變量的幾種方式

Node.js中如何修改全局變量。我需要先理解他們的需求。可能他們是在開發過程中遇到了需要跨模塊共享數據的情況,或者想要配置一些全局可訪問的設置。不過,使用全局變量可能存在一些問題,比如命名沖突、難以維護和測試困難,所以我得…

【Node.js】express框架

目錄 1初識express框架 2 初步使用 2.1 安裝 2.2 創建基本的Web服務器 2.3 監聽方法 2.3.1 監聽get請求 2.3.2 監聽post請求 2.4 響應客戶端 2.5 獲取url中的參數(get) 2.5.1 獲取查詢參數 2.5.2 獲取動態參數 2.6 托管靜態資源 2.6.1 掛載路徑前綴 2.6.2 托管多…

Vulhub靶機 Apache Druid(CVE-2021-25646)(滲透測試詳解)

一、開啟vulhub環境 docker-compose up -d 啟動 docker ps 查看開放的端口 1、漏洞范圍 在Druid0.20.0及更低版本中 二、訪問靶機IP 8888端口 1、點擊Load data進入新界面后,再點擊local disk按鈕。 2、進入新界面后,在標紅框的Base directory欄寫上…