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>指定其窗口过程函数


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值