1.显示消息框
最简单的模式对话框形式是消息框。 使用 信息框 或 消息框 函数创建消息框,指定要显示的消息以及按钮的数量和类型。
系统将创建一个模式对话框,用户关闭消息框后,信息框 或 消息框 将返回一个值,该值标识用户选择用于关闭消息框的按钮。
整数 编号=信息框(0,"中国","你好",[是否取消 + 问号图标]);//弹出一个信息框上面有是、否、取消三个按钮和问号图标
如果(编号=选了是)退出程序判断返回的数值:编号,如果等于选了是,也就是点击了是这个按钮,就退出程序
消息框类 信息(风格=用户图标,实例=$400000,图标=1)消息框类的风格跟信息框的图标样式相同,用户自定义图标要指定实例
32位exe程序的实例可以使用0x400000这个固定的数值,
内置模块有一个“程序.实例”,是一个全局整数变量,可以在其它程序段里使用
消息框类也是一个全局变量,初始化赋值只能使用已知数值或者常量,不能使用变量
信息.标题="标题文字";//在程序段内指定消息框显示的标题文字
信息.内容="内容文字";//在程序段内指定消息框显示的内容文字
整数 编号=消息框(信息)弹出消息框,并返回关闭消息框时点击了哪个按钮
延时框是弹出一个消息框,如果用户没有点击,会在指定时间关闭消息框
整数 编号=延时框(0,"中国","你好",[弹出是否 + 惊叹图标],0,5000);
//弹出一个延时消息框上面有是、否两个按钮和惊叹图标
最后一个参数指定5000毫秒,就会在5秒之后自动关闭消息框
2.模式对话框
整数 编号=资源模态($400000,1,窗体,@对话消息,0);//加载资源里的1号对话框,指定对话消息这个程序段来接收消息
对话消息跟窗体消息的处理过程十分相似,结束模态对话之后,返回值就会赋值给编号的变量,
跟弹出信息框一样,只有关闭对话,才会得到返回值,执行后面的代码
程序段 对话消息(窗口,消息,参数,数据)
判断(消息)为 窗口关闭{结束模态(窗口,0)返回(真)}
为 单击左键{如果(参数=选了确定)
内容=取控件字(窗口,1)
如果(参数=选了取消){
结束模态(窗口,真)返回(真)}}
否则 处理对话(窗口,消息,参数,数据)
结束
3.无模式对话框
整数 对话=资源对话($400000,1,窗体,@对话框消息,0);//加载资源里的1号对话框,指定对话框消息这个程序段来接收消息
桌面.左=对话;//桌面.左是内置模块里用来处理框体消息的全局变量,它可以指定为某个窗口或对话框
窗口程序在创建完窗口和控件后会执行下面这段程序,循环读取系统发来的消息;其中框体消息的第一个参数是"桌面.左"
程序段 读取消息
循环{如果(获取消息(系统,0,0,0)<>0 而且 框体消息(桌面.左,系统)=0)
{翻译消息(系统)分派消息(系统)}}(系统.消息=消息结束)
结束
无模式对话框跟创建窗口一样,执行资源对话函数创建一个对话框,不再等待对话框关闭时得到返回值,直接执行后面的代码
程序段 对话框消息(窗口,消息,参数,数据)
判断(消息)为 窗口关闭{销毁窗口(窗口,0)}
为 单击左键{如果(参数=选了确定)
数值=取控件数(窗口,1)
如果(参数=选了取消)
销毁窗口(窗口)}
否则 处理对话(窗口,消息,参数,数据)
结束
4.在内存中创建模板对话框
应用程序有时会根据正在处理的数据的当前状态来调整或修改对话框的内容。
那就需要在内存中动态生成模板来创建对话框。
在以下示例中,应用程序在内存中为模式对话框创建一个模板,其中包含一条消息以及 “确定” 和“ 帮助” 按钮。
在对话模板中,所有字符串(如对话框和按钮标题)都必须是宽字符串。
整数 模板=申请内存(1024)//申请1K内存用来存储模板数据
模板&=0x80C80080//对话框样式为:弹出窗口+细线边框+标题栏+系统菜单+模式对话
.&4=0x80//扩展样式为矮小标题栏
.%8=3//指定控件为三个
.%10=10;.%12=10//指定对话框左边和顶边距为10
.%14=100;.%16=100//指定对话框宽度和高度为100
.&18=0;.&22=?//菜单和类名为空
到宽字符(936,0,"窗口标题",-1,#@26,12)//把ANSI转成宽字符
.&40=0x50000001;.&44=0//按钮风格为子窗口+可见+默认按钮;扩展样式为0
.%48=10;.%50=70//指定对话框左边距为10;顶边距为70
.%52=80;.%54=20//指定对话框宽度为80,高度为20
.&56=1//指定按钮为确定按钮
.&58=0xFFFF//指定为附加元素,控件为系统定义的类
.&62=0x0080//系统定义的按钮类
传送内存(#@66,"`确定",6)//复制宽字符文字
.&72=0//没有创建数据
.&76=0x50000000;.&80=0//按钮风格为子窗口+可见;扩展样式为0
.%84=55;.%86=10//指定对话框左边距为55;顶边距为10
.%88=40;.%90=20//指定对话框宽度为40,高度为20
.&92=150//指定按钮为帮助按钮标识符
.&94=0xFFFF//指定为附加元素,控件为系统定义的类
.&98=0x0080//系统定义的按钮类
传送内存(#@102,"`帮助",6)//复制宽字符文字
.&108=0//没有创建数据
.&112=0x50000000;.&116=0//按钮风格为子窗口+可见;扩展样式为0
.%120=55;.%122=10//指定对话框左边距为55;顶边距为10
.%124=40;.%126=20//指定对话框宽度为40,高度为20
.&128=200//指定按钮为静态文本标识符
.&130=0xFFFF//指定为附加元素,控件为系统定义的类
.&134=0x0082//系统定义的静态类
传送内存(#@138,"`显示文字",10)//复制宽字符文字
.&148=0//没有创建数据
模态对话($400000,模板,窗口,@对话框消息,0) //创建模式对话框
释放内存(模板)//没有创建数据
模式对话框-user32库函数
中文名称 | 英文名称 | 示例 | 作用 |
资源对话 | CreateDialogParamA | 资源对话(实例,模板,窗口,@回调,数据) | 从对话框模板资源创建一个无模式对话框。 |
创建对话 | CreateDialogIndirectParamA | 创建对话(实例,模板,窗口,@回调,数据) | 从对话框模板创建一个无模式对话框。 |
资源模态 | DialogBoxParamA | 资源模态(实例,模板,窗口,@回调,数据) | 从对话框模板资源创建一个模态对话框。 |
模态对话 | DialogBoxIndirectParamA | 模态对话(实例,模板,窗口,@回调,数据) | 从对话框模板创建一个模态对话框。 |
处理对话 | DefDlgProcA | 处理对话(对话,消息,参数,数据) | 为程序定义的对话框类的窗口过程提供缺省的消息处理 |
结束模态 | EndDialog | 结束模态(窗口,真) | 结束模态对话框 |
字符宽高 | GetDialogBaseUnits | 宽高=字符宽高 | 检索系统的对话框基本单位,即系统字体中字符的平均宽度和高度。 |
控件标识 | GetDlgCtrlID | 标识=控件标识(控件) | 返回指定控件的标识符。 |
获取控件 | GetDlgItem | 控件=获取控件(窗口,标识) | 通过标识获取窗体上的子窗控件 |
取控件数 | GetDlgItemInt | 数=取控件数(窗口,标识,@成功,符号) | 获取对话框控件的标题文本,并转换为数字,符号为真包含负数 |
改控件数 | SetDlgItemInt | 改控件数(窗口,标识,数值,符号) | 用指定数值修改对话框控件的标题文本(数字自动转文本),符号为假不检查"-"符号 |
取控件字 | GetDlgItemTextA | 取控件字(窗口,标识,内容,长度) | 获取对话框控件的文本和标题 |
改控件字 | SetDlgItemTextA | 改控件字(窗口,标识,内容) | 修改对话框控件的文本和标题 |
前后控件 | GetNextDlgGroupItem | 前后控件(窗口,起始,向前) | 检索对话框中指定起始控件之前或后一个控件的句柄。向前为假是向后 |
前后切换 | GetNextDlgTabItem | 前后切换(窗口,起始,向前) | 检索对话框中指定起始控件之前或后一个具有WS_TABSTOP样式控件的句柄。向前为假是向后 |
框体消息 | IsDialogMessageA | 框体消息(窗口,消息) | 确定消息是否针对指定的对话框,如果是,则处理消息。 |
转换像素 | MapDialogRect | 转换像素(窗口,矩形) | 将指定的对话框单位转换为屏幕单位(像素)。将指定矩形中的坐标替换为转换后的屏幕单位 |
按钮字符 | MB_GetString | 按钮字符(标识) | 返回标准消息框按钮的字符串。 |
信息框 | MessageBoxA | 信息框(窗口,内容,标题,样式) | 弹出一个消息框,样式通过数字控制 |
消息框 | MessageBoxIndirectA | 消息框(消息框类) | 弹出一个消息框,样式通过消息类结构控制 |
延时框 | MessageBoxTimeoutA | 延时框(0,内容,标题,样式,0,毫秒) | 弹出一个消息框,超过设定时间未点击则自动关闭 |
控件消息 | SendDlgItemMessageA | 控件消息(窗口,控件,消息,参数,数据) | 在对话框中向指定的控件发送消息。 |
模式对话框——回调函数
中文名称 | 英文名称 | 示例 | 作用 |
对话回调 | Dlgproc | 对话回调(窗口,消息,参数,数据) | 处理发送到模式或无模式对话框的消息。 |
消息回调 | Msgboxcallback | 消息回调(帮助类) | 处理发送到模式或无模式对话框的消息。 |
模式对话框——通知消息
中文名字 | 常量 | 英文名称 | 作用解释 |
切换焦点 | $0028 | WM_NEXTDLGCTL | 发送本消息给一个对话框程序窗口过程,以便在各控件间设置键盘焦点位置。③参数:0下个控件,非0上个控件;④数据:0参数为方向,非0参数为控件对象 |
切换控件 | $0087 | WM_GETDLGCODE | 发送本消息给某个与对话框程序关联的控件,系统控制方位键和TAB键使输入进入该控件。③参数:键码;④数据:消息类 |
窗口初始 | $0110 | WM_INITDIALOG | 在某对话框程序被显示前发送本消息给该对话框程序,通常用本消息对控件进行一些初始化工作和执行其它任务。③参数:控件;④数据:其它 |
模框空载 | $0121 | WM_ENTERIDLE | 当一个模态对话框或菜单进入空闲状态时,发送本消息给它的所有者,就是在处理完先前的消息后,消息队列为空时。③参数:0对话框,2菜单;④数据:窗口对象 |
绘制对话 | $0136 | WM_CTLCOLORDLG | 绘制对话框的背景色③参数:设备;④数据:控件 |
模式对话框——发送消息
中文名字 | 常量 | 英文名称 | 作用解释 |
对话取号 | 0x400 | DM_GETDEFID | 检索对话框的默认按钮控件的标识符。③参数:0;④数据:0 |
对话改号 | 0x401 | DM_SETDEFID | 更改对话框的默认按钮的标识符。③参数:标识符;④数据:0 |
对话定位 | 0x402 | DM_GETDEFID | 重新定位顶级对话框,使其适合桌面区域。③参数:0;④数据:0 |
中文名字 | 英文名称 | 长度 | 作用解释 |
消息框类 | MSGBOXPARAMS | 40 | 包含有显示一个消息(对话框信息)的数据结构。 |
消息框类——成员表 |
长度 | cbSize | 整数 | 这个结构的大小,以字节计算。 |
窗口 | hwndOwner | 整数 | 对话框所有者窗口的句柄。 |
实例 | hInstance | 整数 | 对话框所有者实例的句柄 |
内容 | lpszText | 整数 | 包含着消息要显示的内容。 |
标题 | lpszCaption | 整数 | 包含着消息的标题,默认用“错误”作为标题。 |
风格 | dwStyle | 整数 | 设置对话框的内容和行为。 |
图标 | lpszIcon | 整数 | 图标资源的ID。字符串或数字 |
帮助 | dwContextHelpId | 整数 | 帮助内容的ID。如果一个Help事件发生,这个值在消息框发送到所有者窗口或回调函数 |
回调 | lpfnMsgBoxCallback | 整数 | 一个处理消息框帮助信息的回调函数的指针。 |
语言 | dwLanguageId | 整数 | 包含在原先定义的按钮中的文本的语言。中文4,英文9。默认是根据系统的语言 |
中文名字 | 英文名称 | 长度 | 作用解释 |
对话框类 | DLGTEMPLATE | 18 | 定义对话框的尺寸和样式。始终是对话框的标准模板中的第一个结构,还指定对话框中的控件数 |
对话框类 成员表 |
中文 | 英文 | 类型 | 作用解释 |
风格 | style | 整数 | 对话框的样式。是窗口样式值和对话框样式值的组合 |
扩展 | dwExtendedStyle | 整数 | 窗口的扩展样式。不用于创建对话框,而用它来创建其他类型的窗口。 |
项目 | cdit | 整形 | 对话框中的项数。 |
左 | x | 整形 | 对话框左上角的 x 坐标 |
顶 | y | 整形 | 对话框左上角的 y 坐标 |
宽 | cx | 整形 | 对话框的宽度。 |
高 | cy | 整形 | 对话框的高度 |
中文名字 | 英文名称 | 长度 | 作用解释 |
对话项类 | DLGITEMTEMPLATE | 18 | 定义对话框中控件的尺寸和样式。一个或多个结构与对话框类组合在一起,形成对话框的标准模板。 |
对话项类 成员表 |
中文 | 英文 | 类型 | 作用解释 |
风格 | style | 整数 | 对话框的样式。是窗口样式值和对话框样式值的组合 |
扩展 | dwExtendedStyle | 整数 | 窗口的扩展样式。不用于创建对话框,而用它来创建其他类型的窗口。 |
左 | x | 整形 | 对话框左上角的 x 坐标 |
顶 | y | 整形 | 对话框左上角的 y 坐标 |
宽 | cx | 整形 | 对话框的宽度。 |
高 | cy | 整形 | 对话框的高度 |
标识 | id | 整形 | 控件标识符编号。 |
中文名字 | 英文名称 | 数值 | 作用解释 |
绝对坐标 | DS_ABSALIGN | 1 | 指示对话框的坐标是屏幕坐标。 如果未指定此样式,则坐标为客户端坐标。 |
对话置顶 | DS_SYSMODAL | 2 | 此样式已过时。创建具有 WS_EX_TOPMOST样式的 对话框。 此样式不会阻止用户访问桌面上的其他窗口。 |
三维外观 | DS_3DLOOK | 4 | 已过时。 系统会自动将三维外观应用于应用程序创建的对话框。 |
兼容字体 | DS_FIXEDSYS | 8 | 使对话框使用16位DOS系统兼容的单空间字体。Windows3.0 以下。 |
忽略错误 | DS_NOFAILCREATE | 0x10 | 创建对话框,即使发生错误,例如,如果无法创建子窗口或系统无法为编辑控件创建特殊数据段。 |
数据内存 | DS_LOCALEDIT | 0x20 | 用于16位程序。对话框中的编辑控件从应用程序的数据段分配内存。 |
对话字体 | DS_SETFONT | 0x40 | 指示对话框模板的标题和控件中的文本的字体数据。 |
系统字体 | DS_SHELLFONT | 0x48 | 指示对话框应使用系统字体。扩展对话框模板的 字样 成员必须设置为 MS Shell Dlg。 |
模式对话 | DS_MODALFRAME | 0x80 | 使用模式对话框框架创建一个对话框,该框可通过指定标题栏和窗口菜单结合使用。 |
不显空载 | DS_NOIDLEMSG | 0x100 | 禁止显示 模框空载 消息,否则系统将在显示对话框时发送给对话框所有者的消息。 |
对话前台 | DS_SETFOREGROUND | 0x200 | 将对话框引入前台。无论所有者窗口是否为前台窗口,此样式都是前台的模式对话框。 |
制表控制 | DS_CONTROL | 0x0400 | 允许用户在子对话框的控件窗口中按 Tab 键、使用其快捷键等。 |
显示居中 | DS_CENTER | 0x0800 | 将对话框在包含所有者窗口的监视器工作区中居中。 |
光标居中 | DS_CENTERMOUSE | 0x1000 | 鼠标光标上的对话框居中。 |
问号标题 | DS_CONTEXTHELP | 0x2000 | 在对话框的标题栏中包括问号。单击时光标变成问号。随后单击对话框中的控件将收到帮助消息。 |
中文名字 | 英文名称 | 长度 | 作用解释 |
帮助类 | HELPINFO | 18 | 包含有关已为其请求上下文相关帮助的项的信息。 |
帮助类 成员表 |
中文 | 英文 | 类型 | 作用解释 |
大小 | cbSize | 整数 | 结构大小(以字节为单位)。 |
分类 | iContextType | 整数 | 请求帮助的上下文类型。1窗口,2菜单 |
标识 | iCtrlId | 整数 | 窗口控件或菜单项的标识符。 |
子项 | hItemHandle | 整数 | 子窗口控件或关联菜单的标识符。 |
编号 | dwContextId | 整数 | 窗口或控件的帮助上下文标识符。 |
左边 | MousePos.x | 整数 | 包含鼠标光标的屏幕坐标的左边位置。 |
顶边 | MousePos.y | 整数 | 包含鼠标光标的屏幕坐标的顶边位置。 |