对话框

何志丹

主要内容:

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入门宝典五(对话框)的更多相关文章

  1. VC学习笔记:对话框

    VC学习笔记:对话框 SkySeraph NOV.11st 2009 HQU Email-zgzhaobo@gmail.com  QQ-452728574 Latest Modified Date:O ...

  2. 数据治理之元数据管理的利器——Atlas入门宝典

    随着数字化转型的工作推进,数据治理的工作已经被越来越多的公司提上了日程.作为Hadoop生态最紧密的元数据管理与发现工具,Atlas在其中扮演着重要的位置.但是其官方文档不是很丰富,也不够详细.所以整 ...

  3. 无废话ExtJs 入门教程五[文本框:TextField]

    无废话ExtJs 入门教程五[文本框:TextField] extjs技术交流,欢迎加群(201926085) 继上一节内容,我们在表单里加了个两个文本框.如下所示代码区的第42行位置,items: ...

  4. Jqgrid入门-使用模态对话框编辑表格数据(三)

            Jqgrid是一个强大的表格插件,它提供了多种方式来编辑数据.这三种方式分别是: Cell Editing——只允许修改某一个单元格内容 Inline Editing——允许在jqGr ...

  5. 【SSRS】入门篇(五) -- 设置报表格式

    原文:[SSRS]入门篇(五) -- 设置报表格式 在上一节 [SSRS]入门篇(四) -- 向报表添加数据 我们设置好了报表,并可以预览到数据,如下图: 当报表完成后,有个重要的工作就是美化报表格式 ...

  6. Bootstrap入门(五)表单

    Bootstrap入门(五)表单   先引入本地的CSS文件  <link href="css/bootstrap.min.css" rel="stylesheet ...

  7. Swift入门(五)——数组(Array)

    集合 集合的定义 Swift中提供了两种数据结构用于存放数据的集合,各自是数组(Array)和字典(Dictionary). 他们的主要差别在于数组中的元素由下标确定.而字典中的数据的值由数据的键(K ...

  8. Docker 入门 第五部分:Stacks

    目录 Docker 入门 第五部分:Stacks 先决条件 介绍 添加一个新的服务并重新部署 保存数据 回顾 Docker 入门 第五部分:Stacks 先决条件 安装 Docker 1.13 或更高 ...

  9. MyBatis基础入门《五》核心配置文件

    MyBatis基础入门<五>核心配置文件 描述: 在前面的章节中,简单的学习使用了一下mybatis,对于配置文件没有过多详细说明. 这里先描述项目中的一个核心配置文件:mybatis-c ...

  10. ElasticSearch入门 第五篇:使用C#查询文档

    这是ElasticSearch 2.4 版本系列的第五篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...

随机推荐

  1. OS-Ubuntu-Server-Connect to Wi-Fi using "netplan" From Terminal on Debian 11/10 with WPA Supplicant

    0.netplan: netplan generate netplan apply wget https://dl.google.com/linux/direct/google-chrome-stab ...

  2. SciTech-BigDataAIML-Github-Generating a new GPG key

    Generating a new GPG key Generating a new GPG key If you don't have an existing GPG key, you can gen ...

  3. SpringBoot微服务HTTPS通信实践:Nacos注册与Feign自签名证书配置指南

    前言 最近笔者有个项目需要从单体后端迁移到微服务架构后端,使用的技术栈是springboot + nacos + openfeign.为了确保通信安全,所有服务都启用了https.前期不使用https ...

  4. DRF视图详解:从基础视图到通用视图实践指南

    一.基础视图 (APIView) APIView 是 DRF 中所有视图的基类,继承自 Django 的 View,并添加了 DRF 特有的功能(如认证.权限.限流等). 示例:使用APIView实现 ...

  5. say, won't u say forever stay

    在前端 是春日的问候,是毛线团中的一丝半缕. 2.14 那就这样吧. \(\\\text{}\) 可是,为什么啊? 一次又一次地不相信,却又一次又一次地被迫确信. 可是,明明已经了啊? 读诗: &qu ...

  6. 建筑矿山设备工厂与 MyEMS 能源管理系统深度应用白皮书

    一.建筑矿山设备工厂:全球矿业装备的技术革新引领者 企业沿革与行业定位 作为拥有百年工业基因的跨国集团,建筑矿山设备工厂起源于欧洲压缩空气技术领域,历经百年发展已成为全球采矿与基础设施技术解决方案的头 ...

  7. C# 13 与 .NET 9 跨平台开发实战(第一章:开发环境搭建与.NET概述)

    大家好,我是张飞洪,专注.NET开发十来年.感谢您的阅读,我会不定期分享我的学习心得和职场经验,希望我的文章能成为你成长路上的助力.让我们一起精进,共同进步. 本文是<C# 13 与 .NET ...

  8. Constants.WM

    https://www.pinvoke.net/default.aspx/Constants.WM

  9. 【PostgreSQL 17】2 使用pgAdmin初始化示例表

    启动pgAdmin 从开始菜单启动 pgAdmin 这里默认有一个连接,点击后会让我们设置密码 新建连接 Servers → Register → Server General 因为在数据库服务器就在 ...

  10. kafka数据同步到mysql

    本文分享自天翼云开发者社区<kafka数据同步到mysql>,作者:刘****猛 kafka安装 使用docker-compose进行安装,docker-compose文件如下: vers ...