MFC简单应用介绍

在Windows平台的桌面开发下,不同的语言需要使用不同的技术来实现,比如:

C++:MFC、QT

C#:WinForm、WPF

本文选择先使用MFC,然后再学习QT来完成项目。

希望通过这次简单介绍,能够帮助大家对MFC有个简单的认识。

安装MFC组件



如果缺少某些组件就添加就行。

创建MFC项目

项目创建完了后可以查看自动生成的项目内容:

很多东西先不用管,需要使用的后面会讲到。

如果界面布局不一样,比如少了某些东西,可以在视图里寻找,然后添加。

可以直接运行:

其中TODO:在此放置对话框控件是一个Edit Control,可以右键删除;确定、取消按钮是一个Button。它们都是对话框控件,用于界面显示的,都在工具箱里面。

工具箱介绍

在菜单栏里的视图里可以找到工具箱:

工具箱里面的内容很多:

介绍2个最常用的:Button和Check Box.分别拖动默认的窗口上:

工具箱其它的对话框控件可以自己尝试。

属性介绍

属性窗口和工具箱窗口一样的地方打开,内容如下:

每个对话框控件都有属性,最常用的就是描述文字(外观变化)和ID(与函数和变量联系起来)。

添加Button控件事件

我们想点击按钮然后完成某些功能(执行一个函数),有三种实现方式:

  1. 方式一:纯手动添加(了解即可)

    Button控件修改属性,包括显示文字和ID(自动会在Resource文件define一个ID对应的数值):

    在MFCApplication2Dlg.h添加声明控件 的函数:

    在MFCApplication2Dlg.cpp添加控件函数实现

    在MFC程序中,不能用printf和cout这类输出(不是控制台程序),可以使用MessageBox相关的进行输出。

    在MFCApplication2Dlg.cpp添加控件ID和函数的绑定

  2. 方式二:控件右键添加事件处理程序

    这个用Check1来展示:

    这样编译器会自动在MFCApplication2Dlg.h添加函数声明,在MFCApplication2Dlg.cpp添加函数实现以及函数和ID的绑定:

    默认是public修饰,其中 afx_msg为消息标志,它向系统声明:有消息映射到函数实现体;而在map宏定义中,就有具体消息和此函数的映射定义(可以是自定义,也可以是系统自动完成的),afx_msg参考链接


    3. 方式三:双击控件

    直接双击控件就可以自动添加上面的三处代码,效果就不展示了。

绑定成员变量

我们有时候希望控件和成员变量相关联,有两种方式:手动和自动。只介绍自动,和添加控件事件是一样的。

编译器自动添加的内容如下:

手动实现就是自己敲这段代码。

单选框的状态读取和修改

对于单选框,我们需要根据是否勾选来决定后面的步骤。一共有三种方法实现:

  1. 方法一:

    a.使用以下函数读取单选框的状态:

    cpp 复制代码
    UINT IsDlgButtonChecked(int nIDButton) const;

    其中UINT是unsigned int,nIDButton是ID,const是常函数的意思。

    整体实现:

    cpp 复制代码
    void CMFCApplication2Dlg::OnBnClickedCheck1()
    {
    	UINT state = IsDlgButtonChecked(IDC_CHECK1);
    	if (state) {
    		MessageBox(CString("已勾选"));
    	}
    	else {
    		MessageBox(CString("未勾选"));
    	}
    
    }

    b.使用以下函数修改单选框的状态

    cpp 复制代码
    void CheckDlgButton(int nIDButton, UINT nCheck);

    实现代码:

    cpp 复制代码
    CheckDlgButton(IDC_CHECK1, true);
  2. 方法二:

    a.使用以下函数返回控件的CWnd指针。

    cpp 复制代码
    CWnd* GetDlgItem(int nID) const;

    CButton类继承于CWnd,一切显示的窗口都继承于CWnd类。

    实现代码:

    cpp 复制代码
    CButton* button =(CButton*)GetDlgItem(IDC_CHECK1);
    if (button->GetCheck()) {
    	MessageBox(CString("已勾选"));
    } else{
    	MessageBox(CString("未勾选"));
    }

    b.使用以下函数修改单选框的状态

    cpp 复制代码
    button->GetCheck(true);
  3. 方法三

    使用成员变量和ID绑定在一起,然后操作这个成员变量(等价于操作这个控件对象):

    cpp 复制代码
    void CMFCApplication2Dlg::OnBnClickedCheck2()
    {
    	// TODO: 在此添加控件通知处理程序代码
    	if (m_check2.GetCheck()) {
    		MessageBox(CString("已勾选"));
    	}
    	else {
    		MessageBox(CString("未勾选"));
    	}
    }

总结

对于工具箱中其他的控件以及属性可以自行研究,希望以上内容可以提供帮助。

相关推荐
草莓熊Lotso6 小时前
C++11 核心特性实战:列表初始化 + 右值引用与移动语义(附完整代码)
java·服务器·开发语言·汇编·c++·人工智能·经验分享
初夏睡觉7 小时前
从0开始c++,但是重置版,第1篇(c++基本框架)
开发语言·c++
草莓熊Lotso7 小时前
GCC/G++ 编译器完全指南:从编译流程到进阶用法(附实操案例)
linux·运维·服务器·网络·c++·人工智能·自动化
cooldream200916 小时前
当代 C++ 的三大技术支柱:资源管理、泛型编程与模块化体系的成熟演进
开发语言·c++
Queenie_Charlie16 小时前
数字去重(set)
数据结构·c++·set
Ayanami_Reii17 小时前
区间不同数的个数-树状数组/线段树/莫队/主席树
数据结构·c++·算法·线段树·树状数组·主席树·莫队
大筒木老辈子17 小时前
C++笔记---并发支持库(atomic)
java·c++·笔记
zero_hz17 小时前
核心区分:用户态/内核态切换 vs. 程序阻塞
c++·io·内核态用户态
胡萝卜3.017 小时前
深入C++可调用对象:从function包装到bind参数适配的技术实现
开发语言·c++·人工智能·机器学习·bind·function·包装器
看见繁华17 小时前
C++ 高级
开发语言·c++