vc入门宝典五(对话框)
对话框
主要内容:
1, 建立有模式对话框和无模式对话框
2, 控件的对齐及焦点设置
3, 实例
4, 通用对话框
5, 常用函数
对话框可按其动作模式分为“有模式”和“无模式”两大类。对于有模式对话框,在对话框被关闭之前,用户无法进行其它工作。而无模式的对话框,而它仍然保留在屏幕上的同时,用户可以在应用程序的其它窗口进行工作。
建立一个基于对话框的程序Dialog.
在资源管理器中插入一个对话框,Ctrl+w新建一个类COwnerDiaog;在IDD_DIALOG_DIALOG中加一个按钮,双击它编辑代码。
void CDialogDlg::OnButton1()
{
COwnerDialog dlg;
dlg.DoModal();
}
不要忘了#include "OwnerDialog.h"。你不关闭它,无法对主对话框下达命令,但你仍然可以打开其它程序。我们删除刚刚添加的代码。
void CDialogDlg::OnButton1()
{
COwnerDialog *pDlg=new COwnerDialog();
pDlg->Create(IDD_DIALOG1);
pDlg->ShowWindow(SW_RESTORE);
}
这是一个无模式对话框,你可以在处理子对话框之前,对主对话框下达命令。注意如果你关闭了主对话框,则子对话框也被关闭了。
在Layout中有四个功能是十分有用的,Tab Order(快捷键Ctrl+D):依次单击按钮决定它们的焦点顺序。
这样当用户,按Tab键切换焦点时,控件获得焦点的顺序就是我们设定好的。例如一个对话框要我们输入用户名,口今,再按确定。我们将它们的焦点顺序分别设为1,2,3,这样用户输入了用户名,再按Tab,输入口今,回车就可以了。
Layout Align 将选择的控件按某种方式对齐
Layout Space evenly 平均分配选择的控件的间隔
Layout Make same size 使选择的控件大小相同
我们来编一个简单程序,程序随机产生一个x,用户输入y=x*x,的值,程序检查对错,如果错了,还要改正。
生成一个基于对话框的应用程序,去掉”TODO: 在这里设置对话控制”,这个静态控件没什么用。加入两编辑控件(如果控件多的话最好改成一个容易理解的ID),Ctrl+W将两个控件
与两个整形变量m_x,m_y(命名要容易理解)相关联。加一个按钮,ID改为IDC_CHECK,双击它编辑代码。
void CCheckDlg::OnCheck()
{
UpdateData();
if(m_y == m_x * m_x)
MessageBox("你对了");
else
{
m_y = m_x * m_x;
UpdateData(false);
MessageBox("根据结果想想");
}
}
找到构造函数(最好在中OnInitDialog()处理),找到m_x = 0;改成
CTime t=CTime::GetCurrentTime();
int n=t.GetSecond();
for(int i=0;i<n;i++)
m_x = rand()%10;
其实rand并不随机,第一次调用返回值总是相同的,我们可以取当前时间的秒数,来决定调用次数。设置各个控件的Caption,并按上述方法设置焦点,并调整各控件的大小。
控件显示的值与控件相关联的数(成员变量)的值不是同步的,我们必须调用UpDateData();当我们输入了数据,就调用UpdateData(true)来更新成员变量;UpdateData(false)
将成员变量的值显示在屏幕上。CDialog的UpDateData()更新所有的控件,如果只想更新一个控件,可以调用控件类的UpDateData().
通用对话框,经常用的是CColorDialog,CFontDialog,CFileDialog,类似于
CColorDialog dlg;
if(IDOK==dlg.DoModal())
{
…dlg.GetColor();
}
注意CFileDialog dlg(false),表示是另存为对话框,为true表示是打开对话框,第一个参数没有默认值。
常用函数:
CDialog::CloseWindow();最小化对话框。
CDialog::DestroyWindow();关闭对话框,OnOk,OnCancel也可以关闭对话框。
CDialog::GetClientRect();获得客户区范围;
CDialog::GetFocus(); 获得焦点;
CDialog::GetFont() 获得字体;
CDialog::SetWindowText);设置对话框标题;
CDialog::SetMenu(); 设置菜单;
CDialog::SetFocus(); 设置焦点;
CDialog::SetFont(); 设置字体;
有些东西我们无法在构造函数中进行,如SetTimer,我们可以在OnInitDialog()中进行,或者在WM_SHOWWINDOW的响应函数中进行。
ShowWindow(SW_HIDE);它的参数还可以是:
- SW_HIDE SW_MINIMIZE SW_RESTORE SW_SHOWMAXIMIZED SW_SHOWMINIMIZED SW_SHOWMINNOACTIVE SW_SHOWNA SW_SHOWNOACTIVATE SW_SHOWNORMAL
vc入门宝典五(对话框)的更多相关文章
- VC学习笔记:对话框
VC学习笔记:对话框 SkySeraph NOV.11st 2009 HQU Email-zgzhaobo@gmail.com QQ-452728574 Latest Modified Date:O ...
- 数据治理之元数据管理的利器——Atlas入门宝典
随着数字化转型的工作推进,数据治理的工作已经被越来越多的公司提上了日程.作为Hadoop生态最紧密的元数据管理与发现工具,Atlas在其中扮演着重要的位置.但是其官方文档不是很丰富,也不够详细.所以整 ...
- 无废话ExtJs 入门教程五[文本框:TextField]
无废话ExtJs 入门教程五[文本框:TextField] extjs技术交流,欢迎加群(201926085) 继上一节内容,我们在表单里加了个两个文本框.如下所示代码区的第42行位置,items: ...
- Jqgrid入门-使用模态对话框编辑表格数据(三)
Jqgrid是一个强大的表格插件,它提供了多种方式来编辑数据.这三种方式分别是: Cell Editing——只允许修改某一个单元格内容 Inline Editing——允许在jqGr ...
- 【SSRS】入门篇(五) -- 设置报表格式
原文:[SSRS]入门篇(五) -- 设置报表格式 在上一节 [SSRS]入门篇(四) -- 向报表添加数据 我们设置好了报表,并可以预览到数据,如下图: 当报表完成后,有个重要的工作就是美化报表格式 ...
- Bootstrap入门(五)表单
Bootstrap入门(五)表单 先引入本地的CSS文件 <link href="css/bootstrap.min.css" rel="stylesheet ...
- Swift入门(五)——数组(Array)
集合 集合的定义 Swift中提供了两种数据结构用于存放数据的集合,各自是数组(Array)和字典(Dictionary). 他们的主要差别在于数组中的元素由下标确定.而字典中的数据的值由数据的键(K ...
- Docker 入门 第五部分:Stacks
目录 Docker 入门 第五部分:Stacks 先决条件 介绍 添加一个新的服务并重新部署 保存数据 回顾 Docker 入门 第五部分:Stacks 先决条件 安装 Docker 1.13 或更高 ...
- MyBatis基础入门《五》核心配置文件
MyBatis基础入门<五>核心配置文件 描述: 在前面的章节中,简单的学习使用了一下mybatis,对于配置文件没有过多详细说明. 这里先描述项目中的一个核心配置文件:mybatis-c ...
- ElasticSearch入门 第五篇:使用C#查询文档
这是ElasticSearch 2.4 版本系列的第五篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...
随机推荐
- 神奇的LLVM与llvmlite之JIT编译。
https://releases.llvm.org/11.0.0/docs/LangRef.html llvmlite Documentation, Release 0.41.0dev0-64-gbb ...
- Probability•概率的公理化定义•确定概率的方法{频率, 古典, 几何, 主观}•Joseph Louis Bertrand贝特朗奇多解论源于概率建模及其样本空间可有多种假设
Probability 概率的公理化定义 非负性 正则性 互不相容的可列可加性 确定概率的方法(一审题,二确定样本空间&Omega, 三确定事件集合, 四求解): 频率 抛硬币正面朝上次数: ...
- 【汇编】求100以内的素数asm
求100以内的素数(微机原理大作业) 一.问题描述 求 100 以内的素数. (1)以十进制输出这些素数 (2)统计这些素数的个数,以十进制形式输出. (3)计算这些素数之和,以十进制形式输出. (4 ...
- uniapp微信分享功能
/* //#ifdef H5 const url = encodeURIComponent(window.location.href.split('#')[0]); let params = 'url ...
- Browser-Use在UI自动化测试中的应用
一. Browser-Use简介 Browser-Use是一个开源可以操控浏览器的Python库,使用者能够通过LLM与浏览器自动化操作结合起来.这个库支持自然语言描述自动化测试任务或者定义AI ...
- 【攻防世界】normal_png
1. 首先下载附件,解压出来之后得到的是一个png图片,看上去应该是9:16比例,但感觉长度又不够. 2. 于是查看了一下它的属性,宽高比是620:875.但是按照9:16计算,宽620的话,高应该是 ...
- 利用Multisim设计WCF架构电子管耳放-第二部分
第二部分 选择输出管的工作点,并进行仿真 由于耳放在最大60mw,120欧负载情况下的输出电压峰-峰值有7.59V,交流电流的峰-峰值有63.25mA,假设上下每个管子输出一半,那么每个管子的有效负载 ...
- MyEMS开源能源管理系统 + EG200 4G网关
MyEMS EG200 4G网关是面向能源管理系统而推出的4G网关,支持全网通4G LTE网络,具有高性价比.强适应的特点. MyEMS EG200 4G网关具有1路RS232.1路RS485接口,向 ...
- DeepSeek采用的UE8M0 FP8 为什么引爆了A股的芯片板块
DeepSeek 这次的重点不在模型 V3.1,而是在DeepSeek在其官宣发布DeepSeek-V3.1的文章中提到,DeepSeek-V3.1使用了UE8MO FP8 Scale的参数精度.另外 ...
- Nacos2.0启动遇到的问题以及解决方法(自测有效)
https://blog.csdn.net/qq_42696265/article/details/115715821 1.安装启动nacos时Please set the JAVA_HOME var ...