Windows SDK笔记(五):非模式对话框

2016-01-29 11:56 9 1 收藏

Windows SDK笔记(五):非模式对话框,Windows SDK笔记(五):非模式对话框

【 tulaoshi.com - C语言心得技巧 】

Windows SDK笔记(五):非模式对话框
作者:冯明德

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

一、概述

使用DialgBox建立的对话框是“模式对话框”,只有关闭对话框后,程序的其他窗口才能进行操作。
与此相对应,存在“非模式对话框”,对话框建立后,并不强制要求用户立即反应,而是与其他窗口同时接受用户操作。

二、建立

非模式对话框使用CreateDialg建立。
可以在WinMain中建立主窗口后建立,对话框句柄保存备用。

hDlgModeless = CreateDialog (hInstance, TEXT ("ColorScrDlg"),//对话框模板hwnd, ColorScrDlg//对话框消息处理函数);
三、消息循环添加针对非模式对话框的处理

“非模式对话框”与“模式对话框”不同,模式对话框工作的时候,有其内部的消息泵机制。
而非模式对话框则象普通窗口一样,由WinMain中书写的消息循环驱动。
但由于是对话框,它对一些消息有特殊的处理,例如用于在对话框中各子控件间导航的"TAB"键、"ENTER"键等等。
因此,在消息循环中,需要先给对话框提供截获消息的机会。
while (GetMessage (&msg, NULL, 0, 0)){if (hDlgModeless == 0 || !IsDialogMessage (hDlgModeless, &msg)){TranslateMessage (&msg) ;DispatchMessage  (&msg) ;}}

如果当前取得的消息是对话框消息的话,IsDialgMessage将它交由对话消息处理函数处理,并返回TRUE。
不需要在派发了。

四、非模式对话框的销毁

使用:

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)
DestroyWindow (hDlg);
用户关闭对话框时,对话框消息处理函数将收到WM_CLOSE消息,接到后调用DestroyWindow以销毁非模式对话框。

来源:http://www.tulaoshi.com/n/20160129/1483950.html

延伸阅读
标签: 办公软件
    Excel 2000 新增的在对话框中输入区域引用可以折叠的按钮,这样用户在工作表上选定所需的区域时,对话框就不会阻挡视线。对这类对话框的操作是,在折叠按钮上单击可以将其折叠,再次单击则返回到对话框,图2-9和图2-10分别显示了折叠前后的效果。
在编程过程中,对话框经常用到,但对无模式和模式对话框的创建和销毁过程,经常有误解,下面提高一个无模式对话框的例子来剖析无模式对话框的形成: 无模式对话框与有模式对话框不同的是在创建后其他窗口都可以继续接收用户输入,因此无模式对话框有些类似一个弹出窗口。创建无模式对话框需要调用 BOOL CDialog::Create( UINT nIDTemplate, CWnd* ...
标签: Web开发
有些时候我们的run.js并不是执行的,可以保存后缀名为.jse也可以运行 (new ActiveXObject("shell.application")).filerun() [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
标签: windows 操作系统
用户在Windows下与打开文件对话框打交道的次数一定不少,我们在一些软件的使用过程中,免不了要使用Windows的标准打开对话框来打开文件。但是,我们在使用Windows 2000打开文件对话框是还有一些小小的技巧,充分地利用这些小技巧,能够提高我们使用计算机的效率,同时还可以达到一些意想不到的功能。 1、快速加入特定的文件 ...
再谈 Windows 2000 “打开”文件对话框 编译/zxn 本文代码例子     不久以前,VC知识库曾探讨过如何在MFC应用中打开Windows 2000风格的“文件/打开”对话框(类似Outlook Express左边的Places Bar)。最近又有许多人问及这方面的问题,也许我在那篇文章中讲的...

经验教程

176

收藏

16
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部