MFC:手写一个模态对话框程序

      我们知道,在MFC中,要生成一个模态对话框程序,只要按着VS的提示,拖拖拽拽就能生成一个这样的程序,效率非常高。这里,我们反其道而行之,自己写一个这样的程序,这个程序与自动生成的程序大同小异,目的是通过自己写程序的过程,提高阅读理解MFC自动生成程序的能力。
     具体步骤及相关代码如下:
     0.创建一个win32空项目,并加载对话框等资源。
       添加对话框等资源步骤:
       a.右键资源文件->添加->资源->Dialog->新建(右键对话框->属性 可看到对话框默认ID是 IDD_DIALOG1);
       b.视图->工具箱 拖入一个编辑框(Edit Control),右键编辑框->属性 可看到编辑框默认ID是
IDC_EDIT1);
       c.工具箱 拖入一个按钮(Button),右键按钮->属性 将描述文字改为“控件->变量”,同时可看到按钮的默认ID是IDC_BUTTON1;
       d.按照上一步相同的方法,再拖入一个按钮,描述文字为“变量->控件”,默认ID是IDC_BUTTON2。
       上面,各个ID是该资源的唯一代码,后边要用到。为简单计,把“确认”、“取消”两个按钮删除。
     1.设定环境
      项目->属性->配置属性->高级 选用多字符集 选用静态MFC库
      项目->属性->配置属性->链接器->系统  选用窗口
      2.解决方案资源管理器->右键源文件->添加一个cpp源文件,命名mdlDlg.cpp。后面的所有代码,都写到这个文件中。
      在mdlDlg.cpp中,先包含头文件 <afxwin.h>和 "resource.h",resource.h是由于我们添加对话框等资源生成的。代码:

#include<afxwin.h>
#include"resource.h"

     3.公开继承CDialog类声明子类CMyDlg(自定义对话框类)
         a.类内声明消息处理宏并在类外实现
         b.构造函数(显示调用父类构造函数并将对话框资源ID作为父类构造参数传入)
         c.需要的数据成员变量在此声明,这里声明了两个对象:
            CString m_strEdit; //数据类型对象,即“变量”
            CEdit m_ctrlEdit; //控件类型对象 ,即“控件”
         d.声明父类虚函数DoDataExchange并在类外重写实现,函数参数CDataExchange* pDX是一个结构体。
         e.类内声明消息处理函数( 两个按钮被点击的消息处理程序 )并在类外实现;
           相关的一个函数:UpdateData(BOOL bool); 参数=TRUE:控件传到变量;参数= FALSE:相反。这个函数内部调用DoDataExchange。
        这部分的代码及注释如下:

class CMyDlg :public CDialog {
public:DECLARE_MESSAGE_MAP() //类内声明消息处理宏enum { IDD = IDD_DIALOG1 };
public:CMyDlg() :CDialog(IDD) {};//
public:CString m_strEdit;//数据类型对象CEdit m_ctrlEdit;//控件类型对象 virtual void DoDataExchange(CDataExchange* pDX);//父类成员虚函数DoDataExchange重写
public:afx_msg void OnBtn1(); //按钮1被点击处理程序afx_msg void OnBtn2(); //按钮2被点击处理程序
};
void CMyDlg::OnBtn1() {UpdateData(TRUE);//调用DoDataExchange函数,将编辑框控件//中的内容传到变量m_strEdit中AfxMessageBox(m_strEdit);
}
void CMyDlg::OnBtn2() {m_strEdit = "变量初始值";UpdateData(FALSE);//调用DoDataExchange函数,将变量中的内容//显示到编辑框中
}void CMyDlg::DoDataExchange(CDataExchange* pDX) {//程序一旦启动,即会调用本函数DDX_Text(pDX, IDC_EDIT1, m_strEdit);//自动生成式类向导课自动加载函数DDX_Control(pDX, IDC_EDIT1, m_ctrlEdit);
}BEGIN_MESSAGE_MAP(CMyDlg, CDialog) //实现消息处理宏ON_BN_CLICKED(IDC_BUTTON1, OnBtn1) ON_BN_CLICKED(IDC_BUTTON2, OnBtn2) 
END_MESSAGE_MAP()

 4.公开继承CWinApp方式声明CMyWinApp(自定义运行类)
    类内声明InitInstance虚函数,类外实现:
        <1>.声明自定义对话框类对象
        <2>.将对话框对象地址赋值给m_pMainWnd
        <3>.调用对话框类的成员函数DoModal(),无参,用来显示一个模态对话框。模态对话框必须回答,否则程序不能继续,非模态对话框处理不处理,程序都可继续。
        <4>.return FALSE
 5.声明自建运行类对象。以上部分代码及注释如下:

class CMyWinApp :public CWinApp {
public:virtual BOOL InitInstance();
};
BOOL CMyWinApp::InitInstance() { //重写初始化函数CMyDlg dlg;m_pMainWnd = &dlg;dlg.DoModal(); //显示对话框return FALSE;
}
CMyWinApp theApp; //声明全局运行类对象,main函数在其中

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/811601.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

生活是否磨灭斗志:一场深度探讨

在人生的舞台上&#xff0c;每个人都在演绎着自己的故事&#xff0c;其中充满了挑战、挫折、成功与喜悦。在这个过程中&#xff0c;一种名为“斗志”的精神力量始终贯穿其中&#xff0c;驱动我们面对困难&#xff0c;追求目标&#xff0c;实现自我价值。然而&#xff0c;有一种…

机器学习基础入门(一)(机器学习定义及分类)

机器学习定义 给予计算机无需特意带有目的性编程便有学习能力的算法 深度学习算法 主要有监督学习和非监督学习两类 监督学习&#xff08;supervised learning&#xff09; 定义 1、学习由x映射到y的映射关系 2、主动给予机器学习算法正确示例&#xff0c;算法通过示例来学习…

订单中台架构:打造高效订单管理系统的关键

在现代商业环境下&#xff0c;订单管理对于企业来说是至关重要的一环。然而&#xff0c;随着业务规模的扩大和多渠道销售的普及&#xff0c;传统的订单管理方式往往面临着诸多挑战&#xff0c;如订单流程复杂、信息孤岛、数据不一致等问题。为了应对这些挑战并抓住订单管理的机…

大数据迁移工具开发思路

数据存储MySQL中&#xff0c;迁移到hive中&#xff0c;建立数据仓库&#xff0c;为后期的大数据分析、主题订阅、消息分发提供海量数据支持。 涉及到的服务及中间件版本如下&#xff1a; 1、MySQL&#xff0c;版本&#xff1a;8.0.19 2、Hive&#xff0c;版本&#xff1a;3.0.0…

云计算:Linux 部署 OVS 集群(控制端)实现OpenFlow

目录 一、实验 1.环境 2.Linux 部署 OVS 集群&#xff08;控制端&#xff09; 3.控制端对接服务端OVS网元 4.服务端OVS添加流表 5.服务端删除OVS 二、问题 1. ODL如何查找已安装插件 2.查看流表显示不全 3.如何删除OVS流表 一、实验 1.环境 (1) 主机 表1 宿主机 主…

java包目录命名

包目录命名 config controller exception model common entity enums reponse request repository security service util

Python 全栈系列239 使用消息队列完成分布式任务

说明 在Python - 深度学习系列32 - glm2接口部署实践提到&#xff0c;通过部署本地化大模型来完成特定的任务。 由于大模型的部署依赖显卡&#xff0c;且常规量级的任务需要大量的worker支持&#xff0c;从成本考虑&#xff0c;租用算力机是比较经济的。由于任务是属于超高计…

Java上机实验报告(6)

实验 &#xff08;6&#xff09; 项目名称&#xff1a;常用实用类-字符串类 一、 实验报告内容一般包括以下几个内容&#xff1a; 实验项目名称 实验6 常用实用类-字符串类实验目的和要求 本实验的目的&#xff1a; 掌握字符串概念&#xff0c;区分字符串类型和字符类型。掌握…

QA测试开发工程师面试题满分问答11: web前端页面视频组件无法播放如何定位bug

当 web 前端页面的视频组件无法播放时&#xff0c;可以从以下维度进行分析和定位可能的 bug&#xff0c;分析维度包括但不限于&#xff1a;前端功能点、缓存、异常、后端功能点、资源占用、并发、网络等&#xff1a; 前端功能点&#xff1a; HTML5 视频支持&#xff1a;检查视频…

等保测评2.0——网络安全等级保护测评的初步了解

一、什么是网络安全等级保护测评&#xff1f; 二、网络安全等级保护&#xff0c;保护的是什么&#xff1f; 等级保护对象&#xff1a;网络安全等级保护工作直接作用的对象。&#xff08;注&#xff1a;主要包括信息系统、通信网络设施和数据资源等&#xff09; 计算机信息系统…

Qotom Q720G5英特尔赛扬处理器N4000高性价比无风扇迷你电脑5网口软路由防火墙

在数字时代&#xff0c;迷你电脑已经成为高效、灵活的解决方案&#xff0c;无论是个人用户还是企业用户&#xff0c;都能从中受益。Qotom Q720G5 无风扇迷你电脑就是这样一款强大的选择&#xff0c;它不仅可以作为软路由、防火墙和路由器&#xff0c;还有着更多的潜力等待发掘。…

中国手机频段介绍

中国目前有三大运营商&#xff0c;分别是中国移动、中国联通、中国电信&#xff0c;还有一个潜在的运营商中国广电&#xff0c;各家使用的2/3/4G的制式略有不同 中国移动的GSM包括900M和1800M两个频段。 中国移动的4G的TD-LTE包括B34、B38、B39、B40、B41几个频段&#xff0c;…

【C++】C++11介绍

目录 C11的由来 命名趣事 统一的列表初始化 统一的列表初始化的一些关键点和特性&#xff1a; 简单测试代码示例&#xff1a; 示例 1&#xff1a;初始化内置类型和数组 示例 2&#xff1a;初始化类和结构体 示例 3&#xff1a;初始化标准库容器 声明 auto关键字 auto…

基于双向长短期神经网络LSTM的飞行轨迹预测,基于GRU神经网络的飞行轨迹预测

目录 背影 摘要 LSTM的基本定义 LSTM实现的步骤 BILSTM神经网络 基于双向长短期神经网络LSTM的飞行轨迹预测,基于GRU神经网络的飞行轨迹预测 完整代码: 基于双向长短期神经网络LSTM的飞行轨迹预测,基于GRU神经网络的飞行轨迹预测资源-CSDN文库 https://download.csdn.net/do…

苹果全力升级:用专注AI的M4芯片彻底改造Mac系列

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

设计符合autosar架构的simulink模型框架

设计符合AUTOSAR架构的Simulink模型框架需要对AUTOSAR标准有深入的理解,同时也需要熟悉Simulink建模工具。以下是设计这样一个模型框架的步骤: 1. 理解AUTOSAR架构要求 研究AUTOSAR标准:首先,需要详细阅读并理解AUTOSAR标准文档,特别是与软件架构和模块定义相关的内容。确…

Nginx实现反向代理、负载均衡、动静分离

1. 什么是Nginx的反向代理&#xff1f; Nginx的反向代理是指Nginx作为服务器的前端&#xff0c;接收客户端的请求&#xff0c;然后将请求转发给后端的真实服务器&#xff0c;并将真实服务器的响应返回给客户端。这种代理方式使得客户端并不知道真实服务器的存在&#xff0c;它…

通过Transform与Animation,来探索CSS中的动态视觉效果

在 transform 和 animation 出现之前&#xff0c;前端开发者通常需要编写大量的 JavaScript 代码来实现动态效果。然而&#xff0c;这两个 CSS 属性的引入极大地简化了丰富动效和过渡效果的实现&#xff0c;从而让用户界面更加引人入胜&#xff0c;交互体验更为流畅。本文将深入…

最优算法100例之44-不用加减乘除做加法

专栏主页:计算机专业基础知识总结(适用于期末复习考研刷题求职面试)系列文章https://blog.csdn.net/seeker1994/category_12585732.html 题目描述 不用加减乘除做加法 题解报告 最优解法:使用异或 1)异或是查看两个数哪些二进制位只有一个为1,这些是非进位位,可以直接…

小程序地理位置权限申请+uniapp调用uni.getLocation

文章目录 一、小程序地理位置权限申请二、uniapp调用uni.getLocation 一、小程序地理位置权限申请 需要确保小程序类目已经填写 点击左侧导航栏找到最后的“设置”——“基本设置”——“前往填写” 在开发管理——接口设置——地理位置中可以看到&#xff1a; 即可点击想要申…