MFC(十三)多个对话框

news2024/11/24 10:50:52

设置向导模式

1.打开类视图,右键项目--->类向导-->添加Cpropsheet类,命名为mypropsheet

CPropertySheet 是 MFC 的一个类,用于创建包含多个属性页的对话框。它可以使用内置的向导模式,向用户显示“下一步”和“上一步”按钮

2.在Cmypropsheet.h中,声明三个属性类的对象

public:
	PROP01 m_prop01;
	PROP02 m_prop02;
	PROP03 m_prop03;

 3.在构造函数里,把三个对象加进去

Cmypropsheet::Cmypropsheet(UINT nIDCaption, 
    CWnd* pParentWnd, UINT iSelectPage)
	:CPropertySheet(nIDCaption, pParentWnd, iSelectPage)
{
	AddPage(&m_prop01);
	AddPage(&m_prop02);
	AddPage(&m_prop03);
}

4.在第二个构造函数里,也加进去

Cmypropsheet::Cmypropsheet(LPCTSTR pszCaption, 
    CWnd* pParentWnd, UINT iSelectPage)
	:CPropertySheet(pszCaption, pParentWnd, iSelectPage)
{
	AddPage(&m_prop01);
	AddPage(&m_prop02);
	AddPage(&m_prop03);
}

5.在对话框的添加按钮中,加入代码

void CrunningbuttonDlg::OnBnClickedButtonQuery()
{
	Cmypropsheet dlg(__T("职业调查1111 "),this);
	dlg.SetWizardMode();
	dlg.DoModal();
}

第一句是通过mypropsheet构造函数创建了对象,第二个的作用是 设置为向导模式,即有了下一步,帮助,取消等按钮,第三句是创建了一个模态对话框

6.生成后,发现报错了

 7.我们点击重试,看一下输出窗口,发现输出窗口提示了源码269行有错误,我们打开相应源码,定位到269行

ASSERT(::GetWindowLong(hWndCtrl, GWL_STYLE) & WS_GROUP);

这句的意思是没有设置分组,我们将按钮的组属性进行修改,将false改成true,并将m_lang修改为整型变量而不是数组,至于为什么,我也不清楚

重写帮助、下一步等按钮

1.在在PROP01.cpp中添加重写OnWizardNext()函数

BOOL PROP01::OnSetActive()
{
	((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_NEXT);
	((CPropertySheet*)GetParent())->GetDlgItem(IDHELP)
		->ShowWindow(SW_HIDE);
	return CPropertyPage::OnSetActive();
}

 。OnSetActive() 函数通常被视为初始化属性页的最后一个处理步骤,因此可以在这个函数中完成大部分的初始化和设置操作,例如更新属性页中的数据、设置控件的默认状态等等。

 OnSetActive()CPropertyPage 类的消息处理函数之一,用于处理激活属性页时发出的 PSN_SETACTIVE 通知消息

GetParent() 是一个 MFC 函数,是用于获取当前窗口的父窗口指针的,该函数的返回值是一个 CWnd* 类型的指针,指向当前窗口的父窗口。这句代码的意思是设置一个向前按钮,当前窗口的父类窗口就是指这个属性页,可是这个属性页就是这个当前的窗口,为什么还是父类呢,因为属性页才是当前窗口,而它的父类窗口就是它的对话框窗口,它们两个显示上是同一个窗口,属性页(Property Page)和对话框(Dialog)在视觉上表现为同一个窗口。这是因为属性页实际上是基于对话框窗口来实现的,也就是说属性页是以对话框形式展现的

2.在POP02.cpp中和PROP03.cpp中同样加入这些代码

加上判断

判断用户是否输入数据

3.在PROP01.cpp中添加重写OnWizardNext()函数

LRESULT PROP01::OnWizardNext()
{
	UpdateData();
	if (m_lang==-1)
	{
		MessageBox(_T("请选择开发语言"),
            _T("开发语言未选择"), MB_OK | MB_ICONERROR);
		return -1;
	}
	if (m_company.GetLength()==0)
	{
		MessageBox(_T("请选择公司"),
             _T("公司未选择"), MB_OK | MB_ICONERROR);
		return -1;
	}
	return CPropertyPage::OnWizardNext();
}

在处理向下导航按钮的事件时阻止用户导航到下一页,则需要在 OnWizardNext() 中返回一个特定的值 -1

OnWizardNext() 是点击“下一步”按钮时触发的函数,它是 CPropertySheet 对象的一个成员函数

在PROP02.cpp中加入如下代码

LRESULT PROP02::OnWizardNext()
{
	bool haschose = false;
	UpdateData();
	for (int i=0;i<4;i++)
	{
		if (m_skill[i] == true)
		{
			haschose = true;
			break;
		}
	}
	if (!haschose)
	{
		MessageBox(_T("技能未选择"),
            _T("请选择技能"),MB_OK|MB_ICONERROR);
		return -1;
	}
	return CPropertyPage::OnWizardNext();
}

在PROP03中加入如下代码

BOOL PROP03::OnWizardFinish()
{
	UpdateData();
	if (m_money.GetWindowTextLength() == 0)
	{
		MessageBox(_T("薪资范围未选择"),
             _T("请选择薪资"), MB_OK | MB_ICONERROR);
		return FALSE;
	}
	return CPropertyPage::OnWizardFinish();
}

注意,这里返回值是0,而不是-1,因为这个函数返回值为bool型

消息反馈给用户

if (ID_WIZFINISH == dlg.DoModal())
	{
		CString strmsg = __T("您的选择是");
		switch (dlg.m_prop01.m_lang)
		{
		case 0:
			strmsg += __T("开发语言:C++");
			break;
		case 1:
			strmsg += __T("开发语言:java");
			break;
		case 2:
			strmsg += __T("开发语言:python");
			break;
		}
		strmsg += __T("您的公司是") + dlg.m_prop01.m_company;
		strmsg += __T("您的技能是");
		CString strSkill[4] = { __T("网络编程")
		, __T("MFC") , __T("操作系统") , __T("数据结构") };
		for (int i=0;i<4;i++)
		{
			if (dlg.m_prop02.m_skill[i])
			{
				strmsg += strSkill[i] + __T(",");
			}
		}
		
		strmsg += __T("您的薪资范围是") + dlg.m_prop03.text;
		MessageBox(strmsg, __T("最终信息"));
	}

ID_WIZFINISH 是在MFC中预定义的常量,表示“完成”按钮被点击

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

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

相关文章

unity创建urp的方法

Unity里URP项目的介绍和创建 URP(Universal Render Pipeline)通用渲染管线&#xff0c;是Unity在2019.3版本之后推出的一种新的渲染管线。 对比起默认的渲染管线&#xff0c;他的使用上会产生了一些变化&#xff0c;包括了摄像机的使用、Shader的编写等。 传统的渲染管线在渲染…

采用动态规划来处理有向无环图最短路径问题,c++实现

采用动态规划来处理有向无环图最短路径问题&#xff0c;c实现 需求描述实现思路代码实现 需求描述 如图&#xff0c;在一个无环有向图中&#xff0c;找到起点0到终点的最短路径 实现思路 设s1,s2,…, st 是一条最短路径假设s1&#xff0c;s2&#xff0c;已求出&#xff0c;则…

JS 事件循环机制、调用栈、堆、主线程、宏任务队列、微任务队列、缓存管理之间的关系

一、事件循环机制 你是否想过&#xff0c;在控制台执行代码时&#xff0c;为什么能立即得到响应&#xff1f; 实际上&#xff0c;底层有一套模型机制叫 事件循环&#xff0c;换句话说&#xff0c;它是一个”死循环“&#xff0c; 里面负责监听&执行我们写的 JS 代码&#…

spring+springMVC+mybatis实现的物业管理系统

本系统借用了前辈的页面框架来实现了一个物业管理系统&#xff0c;使用到的主要技术有&#xff1a;SSM框架&#xff0c;MySql 8.0数据库&#xff0c;tomcat 8.0&#xff0c;使用maven进行依赖管理&#xff0c;前端页面使用的是jsp。整个系统分为用户端和管理员端。 用户端功能有…

Vue.js 中的权限控制是什么?如何进行权限控制?

Vue.js 中的权限控制是什么&#xff1f;如何进行权限控制&#xff1f; 在现代 Web 应用程序中&#xff0c;权限控制是一个重要的话题。Vue.js 作为一种现代的前端框架&#xff0c;提供了一些有用的工具和技术来实现权限控制。本文将介绍 Vue.js 中的权限控制的概念、作用以及如…

一文教你认清云渲染的优势和劣势

在当今数字化时代&#xff0c;云渲染作为一项创新的技术方案&#xff0c;正逐渐成为许多行业中的热门话题。与传统的本地渲染相比&#xff0c;云渲染具备许多独特的优势和劣势。本文将深入探讨云渲染的各项特点&#xff0c;帮助您全面了解这一技术&#xff0c;并为您提供有关云…

js+canvas实现劈腿关系图

【我愿称多对一 一对多关系为劈腿关系】 【仓库地址】gitgithub.com:yyccmmkk/rl.git 【显示所有线路细节】 【合并线路】 【合并同一个目标点线路】 【合并同一个出发点线路】 【数据结构】 原始数据只需要提供节点自身id 父点节id&#xff0c;劈腿关系图自动处理 [{id:z…

基于CSDN上海城市开发者社区第一次线下沙龙的筹备经验分享

引言 由于时间较为紧张、邹老师行程安排紧凑等因素影响&#xff0c;结合实际情况&#xff0c;改茶话会为聚餐&#xff0c;所以在举办线下沙龙的时候一定要根据实际情况来斟酌活动形式。本次活动是和哈士奇&#xff0c;哈哥一起筹备&#xff0c;也得到了哈哥的大力支持&#xff…

如何进行物联网开发可以快速完成产品研发?

物联网产品的研发与开发过程&#xff0c;是一个不断探索、创新、实践的过程&#xff0c;需要很长的周期&#xff0c;在这个过程中&#xff0c;项目团队往往需要投入大量的人力、物力和时间。同时&#xff0c;物联网产品研发过程中还涉及到大量的专业技术和知识&#xff0c;需要…

从git上拉取项目

目录 一、前期准备&#xff0c;获取git下载链接 二、idea下载 2.1.打开git下载界面 2.2.进入下载界面 2.3.下载前期配置 2.4.输入账号密码 2.5.下载完成后idea打开 2.6.下载完成后文件目录展示 三、命令行下载 3.1.打开所需要下载的项目路径 3.2.进入黑窗口 …

【算法系列之数组I】leetcode54.螺旋矩阵

704. 二分查找 力扣题目链接 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。 输入: nums [-1,0,3,5,9,12], target 9…

【618备战巡礼】“三高”之第一高--如何打造高可用系统 | 京东云技术团队

前言 我们经常会说互联网“三高”&#xff0c;那什么是三高呢&#xff1f;我们常说的三高&#xff0c;高并发、高可用、高性能&#xff0c;这些技术是构建现代互联网应用程序所必需的。对于京东618备战来说&#xff0c;所有的中台系统服务&#xff0c;无疑都是围绕着三高来展开…

一文说清DC-DC BUCK电路(非常详细)

目录 摘要 BUCK原理 DC-DC芯片框图 自举电容 输出电感 输出电容和纹波 损耗 总结 摘要 DC-DC BUCK&#xff0c;是硬件工程师工作中使用频率非常高的电路&#xff0c;可以这么说&#xff0c;只要板子不是迷你型的&#xff0c;十有八九都有DC-DC。因此&#xff0c;对它的…

Win10安装mac虚拟机

参考文章 按照上面的参考文章进行了安装并完成了安装&#xff0c;结合安装过程中遇到的问题&#xff0c;进行一个总结。 要想在win10上安装mac虚拟机&#xff0c;需要准备三样东西&#xff1a; &#xff08;1&#xff09;虚拟机平台&#xff1a;用来装载mac虚拟机 &#xf…

【分布族谱】学生t分布,及其与正态分布、卡方分布的关系

文章目录 简介正态分布与卡方分布用scipy来验证三者关系 简介 1908年&#xff0c;戈塞特在酿酒厂工作&#xff0c;由于酒厂禁止员工发表酿酒相关的研究成果&#xff0c;所以他以Student为笔名发表了有关t分布的研究&#xff0c;故而这个著名的分布被命名为学生分布。 如果有两…

计算机基础--->操作系统(3)【内存管理】

文章目录 内存管理内存管理主要做什么&#xff1f;什么是内存碎片&#xff1f;常见内存管理方式虚拟内存什么是虚拟内存&#xff1f;虚拟内存的作用&#xff1f;没有虚拟内存的问题什么是虚拟地址和物理地址&#xff1f; 分段机制分页机制转址旁路缓存&#xff08;TLB、快表&am…

MySQL唯一约束失效深度剖析

详细情况&#xff1a; 业务反馈&#xff1a;“用int查出来有两条数据&#xff0c;char类型查出来只有一条数据 &#xff0c;这几个字段还是uk的 ”&#xff08;版本MySQL 5.7.25&#xff09; 表结构如下&#xff1a; CREATE TABLE test_table (id bigint(20) NOT NULL AUTO_IN…

构建方便残障人士使用的网站 web enhance the accessibility

文章目录 前言检测网站是否符合残障人士使用window版软件edge浏览器插件版 前端开发为残障人士的通用标准img标签a标签字体与颜色显示或隐藏的元素可交互的元素标记元素类别 总结 前言 网站的构建往往会忽略一群特殊的人群&#xff0c;在某些方便存在障碍的网民&#xff0c;比…

Docker镜像管理

Docker 概述 Docker是什么 Docker是一个开源的应用容器引擎&#xff0c;基于go语言开发并遵循了apache2.0协议开源。 Docker是在Linux容器里运行应用的开源工具&#xff0c;是一种轻量级的“虚拟机”。 Docker 的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移…

基于状态的维护(CBM)如何推动设备效率提高?

基于状态的维护&#xff08;Condition-Based Maintenance&#xff0c;CBM&#xff09;是一种先进的维护策略&#xff0c;通过实时监测和分析设备的状态数据&#xff0c;预测设备故障并采取相应的维护措施。CBM基于数据驱动的方法&#xff0c;能够提高设备的可用性、降低维修成本…