对话框其实就是窗口.对话框与普通的窗口的区別在于系统为对话框作了一些额外的处理工作,比如创建并初始化控件,并处理tab 顺序.几乎所有用于普通窗口的API 函数 都可以用于对话框.
创建对话框资源. 对于任何的资源而言如何处理它们都与你用的编译器/IDE 相关. 这里我向你展示.rc 文件中的对话框的文本并让你将其整合到你的项目中去.
IDD_ABOUT DIALOG DISCARDABLE
0, 0, 239, 66
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "My About Box"
FONT 9, "
宋体"
BEGIN
DEFPUSHBUTTON
"&OK",IDOK,174,18,50,14
PUSHBUTTON
"&Cancel",IDCANCEL,174,35,50,14
GROUPBOX
"About this program",IDC_STATIC,7,7,225,52
CTEXT
"An example program showing how to use Dialog",
IDC_STATIC,16,18,144,33
END
第一行中,IDD_AGOUTDLG 为资源的标识.DIALOG 是资源的类型,四个数字为左,顶,寛,高 坐标.它们不是像素,而是基于系统的字体(由用戶选择)的大小对话框单位.如果你选择了一个大的字体,对话框就大,如果选择了小点的字体,对话框就相应的小些.这一点很重要,因为要确保所有的控件用当前的字体以 合适的大小显示.你可以用MapDialogRect() 在运行的时候把对话框单位转換为像素.DISCARDABLE 告诉系统在不用此资源的时候将其交換至磁盘以节省系统资源(这是不用说的).
第二行以STYLE 开头然后在后面跟上用来创建此对话框的窗口风格.这 些在你的帮助文档中的关于CreateWindow() 说明中会有解释.为了使用已定义好的那些常 量你需要在你的.rc 文件中加上#include "windows.h" ,或者如果你使用VC++ 的话winres.h ,afxres.h 也可以.如果你使用资源编辑器的话这 些文件则在需要的时候自动被加上去.
CAPTION 那行应该一看就知道是什么意思.
FONT 那行指明了你想用来创建此对话框的字体的大小和名字.因为不同的人有不同的字体并可能指定不同 的字体所以这行在不同的计算机上可能看起来不一样.当然你一般不用为此操心.
现在我们用控件的列表来创建此对话框
DEFPUSHBUTTON
"&OK",IDOK,174,18,50,14
这行指定OK 按扭.这里的& 有点像菜单项的 那个有下划線的那个字母”O” ,所以用戶可 以按下Alt+O 来激活这个控件(这就我上面所提到的对话框所做的默认处理的一部分).IDOK 是控件的标识.IDOK 是己经定义好的,所以我们不需要自己用#define 来定义它了.最 后的四个数字为左,顶,寛,高坐标,都是对话框单位.
有两个控件的标识为IDC_STATIC (就是-1 ),这表明我们永远并不需要去读写它们,所以它们并不 需要一个标识.但是给它们一个标识也沒有什么害处,而 且资源编辑器会自动为你做一点.
靜态控件中的文本中的"/r/n" 是一个CR-LF 对,表 示換一个新行.
至此!把这些加到.rc 文件中去后我们要写一个对话 框的过程来处理这个对话框的消息.不要担心,这 不是什么很新的知识,实际上它跟我们的主窗口的窗口的过程差不多(不是完全一样).