要把一个对话框添加到Visual C++ Developer Studio会有的应用程序上,可以先从Insert菜单中选择Resource,然后选择Dialog Box。现在一个对话框出现在您的眼前,该对话框带有标题列、标题(Dialog)以及OK和Cancel按钮。Controls工具列允许您在对话框中插入不同的控件。

Developer Studio将对话框的ID设为标准的IDD_DIALOG1。您可以在此名称上(或者在对话框本身)单击右键,然后从菜单中选择Properties。在本程序中,将ID改为「AboutBox」(带有引号)。为了与我建立的对话框保持一致,请将X Pos和Y Pos字段改为32。这表示对话框相对于程序窗口显示区域左上角的显示位置待会会有关于对话框坐标的详细讨论)。

现在,继续在Properties对话框中选择Styles页面标签。因为此对话框没有标题列,所以不要选取Title Bar复选框。然后请单击Properties对话框的关闭按钮。

现在可以设计对话框了。因为不需要Cancel按钮,所以先单击该按钮,然后按下键盘上的Delete键。接着单击OK按钮,将其移动到对话框的底部。在Developer Studio窗口下面的工具列上有一个小位图,它可使控件在窗口内水平居中对齐,请按下此钮。

如果您要让程序的图标出现在对话框中,可以这样做:先在浮动的Controls工具列中按下「Pictures」按钮。将鼠标移动到对话框的表面,按下左键,然后拉出一个矩形。这就是图标将出现的位置。然后在次矩形上按下鼠标右键,从菜单中选择Properties。保持ID为IDC_STATIC。此标识符在RESOURCE.H中定义为-1,用于程序中不使用的所有ID。将Type改为Icon。您可以在Image字段输入程序图标的名称,或者,如果您已经建立了一个图示,那么您也可以从下拉式清单方块中选择一个名称(About1)。

对于对话框中的三个静态字符串,可以从Controls工具列中选择Static Text,然后确定文字在对话框中的位置。右键单击控件,然后从菜单中选择Properties。在Properties框的Caption字段中输入要显示的文字。选择Styles页面标签,从Align Text字段选择Center。

在添加这些字符串的时候,若希望对话框可以更大一些,请先选中对话框,然后拖曳边框。您也可以选择并缩放控件。通常用键盘上的光标移动键完成此操作会更容易些。箭头键本身移动控件,按下Shift键后按箭头键,可以改变控件的大小。所选控件的坐标和大小显示在Developer Studio窗口的右下角。

如果您建立了一个应用程序,那么以后在查看资源描述档ABOUT1.RC时,您将发现Developer Studio建立的模板。我所设计的对话框模板如下:

ABOUTBOX DIALOG DISCARDABLE 32, 32, 180, 100

STYLE DS_MODALFRAME | WS_POPUP

FONT 8, "MS Sans Serif"

BEGIN

DEFPUSHBUTTON "OK",IDOK,66,80,50,14

ICON "ABOUT1",IDC_STATIC,7,7,21,20

CTEXT "About1",IDC_STATIC,40,12,100,8

CTEXT "About Box Demo Program",IDC_STATIC,7,40,166,8

CTEXT "(c) Charles Petzold, 1998",IDC_STATIC,7,52,166,8

END

第一行给出了对话框的名称(这里为ABOUTBOX)。如同其它资源,您也可以使用数字作为对话框的名称。名称后面是关键词DIALOG和DISCARDABLE以及四个数字。前两个数字是对话框左上角的x、y坐标,该坐标在程序呼叫对话框时,是相对于父窗口显示区域的。后两个数字是对话框的宽度和高度。

这些坐标和大小的单位都不是图素。它们实际上依据一种特殊的坐标系统,该系统只用于对话框模板。数字依据对话框使用字体的大小而定(这里是8点的MS Sans Serif字体):x坐标和宽度的单位是字符平均宽度的1/4;y坐标和高度的单位是字符高度的1/8。因此,对这个对话框来说,对话框左上角距离主窗口显示区域的左边是5个字符,距离顶边是2-1/2个字符。对话框本身宽40个字符,高10个字符。

这样的坐标系使得程序写作者可以使用坐标和大小来大致勾勒对话框的尺寸和外观,而不管视讯显示器的分辨率是多少。由于系统字体字符的高度大致为其宽度的两倍,所以,x轴和y轴的量度差不多相等。

模板中的STYLE叙述类似于CreateWindow呼叫中的style字段。对于模态对话框,通常使用WS_POPUP和DS_MODALFRAME,我们将在稍后介绍其它的选项。

在BEGIN和END叙述(或者是左右大括号,手工设计对话框模板时,您可能会使用)之间,定义出现在对话框中的子窗口控件。这个对话框使用了三种型态的子窗口控件,它们分别是DEFPUSHBUTTON(内定按键)、ICON(图标)和CTEXT(文字居中)。这些叙述的格式为:

control-type "text" id, xPos, yPos, xWidth, yHeight, iStyle

其中,后面的iStyle项是可选的,它使用Windows表头文件中定义的标识符来指定其它窗口样式。

DEFPUSHBUTTON、ICON和CTEXT等标识符只可以在对话框中使用,它们是某种特定窗口类别和窗口样式的缩写。例如,CTEXT指示这个子窗口控件类别是「静态的」,其样式为:

WS_CHILD | SS_CENTER | WS_VISIBLE | WS_GROUP

虽然前面没有出现过WS_GROUP标识符,但是在第九章的COLORS1程序中已经出现过WS_CHILD、SS_CENTER和WS_VISIBLE窗口样式,我们在建立静态子窗口文字控件时已经用到了它们。

对于图标,文字字段是程序的图标资源名称,它也在ABOUT1资源描述档中定义。对于按键,文字字段是出现在按键里的文字,这个文字相同于在程序中建立子窗口控件时呼叫CreateWindow所指定的第二个参数。

id字段是子窗口在向其父窗口发送消息(通常为WM_COMMMAND消息)时用来标示它自身的值。这些子窗口控件的父窗口就是对话框本身,它将这些消息发送给Windows的一个窗口消息处理程序。不过,这个窗口消息处理程序也将这些消息发送给您在程序中给出的对话框程序。ID值相同于我们在第九章建立子窗口时,在CreateWindow函数中使用的子窗口ID。由于文字和图标控件不向父窗口回送消息,所以这些值被设定为IDC_STATIC,它在RESOURCE.H中定义为-1。按键的ID值为IDOK,它在WINUSER.H中定义为1。

接下来的四个数字设定子窗口的位置(相对于对话框显示区域的左上角)和大小,它们是以系统字体平均宽度的1/4和平均高度的1/8为单位来表示的。对于ICON叙述,宽度和高度将被忽略。

对话框模板中的DEFPUSHBUTTON叙述,除了包含DEFPUSHBUTTON关键词所隐含的窗口样式,还包含窗口样式WS_GROUP。稍后讨论该程序的第二个版本ABOUT2时,还会详细说明WS_GROUP(以及相关的WS_TABSTOP样式)。

c语言中未定义标识符IDD,一、Windows对话框—对话框及其模板相关推荐

  1. c语言中未定义标识符,未定义标识符

    源自:4-5 C++新特性以及输入输出演示 未定义标识符 代码: #include "iostream" #include "stdlib.h" #includ ...

  2. VS中未定义标识符cout,endl

    VS中未定义标识符 vs2017中显示未定义标识符cout,endl. 一种方法是:先看有没有包含输入输出流#include<iostream>,以及命名空间using namespace ...

  3. C++中未定义标识符ULONG,UINT的报错解决方法 VS2019

    C++中未定义标识符ULONG,UINT的报错解决方法 VS2019 在使用VS 2019中 ulong,uint出现报错情况,如下图: 解决方法如下: 1.加入头文件#include <wty ...

  4. opencv4中未定义标识符CV_CAP_PROP_FPS;CV_CAP_PROP_FRAME_COUNT;CV_CAP_PROP_POS_FRAMES问题

    opencv4中未定义标识符CV_CAP_PROP_FPS;CV_CAP_PROP_FRAME_COUNT;CV_CAP_PROP_POS_FRAMES问题 这次的问题是想要读取一段视频,但是在编写代 ...

  5. c语言ok未定义标识符,C语言中宏的相关知识 - osc_y7ckpzr9的个人空间 - OSCHINA - 中文开源技术交流社区...

    2019/04/27 16:02 1.宏的定义:宏定义就是预处理命令的一种,它允许用一个标识符来表示一个字符串.格式如下: #define name(宏名) stuff(字符串) 本质就是使用宏名去替 ...

  6. c语言ofstream未定义标识符,关于c++:c中ifstream及ofstream超详细说明

    前文说过,ifstream是继承于istream,ofstream是继承于ostream,fstream是继承于iostream类,而他们应用的缓冲区类是filebuf. 对于这些类之间的关系,有趣味 ...

  7. c语言ofstream未定义标识符,C++ 标准文件的写入读出(ifstream,ofstream)

    注: "< ">>", 析取器,从流输出数据, ifstream和ofstream主要包含在头文件中. fstream可对打开的文件进行读写操作 ifs ...

  8. 解决VS中未定义标识符cout,endl

    参考大神指路: 问题判断 我的是第二个错误 解决方案

  9. OpenCV学习中cvtColor与cvCvtColor的区别,及未定义标识符问题解决

    一.cvCvtColor cvCvtColo为C语言风格接口 - void cvCvtColor(const CvArr src, CvArr* dst, int code)** CvMat是C中的一 ...

最新文章

  1. one trick pony
  2. python 抠图 锯齿_Python | 绘图中的抗锯齿
  3. c语言程序设计编程解读,【答题】C语言程序设计问题与解释实验
  4. 商汤3DAR团队-3D视觉组招聘
  5. 华为透露中国首个开源基金会将于近期正式运营!
  6. jQuery cxSlide 焦点图轮换
  7. setwindowpos怎么改变z序_Windows转Mac——操作习惯的改变!
  8. 关于虚函数重载遇到的怪问题 -- 为什么经常调用了基类的函数
  9. 十进制转换成二进制java_计算机为什么采用二进制?
  10. 杭电数据结构课程实践-哈密顿图的判断
  11. php分组统计求和,数据需求统计常用shell命令---AWK分组求和,分组统计次数
  12. ISA防火墙的策略配置和应用
  13. 免费在线绘制CircRNA吸附miRNA圈图
  14. 思科实验-生成树协议STP
  15. 数学定理【转自百度百科】
  16. 【对讲机的那点事】对讲机电池、充电器使用说明须知
  17. HEVC 参考帧管理(RPS)
  18. 关于Android写入文件失败的问题
  19. logistic回归的一些直观理解(1.连接函数 logit probit)
  20. 问题:The ABAP program lines are wider than the internal table.

热门文章

  1. .NET笔记系列:LAMBDA表达式常用写法
  2. QQ浏览器使用infinity新标签
  3. BCG 使用之CBCGPTabWnd控件(相当于MFC TabControl)
  4. Android 沉浸式状态栏 一体化状态栏实现
  5. 《Essential Linux Device Drivers》中文版第1章
  6. 花费多少钱能创建百度百科词条?
  7. 如何为几乎所有电话添加无线充电
  8. 电瓶车续航测试软件,寻找真实续航英雄!7款纯电动车续航测试
  9. GPU硬件加速的那些优秀的资源总结-续
  10. 通过PS把荒野草地变成大雪纷飞的雪景