第十一章 对话框part3
来源:互联网 发布:沈航网络自助服务平台 编辑:程序博客网 时间:2024/06/04 18:59
11.2非模态对话框
非模态对话框允许使用者在对话框与其它程序之间进行切换,又可以在对话框与建立对话框的窗口之间进行切换。当使用者觉得让对话框保留片刻会更加方便时,使用非模态对话框是合适的。
非模态对话框是使用CreateDialog来建立的,该函数所使用的参数与DialogBox相同。hDlgModeless = CreateDialog ( hInstance, szTemplate, hwndParent, DialogProc); 区别是CreateDialog函数立即传回对话框的窗口句柄,并通常将这个窗口句柄存放到整体变量中。
模态对话框与非模态对话框的区别
①非模态对话框通常包含一个标题列和一个系统菜单按钮。对于模态对话框,您通常无须提供标题列和系统菜单。
②用于非模态对话框的对话框模板中的STYLE叙述形如: STYLE WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE 如果省略了WS_VISIBLE,那么您必须在CreateDialog呼叫之后呼叫ShowWindow
hDlgModeless = CreateDialog ( . . . ) ; ShowWindow (hDlgModeless, SW_SHOW) ; 果您既没有包含WS_VISIBLE样式,又没有呼叫ShowWindow,那么非模态对话框将不会被显示。
③与模态对话框和消息框的消息不同,非模态对话框的消息要经过程序式的消息队列。要将这些消息传送给对话框窗口消息处理程序,则必须改变消息队列。具体的代码如下:
如果消息是发送给非模态对话框的,那么IsDialogMessage将它发送给对话框中窗口消息处理程序,并传回TRUE(非0);否则,它将传回FALSE(0)。简单来说就是如果消息是发给非模态对话框的话,该消息就不进入windows的消息循环。
④使用DestroyWindow而不是EndDialog来结束非模态对话框。
也可以用CreateDialogParam来建立非模态对话框,并让它储存一个结构指针。
模态对话框和非模态对话框的消息循环
1、非模态对话框和父窗口共享当前线程的消息循环
2、模态对话框新建一个新的消息循环,并由当前消息循环派发消息,而父窗口。模态对话框屏蔽了用户对它父窗口的操作,但是不是在消息循环里面屏蔽,所以给父窗口发送消息,父窗口还是可以接收得到。
3、调用模态对话框的窗口处理函数会被阻塞,但是新的消息循环仍然可以调用父窗口的消息处理函数,所以,发送给父窗口的新消息仍然可以被及时处理。
新的COLORS程序
在COLORS2中,非模态对话框是在WinMain函数里建立的,紧跟在程序主窗口的ShowWindow呼叫之后。注意,主窗口的窗口样式包含WS_CLIPCHILDREN,这允许程序无须擦除对话框就能够重画主窗口。
COLORS2.rc
当建立对话框模板时,直接将三个滚动条的ID分别设为10、11和12,将显示滚动条目前值的三个静态文字字段的ID分别设为13、14和15。将每个滚动条都设定为Tab Stop样式,而从所有的六个静态文字字段中删除Group样式。
HEXCALC:窗口还是对话框?
HEXCALC.rc
这个程序完全不呼叫CreateWindow,也不处理WM_PAINT消息,不取得设备内容,也不处理鼠标消息。
CLASS叙述是这个对话框与曾经建立过的对话框之间最重要的区别。
包含CLASS叙述就告诉Windows将消息发送到其它的地方-具体的说,就是发送到在HexCalc窗口类别中指定的窗口消息处理程序。
WNDCLASS结构的cbWndExtra字段设定为DLGWINDOWEXTRA。对于您自己注册的对话框程序,这是必需的。
- 第十一章 对话框part3
- 第十一章 对话框part1
- 第十一章 对话框part2
- 第十一章 对话框part4
- Windows程序设计 第十一章 模态对话框
- Excel VBA高效办公应用-第十一章-教师员工数据管理-Part3 (排座位小程序)
- part3
- PART3
- 第十一章
- 第十一章
- 第十一章
- 第十一章
- 第十一章
- 第十一章
- 第十一章
- 第十一章
- 第五章 图形基础part3
- 第16章part3-STL
- C#的新特性:可空类型
- PowerDesigner设定MySQL字段identity类型
- TCP穿越NAT的方法、TCP打洞
- PHP连接MYSQL方法详解(两种) 【转】
- 上海换房记(一)
- 第十一章 对话框part3
- 声音的特征及计算机描述
- 困惑
- Spring 事务管理高级应用难点剖析: 第 1 部分---转自:陈 雄华
- 最封闭的开源系统-话说 Android 的八宗罪
- 一台机装多个版本IE,支持WIN7
- CBR Troubleshooting for FileNet CEMP 4.x.x
- 已就小额外贸平台遭黑客攻击报案 alibaba
- ThinkPHP学习(一)测试环境