C++编程逻辑讲解step by step:使用对话框与控件(1)

 对话框是实现人机交互的重要工具,Visual C++的对话框类似于VB或Delphi的form,对话框和各种控件的结合使用,可以建立形形色色的功能十分强大的应用程序窗口界面,这就是所谓的对话框编程技术。
    应用程序中需要各种各样的对话框,例如:消息对话框、口令对话框、进度条对话框,属性页对话框,表单对话框以及各种通用对话框(文件对话框、字体对话框、颜色对话框等)。
从执行方式又可将对话框分为模态和非模态两大类,模态对话框执行期间独占系统资源,只有在关闭之后,才可以执行程序的其它部分;非模态对话框执行期间,允许程序的其它部分同时执行。
一、口令对话框
要求:创建一个多文档工程项目,在该项目中添加一个口令对话框,以防止非法用户侵入。
 


1.建立多文档应用程序框架(工程)
操作过程略
2.编辑对话框资源
(1)在IDE的工作区中选择Resource View标签,可以在该标签页中查阅、编辑项目的各种资源;
(2)选择Dialog条目,单击鼠标右键,弹出快捷菜单,执行Insert Dialog命令,此时在Dialog条目下自动增加一个标识号(id)为IDD_DIALOG1 的条目,同时在客户区中显示对话框资源的框架。
(3)移动鼠标到对话框资源上,单击鼠标右键,在弹出的快捷菜单上执行“Properties”命令,弹出“Dialog Properties”对话框。
(4)利用“Dialog Properties”对话框进行对话框属性、风格等的设置:
a. 将默认的对话框资源标识号IDD_DIALOG1改为IDD_PASSWORD_DIALOG;
b. 将对话框的标题改为口令。
(5)调整对话框上各个控件的布局并编辑各个控件的属性
a. 利用鼠标拖动操作将两个按纽控件移动到对话框的底部。
b. 在“Push Button Properties”对话框的“General”标签页中将两个按纽的Caption属性分别改为确认和取消。(在选中的按纽上单击右键并所弹出的快捷菜单上执行“Properties”命令即可进入该对话框)。
(6)在对话框资源上增加新的控件
     需要增加的控件有:显示“请输入口令”的Static Text控件,对口令内容作简要说明的Static Text控件,口令输入框—Edit Box控件。
     增加控件的操作:
    在Control工具栏中对应的控件上单击左键,表示选中该控件;
    在对话框的对应位置上拖动鼠标以确定控件放置位置和控件大小;
    修改Static Text控件的Caption属性值,例如改为请输入口令;
    将作为口令输入框的Edit Box控件的ID标识改为IDC_PASSWORD_EDIT,并在Styles标签中选中Password属性,以将输入风格设置为口令风格(用*代替所输入的字符)。
注意:进入控件属性对话框的“Extended Styles“标签页,可以进一步设置控件的风格,例如对Static Text Clientedge、Static edge和Modal frame等属性,达到如下图所示的效果: 

(7)执行Layout菜单上的Tab Order命令以调整对话框上各个控件的激活顺序。调整时只须按需要的顺序单击对话框上的各个控件即可,控件左上角所显示的数字即表示激活顺序。
(8)单击“Dialog工具栏(在IDE窗口的下方)中的Test按纽进行对话框效果测试。
3.创建对话框类并添加代码
1)创建对话框类cPasswordDialog
操作步骤如下:
(1)在对话框资源上单击右键,在弹出的快捷菜单上选择并执行“Class Wizard”命令(也可直接View| Class Wizard),弹出“MFC Class Wizard”对话框,并紧接着弹出“Adding Class”对话框(仅当系统检测到有新建的对话框资源、菜单资源等,并且该资源尚未与相应的类建立关联,系统就会自动弹出时“Adding Class”对话框,询问是否建立新类)。
(2)在“Adding Class”对话框中直接单击“OK”按钮(确认默认选择Create anew class),进入“New Class”对话框,在New编辑框中输入类名:cPasswordDialog,其它设置均为默认值。单击“OK”按钮后进入“MFC Class Wizard”对话框(该对话框中Projects项的值为Diaolg、Class name项的值为cPasswordDialog均无须改变)。
(3)进入“MFC Class Wizard”对话框的“Member Variablee”标签页,选中Control IDs框中的IDC_PASSWORD_EDIT条目,单击“Add Variable”按钮,弹出“Add Variable”对话框。
(4)在“Add Variable”对话框中添加cPasswordDialog类的数据成员m_Password,并将该成员与Edit box控件(用作口令输入框)建立关联,该变量用来保存用户输入的口令,所以数据类型int。
(5)单击“OK”按钮,返回“MFC Class Wizard”对话框,在“Member Variablee”标签页下部新增的Minimum value、和Maximun value两个项目中分别设置口令的最小值(0)和最大值(9999),单击“OK”按钮。至此,cPasswordDialog类创建完毕,一旦创建了该类的对象后,就可以使用口令对话框了。
2)添加代码
该段代码用来创建口令对话框对象并处理用户的各种交互(例如单击“确认”按钮或“取消”按钮,输入正确的口令或输入不正确的口令,对话框对象所必须进行的处理)。
由于口令输入和验证一般都程序开始时执行,也即该对话框必须在程序窗口出现之前就提前出现,所以必须在应用程序类(CDialogApp)的InitInstance()函数中添加完成上述处理的代码:
BOOL CDialogApp::InitInstance()
{
……
pMainFrame->UpdateWindow();
cPasswordDialog cDlg;//声明CPasswordDialog类的一个对象
    if (cDlg.DoModal ()==IDOK) //用户按下确认按钮
    {
        if (cDlg.m_Password!=1925 ) //口令为整数1925
        { //如果口令不对,则显示出错信息,然后程序结束
            AfxMessageBox("口令错误,确定后将退出程序。");
            return FALSE;
        }
    } 
    else //如果按下取消按钮,程序也将结束
        return FALSE;
    return TRUE;
}
具体操作步骤如下:
(1)    在工作区的Class View标签中选中Dialog|CDiaologApp|InitInstance()函数并双击左键,客户区中显示InitInstance()函数的代码;
(2)    在InitInstance()函数中增加新的代码;

(3)    在文件Dialog.cpp的头部加入下面的命令行:
#include “cPasswordDialog.h”
   可以直接打开Dialog.cpp文件进行添加,也可以双击Globals中的The App,即可打开Dialog.cpp文件。
4. 编译、链接Dialog项目(Build Dialog)。
5. 运行Dialog项目。
二、消息对话框
1.消息对话框的作用
    消息对话框用来向用户显示一些询问和选择、警告和错误提示等信息,也可以在程序调试时,显示变量的值。
消息对话框上的主要控件:欲显示的信息内容(字符串)、图标、按纽。
2.创建消息对话框的函数
通过调用AfxMessageBox()函数或MessageBox()函数都可以创建消息对话框。
例如函数:
AfxMessageBox("您确实要取消吗?",MB_ICONQUESTION+MB_YESNO+MB_DEFBUTTON2)
被调用后,将显示如下的对话框:
 


CDialogApp::InitInstance()函数加入该对话框的显示和处理后的代码如下:
BOOL CDialogApp::InitInstance()
{
……
pMainFrame->UpdateWindow();
cPasswordDialog cDlg;//声明CPasswordDialog类的一个对象
    while (1)
{
        if (cDlg.DoModal ()==IDOK) //用户按下确认按钮
        {
            if (cDlg.m_Password!=1925 ) //口令为整数1925
            { //如果口令不对,则显示出错信息,然后程序结束
             AfxMessageBox("口令错误,确定后将退出程序。");
                return FALSE;
            }
            else
                break;
        } 
        else //如果按下取消按钮,程序也将结束
        {
            if(AfxMessageBox("您确实要取消吗?",MB_ICONQUESTION+MB_YESNO+MB_DEFBUTTON2)==IDYES)
               return FALSE;
        }
    }
    return TRUE;
}
3.AfxMessageBox函数简介
1)原型
   int_cdecl  AfxMessageBox (
unsigned short *, //指向显示信息字符串的指针(可以直接给出字符串常量)
unsigned int,//消息对话框风格
unsigned int 
}
    消息对话框风格是指其上的图标类型和按钮类型的组合。各种图标类型和按钮类型都用整型符号常量表示,可以使用加法运算符(+)或位或运算符(|)实现组合。例如:
MB_ICONQUESTION+MB_YESNO+MB_DEFBUTTON2
2)图标类型
 


3)按钮类型

4)函数返回值
    如下表所示:

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

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

相关文章

易保全参与起草的两项区块链全国团体标准正式发布

在数字化转型浪潮席卷全球的今天,区块链技术以其去中心化、透明性、不可篡改等独特优势,正逐步成为重塑各行各业信任机制与业务流程的关键力量。 近日,中国通信工业协会正式发布了《区块链服务 基于区块链的去中心化标识符技术要求》与《区块…

IIS安装配置教程图文教程(超详细)

「作者简介」:冬奥会网络安全中国代表队,CSDN Top100,就职奇安信多年,以实战工作为基础对安全知识体系进行总结与归纳,著作适用于快速入门的 《网络安全自学教程》,内容涵盖系统安全、信息收集等12个知识域…

2024年中职大数据实验室建设及大数据实训平台整体解决方案

随着大数据时代的到来,中等职业学校(中职)的大数据实验室建设和实训平台打造成为了培养新一代信息技术人才的重要环节。本方案旨在为2024年中职大数据实验室建设提供一套全面、可行的整体解决方案,旨在培养学生的大数据分析能力、…

Postfix+Dovecot+Roundcube开源邮件系统搭建系列5:Roundcube安装配置(含Nginx+PHP部署配置)

1. PHP安装配置 参考wordpress 6.5.2版本安装记录 中关于PHP安装方法,此处不再详述。 修改php-fpm的启动用户和组为vmail,这一步是和nginx配置相呼应。配置文件/etc/opt/remi/php83/php-fpm.d/www.conf 下面几个配置: user vmail group vm…

【电路笔记】-放大器的输入和输出阻抗

放大器的输入和输出阻抗 文章目录 放大器的输入和输出阻抗1、概述2、输入和输出阻抗的定义3、阻抗的重要性4、阻抗设置5、设置方法6、总结1、概述 从非常简单的角度来看,放大器由一个“盒子”组成,实现输入信号和输出信号之间的放大功能。 输入进入系统和输出离开系统的方式…

数电基础 - 555定时器

目录 一. 简介 二. 工作原理 三. 应用场景 四. 结成施密特触发器 五. 结成单稳态触发器 六. 结成多携振荡器 七. 优缺点 一. 简介 555 定时器是一种集成电路芯片,在电子电路中应用广泛。 它包含两个比较器、一个基本 RS 触发器、一个放电三极管以及分压器等…

Leetcode二分搜索法浅析

文章目录 1.二分搜索法1.1什么是二分搜索法?1.2解法思路 1.二分搜索法 题目原文: 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返…

【BUG】已解决:raise KeyError(key) from err KeyError: (‘name‘, ‘age‘)

已解决:raise KeyError(key) from err KeyError: (‘name‘, ‘age‘) 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰,211科班出身,就职于医疗科技公司,热衷分享知识&#xf…

“社群+”生态下的开源AI智能名片源码:驱动商业与社会连接的新引擎

摘要:在“社群”生态日益成为主流趋势的今天,开源AI智能名片源码作为技术创新与社群运营的深度融合体,正逐步展现出其重塑商业格局、深化社会连接的巨大潜力。本文旨在深入探讨开源AI智能名片源码的技术特性、在“社群”生态中的具体应用、对…

VisualRules-Web案例展示(一)

VisualRules单机版以其卓越的功能深受用户喜爱。现在,我们进一步推出了VisualRules-Web在线版本,让您无需安装任何软件,即可在任何浏览器中轻松体验VisualRules的强大功能。无论是数据分析、规则管理还是自动化决策,VisualRules-W…

【D3.js in Action 3 精译_016】第二章 DOM 的操作方法

当前内容所在位置 第一部分 D3.js 基础知识 第一章 D3.js 简介(已完结) 1.1 何为 D3.js?1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践(上)1.3 数据可视化最佳实践(下)1.4 本章小结 第二章…

数据结构(Java):优先级队列(堆)堆的模拟实现

目录 1、优先级队列 1.1 概念 1.2 PriorityQueue底层结构 2、 堆 2.1 堆的概念 2.2 堆的存储结构 3、优先级队列(堆)的模拟实现 3.1 堆的创建 3.1.1 向下调整算法建完整堆 3.2 堆的插入 3.2.1 向上调整算法 3.3 堆的删除 3.4 堆排序 1、优先…

51单片机嵌入式开发:12、STC89C52RC 红外解码数码管显示

STC89C52RC 红外解码数码管显示 1 概述2 HX1838原理2.1 原理概述2.2 原理概述 3 HX1838代码实现3.1 工程整理3.2 工程代码3.3 演示 4 HX1838总结 1 概述 HX1838是一种常见的红外接收模块,用于接收和解码红外遥控器发送的红外信号。 HX1838具有以下特点和功能&#…

二、BIO、NIO、直接内存与零拷贝

一、网络通信编程基础 1、Socket Socket是应用层与TCP/IP协议族通信的中间软件抽象层,是一组接口,由操作系统提供; Socket将复杂的TCP/IP协议处理和通信缓存管理都隐藏在接口后面,对用户来说就是使用简单的接口进行网络应用编程…

HarmonyOS根据官网写案列~ArkTs从简单地页面开始

Entry Component struct Index {State message: string 快速入门;build() {Column() {Text(this.message).fontSize(24).fontWeight(700).width(100%).textAlign(TextAlign.Start).padding({ left: 16 }).fontFamily(HarmonyHeiTi-Bold).lineHeight(33)Scroll() {Column() {Ba…

使用Docker 实现 MySQL 循环复制(三)

系列文章 使用Docker 实现 MySQL 循环复制(一) 使用Docker 实现 MySQL 循环复制(二) 目录 系列文章1. 在主机上安装MySQL客户端2. 配置循环复制拓扑2.1 进入容器2.2 创建复制用户并授予复制权限2.3 复位二进制日志2.4 配置环形复…

信息安全工程师题

物理隔离技术要求两台物理机物理上并不直连,只能进行间接的信息交换。所以防火墙不能实现网络的物理隔离Web应用防火墙可以防止SQL注入、xss攻击、恶意文件上传、远程命令执行、文件包含、恶意扫描拦截等;可以发现并拦截恶意的Web代码;可防止…

详解MLOps,从Jupyter开发到生产部署

大家好,Jupyter notebook 是机器学习的便捷工具,但在应用部署方面存在局限。为了提升其可扩展性和稳定性,需结合DevOps和MLOps技术。通过自动化的持续集成和持续交付流程,可将AI应用高效部署至HuggingFace平台。 本文将介绍MLOps…

色彩与故乡的对话 —— 钱华个人油画展正式开展

色彩与故乡的对话 —— 钱华个人油画展正式开展 2024年7月17日 ,在宁波这座历史与现代交织的城市里,艺术与文化的碰撞再次绽放出耀眼的光芒。由宁波海曙区美术家协会主办,宁波市海纳广场开发经营有限公司协办的“色彩与故乡的对话——钱华个人…

HDLC(高级数据链路控制协议)的定义、数据结构、状态检测、基本配置、特点及限制

一、HDLC的定义 HDLC是一种面向比特的对用同步串行数字链路封装协议。 面向比特:对于任何比特流,HDLC都可以实现透明的传输; 同步串行:应用于同步串行线路; 应用于接口:在同步模式下的Serial接口和pos接口; 只支持点到点链路,通过keepalive报文来检测链路状态。 …