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函数在其中

6.运行结果:

当运行额不能程序是,会出现下面的界面:

       当我们在编辑框中输入文字然后点击“控件->变量”按钮时,会出现一个显示变量内容的消息框,显示内容正是我们在编辑框输入的内容;当点击“变量->控件”按钮时,编辑框的内容会恢复到默认值。

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

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

相关文章

机器学习和深度学习 --李宏毅(笔记与个人理解)Day 18

Day 18 Spatial Transformer Layer 因为单纯的cNN无法做到scaling&#xff08;放大&#xff09;and rotation&#xff08;转&#xff09;&#xff0c;所以我们引入&#xff1b; 实战中也许我们可以做到 是因为 我们的training data 中包含了对data 的augmentation&#xff1b; …

设计模式——外观(门面)模式10

外观模式&#xff1a;能为系统框架或其他复杂业务流程封装提供一个简单的接口。 例如抽奖过程中 设计模式&#xff0c;一定要敲代码理解 调用1&#xff08;抽奖系统&#xff09; /*** author ggbond* date 2024年04月08日 10:34*/ public class Lottery {public String getId…

帝国cms仿《鳄鱼下载站》网站源码

仿《鳄鱼下载站》网站源码手机安卓软件网站模版 PHP网站源码 帝国cms内核 采用帝国cms7.5 环境PHPmysql 恢复数据库后如何修改密码: 双击表&#xff0c;进入对应的详细数据表&#xff0c;然后找到&#xff1a;www_96kaifa_com_enewsuser这个表&#xff0c;双击打开修改&…

python画神经网络图

代码1(画神经网络连接图&#xff09; from math import cos, sin, atan import matplotlib.pyplot as plt # 注意这里并没有用到这个networkx这个库&#xff0c;完全是根据matploblib这个库来画的。 class Neuron():def __init__(self, x, y,radius,nameNone):self.x xself.y …

Substance 3D2024版 下载地址及安装教程

Substance 3D是Adobe公司推出的一套全面的3D设计和创作工具集合&#xff0c;用于创建高质量的3D资产、纹理和材质。 Substance 3D包括多个功能强大的软件和服务&#xff0c;如Substance 3D Painter、Substance 3D Designer和Substance 3D Sampler等。这些工具提供了广泛的功能…

智过网:注册安全工程师注册有效期与周期解析

在职业领域&#xff0c;各种专业资格认证不仅是对从业者专业能力的认可&#xff0c;也是保障行业安全、规范发展的重要手段。其中&#xff0c;注册安全工程师证书在安全生产领域具有举足轻重的地位。那么&#xff0c;注册安全工程师的注册有效期是多久呢&#xff1f;又是几年一…

数据可视化的3D问题

三维对象非常流行&#xff0c;但在大多数情况下会对解释图形的准确性和速度产生负面影响。 以下是对涉及 3d 的主要图形类型的回顾&#xff0c;并讨论了它们是否被认为是不好的做法。 1、3D 条形图&#xff1a;不要 这是一个 3d 条形图。 你可能很熟悉这种图形&#xff0c;因为…

LabVIEW电信号傅里叶分解合成实验

LabVIEW电信号傅里叶分解合成实验 电信号的分析与处理在科研和工业领域中起着越来越重要的作用。系统以LabVIEW软件为基础&#xff0c;开发了一个集电信号的傅里叶分解、合成、频率响应及频谱分析功能于一体的虚拟仿真实验系统。系统不仅能够模拟实际电路实验箱的全部功能&…

The C programming language (second edition,KR) exercise(CHAPTER 3)

E x c e r c i s e 3 − 1 Excercise\quad 3-1 Excercise3−1&#xff1a;输出结果如图1所示&#xff0c;这里故意让二分搜索算法去寻找一个在数组中不存在在的数&#xff0c;然后去看两种二分搜索算法分别所花费的时间的大小&#xff0c;为了使得所花费的时间更具有可分辨性&a…

3D室内装潢设计 Sweet Home 3D for Mac 中文直装版

Sweet Home 3D 是一款非常棒的家装辅助设计软件&#xff0c;支持包括中文在内的16中语言&#xff0c;它能帮您通过二维的家居平面图来设计和布置您的家具,还可以用三维的视角浏览整个装修布局的全貌。是一款操作起来简单方便&#xff0c;使用起来快捷、迅速&#xff0c;拥有超高…

C语言——数据在内存中的存储

引言 数据是程序运行的核心。当我们用C语言编写程序时&#xff0c;我们实际上是在操纵内存中的数据。这些数据在内存中是如何储存的&#xff0c;今天我们就来学习这些内容。 基本数据类型 1.整型 int: 基本整型&#xff0c;通常占用4个字节 short: 短整型&#xff0c;通常占用…

Windows环境下删除MySQL

文章目录 一、关闭MySQL服务1、winR打开运行&#xff0c;输入services.msc回车2、服务里找到MySQL并停止 二、卸载MySQL软件1、打开控制模板--卸载程序--卸载MySQL相关的所有组件 三、删除MySQL在物理硬盘上的所有文件1、删除MySQL的安装目录&#xff08;默认在C盘下的Program …

基于STC12C5A60S2系列1T 8051单片机的带字库液晶显示器LCD12864数据传输并行模式显示汉字应用

基于STC12C5A60S2系列1T 8051单片机的液晶显示器LCD12864显示汉字应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍液晶显示器LCD12864简单介绍一、LCD12864点阵型液…

【四十八】【算法分析与设计】单调栈,单调栈模板,单调栈求个元素最近小于(等于)或者大于(等于)下标

求各个元素左边和右边的最近的小于&#xff08;等于&#xff09;的下标 最近的小于的计算过程: 实现的过程需要用到一个stack<>st 黑盒:在st的元素都可以正确计算出最近小于的元素下标那么我们依次将arr中的元素入栈计即可 1.栈里面存储的是vector&#xff0c;vector存…

无人机巡检技术革命性变革光伏电站运维管理

在中国广袤的大地上&#xff0c;光伏电站如雨后春笋般崛起&#xff0c;晶体硅组件板在阳光下熠熠生辉&#xff0c;为人们带来了源源不断的绿色能源。然而&#xff0c;随着光伏产业的迅猛发展&#xff0c;电站运维管理面临着前所未有的挑战。而无人机巡检技术的引入&#xff0c;…

分类预测 | Matlab实现PSO-LSSVM粒子群算法优化最小二乘支持向量机数据分类预测

分类预测 | Matlab实现PSO-LSSVM粒子群算法优化最小二乘支持向量机数据分类预测 目录 分类预测 | Matlab实现PSO-LSSVM粒子群算法优化最小二乘支持向量机数据分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现PSO-LSSVM粒子群算法优化最小二乘支持向量…

一起学习python——基础篇(19)

今天来说一下python的如何修改文件名称、获取文件大小、读取文中指定的某一行内容。 1、修改文件名称&#xff1a; import os testPath"D:/pythonFile/test.txt" testPath2"D:/pythonFile/test2.txt" #修改文件名称使用rename方法&#xff0c; #第一个参…

滑动窗口例题

一、209:长度最小的子数组 209:长度最小的子数组 思路&#xff1a;1、暴力解法&#xff1a;两层for循环遍历&#xff0c;当sum > target时计算子数组长度并与result比较&#xff0c;取最小的更新result。提交但是超出了时间限制。 class Solution {public int minSubArray…

(UDP)其他信息: 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。

“System.Net.Sockets.SocketException”类型的异常在 mscorlib.dll 中发生&#xff0c;但未在用户代码中进行处理其他信息: 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。这个异常表示端口已经被占用了&#xff0c;需要释放端口或者使用其他端口来建立连接。您可以…

CMake 学习笔记2

其他很好的总结 CMake教程系列-01-最小配置示例 - 知乎 CMake 保姆级教程&#xff08;上&#xff09; | 爱编程的大丙 10-补充(完结)_哔哩哔哩_bilibili 1、基本关键字 SET命令的补充 &#xff08;1&#xff09;SET命令设置执行标准 #增加-stdc11 set(CMAKE_CXX_STANDARD…