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

原创 2004年03月08日 09:58:00

 

CSDN_Dev_Image_2004-2-191432111.gif 一、概述

对话框是一种特殊的窗口,它依据对话框模板资源而建立。
它与一般的窗口有些不同,很多过程由系统完成了,虽然用户还是要提供一个消息处理函数,但在此消息处理函数中,不需要将不关心的消息交由缺省消息处理函数。
实际上,调用缺省处理的过程又系统完成。

CSDN_Dev_Image_2004-2-191432111.gif 二、对话框消息处理函数

对话框也需要用户提供一个消息处理函数,但这个处理函数没有普通窗口的消息处理函数"权利大"。
对话框是一种系统定义的“窗口类”,它已经定义好了对应的消息处理函数。客户所作的消息处理函数,并不是直接与窗口连接,而是对对话框消息处理函数的一种补充,或者说“嵌入”。
因此,对话框处理函数不需要调用“缺省消息处理函数”。
当有消息被处理时,返回TRUE,没有消息需要处理时,返回FALSE,此时退出用户消息处理函数后,系统会去调缺省消息处理函数。

//对话框消息处理函数
//返回值类型为BOOL,与普通窗口处理函数不同。
BOOL CALLBACK AboutDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{

     switch (message)
     {
     case WM_INITDIALOG :
          return TRUE ;	//返回真,表示消息被处理了。
          
     case WM_COMMAND :
          switch (LOWORD (wParam))
          {
          case IDOK :
          case IDCANCEL :
               EndDialog (hDlg, 0) ;	//使用EndDialog关闭对话框
               return TRUE ; //返回真,表示消息被处理了。
          }
          break ;
     }
     return FALSE ; ////返回假,表示消息未被用户处理,又缺省消息处理函数去处理。
}
CSDN_Dev_Image_2004-2-191432111.gif 三、模式对话框建立

使用DialogBox。
INT_PTR DialogBox(
	HINSTANCE hInstance,  // handle to module
	LPCTSTR lpTemplate,   // dialog box template
	HWND hWndParent,      // handle to owner window
	DLGPROC lpDialogFunc  // dialog box procedure
);
例:
case WM_COMMAND:
switch(LOWORD(wParam))
{
		case ID_ABOUT:
               DialogBox (hinst, MAKEINTRESOURCE(IDD_ABOUT), hwnd, AboutDlgProc) ;
			break;
}
return 0;
CSDN_Dev_Image_2004-2-191432111.gif 四、模式对话框与程序的交互

模式对话框中,可以对程序中的数据进行更改。
结束对话框时,在EndDialog第二个参数中传入退出参数
这个参数将被DialogBox作为返回值,然后对话框的用户根据此返回值作相应的操作。

1.初始化
对话框消息处理函数中,在接到WM_INITDIALOG消息时,作一些初始化工作。
如从全局变量读取初始值来设置各控件状态。

2.退出时
若退出时,更改需要生效,(如按了“确定”),则根据控件状态设置全局变量,并相应的在EndDialg中使用一个表示成功的值(如TRUE)。
若更改不需要生效(如按了“取消”),则不保存结果,并相应的在EndDialg中使用一个表示取消的值(如FALSE)。

3.对话框用户作出反应
根据DialogBox的返回值不同,而进行不同的操作
如,返回TRUE时,重绘窗口:
if (DialogBox (hInstance, TEXT ("AboutBox"), hwnd, AboutDlgProc))
	InvalidateRect (hwnd, NULL, TRUE) ;

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

   一、概述使用DialgBox建立的对话框是“模式对话框”,只有关闭对话框后,程序的其他窗口才能进行操作。与此相对应,存在“非模式对话框”,对话框建立后,并不强制要求用户立即反应,而是与其他窗口同...
  • flashsj
  • flashsj
  • 2004年03月08日 09:58
  • 1207

widowsSDK创建对话框的三种方法

自己看对话框也有些时间了,下面来总结下对话框的一些知识点。 对话框有模态对话框和非模态对话框两种基本形式。 非模态对话框允许我们把输入焦点切换到同一个应用程序的另一个窗口,该对话框也无需关闭,这个...
  • gaoxin1076
  • gaoxin1076
  • 2012年01月24日 16:21
  • 7794

Kinect for Windows SDK v2.0 开发笔记 (七)语音识别(上)

(转载请注明出处) 使用SDK: Kinect for Windows SDK v2.0 public preview
  • dustpg
  • dustpg
  • 2014年07月27日 16:29
  • 4175

OllyDbg 使用笔记 (四)

OllyDbg 使用笔记 (四) 参考 书:《加密与解密》 视频:小甲鱼 解密系列 视频 这个RegisterMe程序,运行前和运行后都会有neg窗口。破解目标,去除这个两个窗口。 用OD直接...
  • billvsme
  • billvsme
  • 2014年08月01日 23:23
  • 1054

Windows SDK 非模态对话框的消息处理

在SDK中使用非模态对话框时,主循环中必须插入下列代码: 1.while(GetMessage(&msg,NULL,0,0) { 2.if(!IsDialogMessage(h...
  • laogaoAV
  • laogaoAV
  • 2014年07月13日 13:16
  • 1199

模式对话框和无模式对话框 区别

按工作方式不同,可将对话框分成两类:  ??模式对话框(modal dialog box模态对话框):在关闭模式对话框之前,程序不能进行其他工作(如一般的“打开文件”对话框)  ??无模式对话框(...
  • wangzhen0331
  • wangzhen0331
  • 2014年04月21日 15:33
  • 651

Kinect for Windows SDK v2.0 开发笔记 (一)环境

嗯,它来了,Windows for Windows v2。 7
  • dustpg
  • dustpg
  • 2014年07月20日 05:56
  • 17189

Windows SDK 笔记 12

1.获得客户区的途径 a.对于最大化的窗口有GetSystemMetrics(SM_CXFULLSCREEN) -> 宽度 GetSystemMetrics(SM_CYFULLSCREEN) ->高度...
  • a970973835
  • a970973835
  • 2014年11月30日 15:13
  • 276

Windows SDK笔记 .

Windows SDK笔记(一):Windows程序基本结构 一、概述 Windows程序具有相对固定的结构,对编写者而言,不需要书写整个过程,大部分过程由系统完成。 程序中只要按一定的格式...
  • m372897500
  • m372897500
  • 2011年08月31日 17:41
  • 250

(转)Windows SDK笔记

Windows SDK笔记(一):Windows程序基本结构一、概述Windows程序具有相对固定的结构,对编写者而言,不需要书写整个过程,大部分过程由系统完成。程序中只要按一定的格式填写系统留给客户...
  • liquanhai
  • liquanhai
  • 2009年08月07日 22:17
  • 1395
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Windows SDK笔记(四):模式对话框
举报原因:
原因补充:

(最多只允许输入30个字)