在MFC中怎样添加一个非模态的对话框

2023-10-27

添加一个非模态对话框
1、点击菜单 插入——资源,选择Dialog,点击新建。
2、编辑对话框,添加一些控件什么的。
3、双击对话框或者打开ClassWizard,为对话框建立一个类,如CMyDialog。
4、在*view.cpp的开头添加新建立的类的头文件(如:#include "mydialog.h")。这点很重要,漏了这步编译的时候经常提示出错的。
5、在主窗口的view类定义中添加一个对话框的指针定义,如:
class CTest3View : public CView
{
......
public:
 CMyDialog* pMydialog;
......
}
6、为主窗口增加一个按钮或者菜单,准备点击后弹出对话框,用ClassWizard指定执行函数(如OnOption)。内容如下:
void CTest3View::OnOption()
{
pMydialog=new CMyDialog;//建立对话框
pMydialog->m_width=width;//向对话框输出数据(根据实际情况定)
pMydialog->Create(CMyDialog::IDD);
pMydialog->ShowWindow(SW_SHOW); //显示对话框
}
7、运行一下,对话框就出现了。
8、为了让对话框的数据能反馈回主窗口,需要通过对话框向主窗口发送一个自定义消息,触发主窗口的一个函数,把对话框的数据传回主窗。为了能向主窗口发送消息,需要取得主窗口指针,因此重载对话框的构造函数,生产对话框的时候把主窗的指针传给对话框。
9、在CMyDialog.h增加以下:
#define WM_DIALOGOK WM_USER+1  //自定义点击OK按钮的消息宏
#define WM_DIALOGAPPLY WM_USER+2 //自定义点击APPLY按钮的消息宏
class CMyDialog : public CDialog
{
...
public:
 CMyDialog(CView* pParent); //重载的构造函数声明,原来的构造函数声明去掉
 CView *pView;   //定义一个存储主窗的指针
...
 protected:
 virtual void OnOK();  //重载OnOK函数声明,为了关闭对话框时间向主窗提供数据
};
在CMyDialog.cpp修改如下:
...
CMyDialog::CMyDialog(CView* pParent)//重新定义构造函数,原来的构造函数去掉
{
pView=pParent;//把**View类的指针保存
}
void CMyDialog2::OnOK()//点击对话框的OK按钮,关闭对话框同时数据生效
{
 UpdateData(TRUE);//显式调用实现数据交换
 pView->SendMessage(WM_DIALOGOK); //向主窗发送消息
 CDialog::OnOK();
}
void CMyDialog::OnApply()//点击对话框的APPLY按钮,数据生效但不关闭对话框
{
 UpdateData(TRUE);//显式调用数据交换
 pView->PostMessage(WM_DIALOGAPPLY);//把消息发送给主窗
}
10、对话框把消息发送回主窗后,主窗需要响应该相应的消息,调用函数接受数据的变化。
在**view.h中,修改以下:
class CTest3View : public CView
{
...
public:
 ...
 CMyDialog* pMydialog;   //定义对话框
...
protected:
 //{{AFX_MSG(CTest3View)
 ......
 afx_msg void OnDialogOk(); //声明OK消息处理函数
 afx_msg void OnDialogApply(); //声明apply消息处理函数
 //}}AFX_MSG
...
}
在**view.cpp中,修改如下:
...
#include "mydialog.h"   //引入对话框类定义(别忘记)
...
BEGIN_MESSAGE_MAP(CTest3View, CView)
 ...
 ON_MESSAGE(WM_DIALOGOK,OnDialogOk) //自定义OK消息处理函数,对话框发回的消息这里吵醒主窗,然后它执行OnDialogOk
 ON_MESSAGE(WM_DIALOGAPPLY,OnDialogApply)//自定义APPLY消息处理函数,同上
END_MESSAGE_MAP()
...
CTest3View::CTest3View()
{
 pMydialog=new CMyDialog(this); //将当前指针传入对话框
 pMydialog->Create(CMyDialog::IDD);
}
void CTest3View::OnOption()
{
 pMydialog->m_width=width; //数据传入对话框
 pMydialog->ShowWindow(SW_SHOW); //显示对话框
}
void CTest3View::OnDialogOk()  //自定义的OK消息处理函数
{
 width=pMydialog->m_width; //数据传回主窗
 IfInvalidate();   //对返回数据的处理(自定)
}

void CTest3View::OnDialogApply() //自定义的APPLY消息处理函数
{
 width=pMydialog->m_width; //数据传回主窗
 IfInvalidate();   //对返回数据的处理(自定)
}
11、完成,运行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在MFC中怎样添加一个非模态的对话框 的相关文章

  • 封装的闭包与类?

    我是 JS 来自 C etc 的新手 我突然想到闭包似乎是比类更简单 更方便的处理封装的方法 这段代码似乎给出了一种处理封装的简单方法 function addProperty o var value o get function retu
  • 对 MFC UI 应用程序进行单元测试吗?

    如何对大型 MFC UI 应用程序进行单元测试 我们有一些大型 MFC 应用程序已经开发了很多年 我们使用一些标准的自动化 QA 工具来运行基本脚本来检查基础知识 文件打开等 这些由 QA 小组在日常构建后运行 但我们希望引入一些程序 以便
  • 为什么我不能将一个类划分为多个文件

    我正在尝试创建一个类TestClass它分为几个文件 我将它分成 3 个文件 其中第一个文件TestClassPart1 php已经开始上课了class TestClass 和最后一个文件TestClassPart3 php有班级的右括号
  • java中类的命名约定 - 全部大写

    在 Java 中 当类全部大写时 如何命名它 例如 如果我想创建一个班级来选择某些人成为 VIP 我应该将类命名为 VIPSelector 还是 VipSelector Thanks 你的两个选择都有效 类的主要目标是让它们以大写字母开头
  • 错误 C2248: 'CObject::CObject' : 无法访问类 'CObject' afxwin.h 中声明的私有成员

    我试图让班级负责在灰色背景上放置一些文本 Score h pragma once class Score public Score Score void UpdateScore int points void UpdateLives int
  • 屏幕截图忽略了一些窗口

    我正在 MFC 中工作 我正在尝试捕获桌面的 bmp 我正在使用 GetDC NULL 来执行此操作 但它似乎忽略了特殊的皮肤窗口 它似乎忽略了用 UpdateLayeredWindow 绘制的窗口 此行为似乎仅发生在 Vista x64
  • 从 Selenium Webdriver WebElement 字段检索值并将其传递给 java 变量

    首先 请原谅初学者的问题 我是 Java 和 Selenium Webdriver 的新手 我正在通过尝试测试 CMS 应用程序来学习 Webdriver CMS 的概念是创建文章并通过工作流程发送它们 因此 编辑可能会创建一篇文章并发送给
  • 为什么可以从 console.log 访问 JavaScript 私有方法

    我写了一个简单的代码 const secure new class privateProperty 4 privateMethod console log The property this privateProperty should n
  • 如何表示类的实例与将其作为输入的类之间的关系?

    我有一堂课叫House 这个类的实例是house class House def init self height length self height height self length length def housePlan hou
  • 如何在 MFC 中创建带圆角的进度控件?

    我需要在 MFC 应用程序中创建一个带圆角的进度条 我尝试过使用 CreateRoundRectRgn 和 SetWindowRgn 的组合 它具有使控件完全消失的效果 我还尝试使用透明的 GIF 覆盖层 该覆盖层将绘制在进度栏的顶部 但我
  • Haskell 类型系统的细微差别

    我一直在深入了解 haskell 类型系统的本质 并试图了解类型类的要点 我已经学到了很多东西 但我在下面的代码片段上遇到了困难 使用这些类和实例定义 class Show a gt C a where f Int gt a instanc
  • 将 __DIR__ 常量与字符串连接作为数组值,该数组值是 PHP 中的类成员

    谁能告诉我为什么这不起作用 这只是我在其他地方尝试做的事情的一个粗略的例子 stuff array key gt DIR value 但是 这会产生错误 PHP Parse error syntax error unexpected exp
  • 如何使用javascript通过类名更改html元素的值

    这是我用来更改 html 元素值的代码 a class classname href Vtech com This text to be chnage a 如何在页面加载瞬间更改此文本 看来你需要添加DOMContentLoaded或者把你
  • 发送WM_SETTEXT时如何避免EN_CHANGE通知?

    我有一个 CEdit 派生控件 当基本数据为空时 该控件显示字符串 N A 我最近添加了代码 以在控件获得焦点时清空控件 SetWindowText 并在用户离开焦点时将其设置回 N A SetWindowText N A 控空 唯一的问题
  • 用于配置编辑的 wix 自定义对话框

    你好 我正在尝试使用 wix v3 为我的应用程序设置 msi 我对这项任务有疑问 我需要一个用户输入 该输入将存储在我的应用程序的配置文件中 例如 我需要一个用于 sql 连接字符串的对话框 并且用户输入将写入应用程序配置文件中 我尝试用
  • 从模板类创建对象时出错

    我一直在尝试找到一种方法 从 C 中的多元正态分布中采样随机向量 同时具有均值向量和协方差矩阵 就像 Matlab 的那样mvnrnd功能有效 我找到了实现此功能的类的相关代码这一页 http lost found wandering bl
  • 具有键唯一性和按位置排序的 MFC 字典集合

    看着表上http msdn microsoft com en us library y1z022s1 28v vs 80 29 aspx core collection shape features http msdn microsoft
  • bash 变量中的 Linux 鞭尾/对话框参数错误

    有人可以解释为什么下面的代码不起作用吗 我要疯狂地想找出答案 bin bash TEST M1 1 wire Interface ON echo TEST RESULT dialog title Config Modules State c
  • 内联函数以及类和头文件

    头文件中定义的任何函数都会自动内联吗 如果我在类中声明一个函数并使用关键字 inline 在外部给出定义 那么这个函数会是内联的吗 如果是 为什么这不违反内联函数应在声明时赋予主体的法律 类定义中定义的任何函数都是内联的 任何标记的功能in
  • R 中使用 `UseMethod()` 与 `inherits()` 来确定对象的类

    如果我需要根据 R 对象的类以不同的方式处理它们 我可以使用if and else在单个函数内 foo lt function x if inherits x list Foo the list else if inherits x num

随机推荐

  • oceanbase 与hbase主要区别

    oceanbase支持跨表的事务 而hbase中支持跨行的事务 这是由他们的设计特别决定的 updateserver实际上是将Hbase所有ReginonServer的memtable聚合在一起 regionserver只服务一部分tabl
  • 编程tips

    一 是XOR 是不等于 if a b 和if a b 对对于聪明的编译器来说效率应该是一样的 二 与 的优先级比 高一级 表达式的结合次序取决于表达式中各种运算符的优先级 优先级从上到下依次递减 最上面具有最高的优先级 逗号操作符具有最低的
  • Spring中AOP

    1 概述 AOP 面向切面编程 将程序中的非业务代码抽取 在不修改业务代码的前提下 为其添加功能 功能增强 面向切面的编程思想底层是为目标创建一个代理对象 让代理对象调用目标类中方法 在代理对象调用时 可以额外的调用其他的方法 增强的方法
  • hduoj 2011

    多项式求和 Problem Description 多项式的描述如下 1 1 2 1 3 1 4 1 5 1 6 现在请你求出该多项式的前n项的和 Input 输入数据由2行组成 首先是一个正整数m m lt 100 表示测试实例的个数 第
  • Linq to Sql : 并发冲突及处理策略

    0 并发冲突的示例 单用户的系统现在应该比较罕见了 一般系统都会有很多用户在同时进行操作 在多用户系统中 涉及到的一个普遍问题 当多个用户 同时 更新 修改或者删除 同一条记录时 该如何更新呢 下图展示了开放式并发冲突的一个示例 假设数据库
  • OpenGL片段列表渲染:实现流畅的大规模场景渲染

    OpenGL片段列表渲染 实现流畅的大规模场景渲染 在实时渲染领域 处理大规模场景是一项重要的任务 然而 传统的渲染方式存在着效率低下 内存消耗大等问题 为了解决这些问题 最近的研究中提出了使用片段列表进行场景渲染的方法 本文将介绍如何使用
  • python批量写入数据

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 python批量写入文件内容 前言 一 使用步骤 1 引入库 前言 提示 这里可以添加本文要记录的大概内容 python批量写入文件内容 提示 以下是本篇文章正文内容 下面案
  • 数字后端——信号完整性分析

    随着光刻和集成电路制造工艺的不断进步 以及芯片的特征尺寸从深亚微米到纳米的迅速采用 人们一方面因为芯片的功能极大提高而受益 另一方面 当逻辑门的沟道长度减小时 门的开关时间会减小 这意味着输出驱动器上升时间变短 或者说时钟频率可以更高 同时
  • Web和Servlet

    Web web开发概述 学习web开发 需要先安装一台web服务器 将开发好的web项目部署在web服务器中供外界访问 web开发环境搭建 Web服务器是指驻留于英特网上某种类型计算机的程序 可以向浏览器等Web客户端提供文档 也可以放置网
  • 万亿级KV存储架构与实践

    一 KV 存储发展历程 我们第一代的分布式 KV 存储如下图左侧的架构所示 相信很多公司都经历过这个阶段 在客户端内做一致性哈希 在后端部署很多的 Memcached 实例 这样就实现了最基本的 KV 存储分布式设计 但这样的设计存在很明显
  • JavaScript 实现 -- 希尔排序

    文章目录 希尔排序 代码实现 时间复杂度和稳定性 希尔排序 希尔排序是插入排序的一种 又称 缩小增量排序 Diminishing Increment Sort 是插入排序的一种更高效的改进版本 希尔排序实际上就是分组的插入排序 希尔排序以步
  • Java图片Base64格式压缩大小至40k之内

    Maven中用到的依赖
  • Docker安装Portainer

    前言 Portainer是一个可视化的容器镜像的图形管理工具 利用Portainer可以轻松构建 管理和维护Docker环境 而且完全免费 基于容器化的安装方式 方便高效部署 Docker安装 拉取镜像 docker pull portai
  • Vue2+Vue3

    文章目录 Vue快速上手 Vue是什么 第一个Vue程序 插值表达式 Vue核心特性 响应式 Vue指令 v html v show 与 v if v else 与 v else if v on v bind v for v model 指
  • ElasticSearch一:简介、概念、安装、Kibana客户端安装使用、IK分词器、数据管理

    目录 一 ElasticSearch简介 ElasticSearch 简称ES 应用场景 ElasticSearch与Lucene的关系 哪些公司在使用Elasticsearch ES vs Solr比较 总结 ES vs 关系型数据库 L
  • VS2015 设置了包含路径(包含目录),还是提示说打不开 .h 头文件

    项目 属性 VC 目录 注意上方的平台是否选错 设置后再设置包含路径 另一个原因 有时代码从别的地方复制过来的时候 因为字符编码的问题 一样会造成很多未定义的问题 本人亲测 第一个方法很有用
  • jmeter 接口快速创建

    通过cURL命令创建测试计划 从浏览器获取接口 从postman获取接口
  • postgresql 创建自增索引(序列)、以及索引(序列)相关操作

    PostgreSQL 没有自增索引的概念 需要通过序列来完成相关操作 PostgreSQL 使用序列来标识字段的自增长 数据类型有 smallserial serial 和 bigserial 这些属性类似于 MySQL 数据库支持的 AU
  • java 的循环输入

    书本7 3 计算数字出现的次数
  • 在MFC中怎样添加一个非模态的对话框

    添加一个非模态对话框1 点击菜单 插入 资源 选择Dialog 点击新建 2 编辑对话框 添加一些控件什么的 3 双击对话框或者打开ClassWizard 为对话框建立一个类 如CMyDialog 4 在 view cpp的开头添加新建立的