2022年模式对话框与非模式对话框的区别 .pdf
《2022年模式对话框与非模式对话框的区别 .pdf》由会员分享,可在线阅读,更多相关《2022年模式对话框与非模式对话框的区别 .pdf(6页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、模式对话框就是不处理它就没法处理父窗口,而非模式对话框就是不用先处理此对话框也可以处理父窗口 .例子 :在桌面上右击我的电脑,选择属性 ,弹出系统属性窗口,点击下面的技术支持,弹出技术支持信息,现在再对系统属性窗口进行操作就操作不了,这种叫做模式对话框;关闭技术支持信息,在系统属性里选择硬件,点击设备管理器,弹出设备管理器窗口,现在再对系统属性窗口进行操作仍然可以操作,这种就叫做非模式对话框。在 WIN32 中,模式对话框的创建一般是使用DialogBox 来进行创建的。而非模式对话框则是利用 CreateWindow 来创建的。在MFC 或是 WTL 中,模式对话框一般是使用DoModal,
2、而非模式对话框的创建则是使用Create。一、使用中的区别模式对话框创建后,程序的其他窗口便不能进行操作,必须将该窗口关闭后,其他窗口才能进行操作。 而非模式对话框则无需这样,它不强制要求用户立即反应,而是与其他窗口同时接受用户操作。二、消息响应的区别在消息响应方面,模式对话框和非模式对话框之间又有着很大的区别。模式对话框工作的时候,它有内部的消息泵机制,控件之间的交互不用我们人为的去控制,系统会帮助我们去处理。非模式对话框则像普通窗口一样,则由WinMain 中书写的消息循环驱动。但由于是对话框, 它对一些消息有特殊的处理。因此, 在消息循环中,需要先对对话框提供截获消息的机会。While
3、(GetMessage(&msg, NULL, 0, 0) if (hDlgModeless = 0 | !IsDialogMessage(hDlgModeless, &msg) TranslateMessage(&msg); DispatchMessage( &msg); 如果当前取得的消息是对话框的消息,IsDialogMessage 将它交由对话消息处理函数处理,并返回 TRUE。不需要再派发了。注意: 这个方法并不是很好用,因为当对话框过多的时候,处理起来就比较麻烦了。另一种处理的方法是利用子类化控件的方法,来处理控件间的交互。三、销毁的区别模式对话框的销毁是使用EndDialog,而
4、非模式对话框的销毁是使用DestroyWindow. 。所以我们在销毁对话框的时候,也要对其进行区别。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 6 页 - - - - - - - - - 非模式对话框, 用户关闭对话框时,对话框消息处理函数将收到WM_CLOSE 消息, 接到后调用 DestroyWindow 以销毁非模式对话框。模式对话框,则一般响应IDOK 和 IDCANCEL 。在 PPC 上,我们对于OK 键和 X 键的处理要注意这点。四、其他非模态对话框的
5、模板必须具有Visible 风格,否则对话框将不可见,而模态对话框则无需设置该项风格。更保险的办法是调用ShowWindow(hDialog, SW_SHOW) 来显示对话框,而不管对话框是否具有Visible 风格。非模态对话框对象是用new 操作符在堆中动态创建的,而不是以成员变量的形式嵌入到别的对象中或以局部变量的形式构建在堆栈上。通常应在对话框的拥有者窗口类内声明一个指向对话框类的指针成员变量,通过该指针可访问对话框对象。通过调用Create 函数来启动对话框,而不是DoModal ,这是模态对话框的关键所在。由于Create 函数不会启动新的消息循环,对话框与应用程序共用同一个消息循
6、环,这样对话框就不会垄断用户的输入。Create 在显示了对话框后就立即返回,而DoModal 是在对话框被关闭后才返回的。众所周知,在MFC 程序中,窗口对象的生存期应长于对应的窗口,也就是说,不能在未关闭屏幕上窗口的情况下先把对应的窗口对象删除掉。由于在Create返回后,不能确定对话框是否已关闭,这样也就无法确定对话框对象的生存期,因此只好在堆中构建对话框对象,而不能以局部变量的形式来构建之。因为是用new 操作符构建非模态对话框对象,因此必须在对话框关闭后,用delete 操作符删除对话框对象。必须有一个标志表明非模态对话框是否是打开的。这样做的原因是用户有可能在打开一个模态对话框的情
7、况下,又一次选择打开命令。程序根据标志来决定是打开一个新的对话框,还是仅仅把原来打开的对话框激活。通常可以用拥有者窗口中的指向对话框对象的指针作为这种标志,当对话框关闭时,给该指针赋 NULL 值,以表明对话框对象已不存在了。注意: 在 C+编程中, 判断一个位于堆中的对象是否存在的常用方法是判断指向该对象的指针是否为空。这种机制要求程序员将指向该对象的指针初始化为NULL值,在创建对象时将返回的地址赋给该指针,而在删除对象时将该指针置成NULL 值。- 模态与 非模态的对比:模态形式上: 一个模式对话框是一个有系统菜单、标题栏、 边线等的弹出式窗口。在创建对话框时指定WS_POPUP, WS
8、_SYSMENU, WS_CAPTION和DS_MODALFRAME风格。即使没有指定WS_VISIBLE风格,模式对话框也会被显示。创建 对话框 窗口 时,将 发送WM_INITDIALOG消 息( 如果指 定对 话框的DS_SETFONT 风格, 还有 WM_SETFONT消息) 给对话框过程。 (对话框的窗口名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 6 页 - - - - - - - - - 过程由 Windows 系统提供,用户在创建对话框窗口时提供一个对话
9、框过程由窗口过程调用。 ) 对话框窗口被创建之后,Windows 使得它成为一个激活的窗口,它保持激活直到对话框过程调用:EndDialog 函数结束对话框的运行或者Windows 激活另一个应用程序为止,在激活时,用户或者应用程序不可以激活它的所属窗口(Owner window ) 。创建: DoModal() 销毁 : 一个应用程序通过调用:EndDialog 函数来销毁一个模式对话框。一般情况下, 当用户从系统菜单里选择了关闭(Close)命令或者按下了确认(OK)或取消( CANCLE )按钮, :EndDialog被对话框过程所调用。调用:EndDialog时,指定其参数nResul
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年模式对话框与非模式对话框的区别 2022 模式 对话框 区别
限制150内