关于对话框
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>指定其窗体过程函数