当前位置: 首页 > 图文教程 > 开发语言 > VC++ > Windows SDK笔记(五):非模式对话框

VC++
在类VC的界面实现中加入目录树
软件换肤技术在 BCB 中的实现
利用非模窗口生成MDI介面
报表输出轻松搞定
Windows 中不规则窗体的编程实现
解说Win32的窗口子类化
使用测试优先方法开发用户界面
一个简单的登录对话框的实现
一个简单的日记本程序
从资源中加载皮肤
一个在RichEdit中添加表情图象的类
ActiveSkin 4.3 软件换肤在VC中的实现
一种另类“关于(About)”对话框的动态显示方法
对话框打印预览及打印
关于如何换肤、子类化的解决方案
制作 MSN、QQ 的消息提示窗口
如何对 BCGControlBarPro 进行换肤
定制个性化的对话框窗口类
改变窗口中的光标形状
更新MFC中的视图,跟踪.NET Framework中的事件

VC++ 中的 Windows SDK笔记(五):非模式对话框


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 229 ::
收藏到网摘: n/a

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

一、概述

使用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。
不需要在派发了。

四、非模式对话框的销毁

使用:

DestroyWindow (hDlg);
用户关闭对话框时,对话框消息处理函数将收到WM_CLOSE消息,接到后调用DestroyWindow以销毁非模式对话框。