首页 > 代码库 > Windows 编程之 对话框总结

Windows 编程之 对话框总结

关于对话框

1 对话框种类

         对话框也是一种资源,Windows中对话框分为模态的和非模态的,以及Windows系统中已经定义好的那些通用对话框,比方打开文件,目录,调色板,字符串查找等。

2 模态对话框和非模态对话框的差别

         模态对话框就是那种你打开后必须关了才干转到主窗体的那种类型;非模态对话框就是即便打开了对话框,你依旧能够在主窗体中指指点点的那种类型。

3 模态对话框的创建及弹出

<1>  

INT_PTR		DialogBox( 
       HINSTANCEhInstance,   	// handle to module
       LPCTSTR lpTemplate,    	//dialog box template
       HWND hWndParent,    	//handle to owner window
       DLGPROC lpDialogFunc  	// dialog box procedure);

<2>

INT_PTR   DialogBoxIndirect( 
       HINSTANCEhInstance,       // handle to module
       LPCDLGTEMPLATE lpTemplate,// dialog box template
       HWND hWndParent,          // handle to owner window
       DLGPROC lpDialogFunc      // dialog box procedure);

<3> 

INT_PTR    DialogBoxIndirectParam(
 	HINSTANCE hInstance,		// handle to module
 	LPCDLGTEMPLATE hDialogTemplate, // dialog box template
  	HWNDhWndParent,               	// handle toowner window
 	DLGPROC lpDialogFunc,           // dialog box procedure
 	LPARAM dwInitParam              //initialization value);

<4>           

 INT_PTR     DialogBoxParam( 
       HINSTANCEhInstance,      // handle to module
       LPCTSTR lpTemplateName,  // dialog box template
       HWND hWndParent,       	// handle to owner window
       DLGPROC lpDialogFunc,   	//dialog box procedure
       LPARAM dwInitParam     	// initialization value);

当中DialogBox和DialogBoxParam是从资源中载入对话框,其余两个是从内存中载入对话框。在这里面要注意的一个參数就是DLGPROC lpDialogFunc,函数原型是:

INT_PTR	CALLBACK	DialogProc( 
	HWNDhwndDlg,	// handle to dialog box
	UINT uMsg,	//message 
	WPARAMwParam,	// first message parameter
	LPARAM lParam   //second message parameter);

这个回调函数跟窗体回调函数非常类似,可是函数的返回类型不一样。

4 模态对话框的消息处理

         DialogProc非常像WindowProc,但它不是WindowProc,对话框的WindowProc在Windows内部定义,它会调用DialogProc函数。

BOOL CALLBACK	DlgProc(HWND hdlg,UINT msg,WPARAM wParam,LPARAM lParam)
{
         switch(msg)
         {
         caseWM_INITDIALOG:
                   returnTRUE;
         caseWM_COMMAND:
                   switch(LOWORD(wParam))
                   {
                   caseIDOK:
                            EndDialog(hdlg,0);
                            break;
                   }
                   break;
         }
         returnFALSE;
}


WM_INITDIALOG消息会在对话框创建的时候发送,在此消息下能够用来初始化对话框中的各种控件。

5 模态对话框的关闭

BOOL	EndDialog( HWND	hDlg,INT_PTR nResult);

指定创建对话框的函数的返回值。


6 利用控件创建复杂对话框


7 模态对话框中自己定义控件


既然是自己定义控件,那么必须在要进行窗体的设计,窗体的注冊,以及配置响应的窗体过程函数。

制作步骤:

<1>在工具箱中找到custom control,将其拖拽到面板中

<2>点击属性,指定起class名称,以及ID

<3>在WinMain函数中进行设计注冊

<4>指定其窗体过程函数


Windows 编程之 对话框总结