一、插入对话框资源
菜单"Insert"->Resource->Dialog->New
二、模态对话框(Modal Dialog Box)
1.用户不能在对话框与同一个程序中的另一个窗口之间进行切换。
2. 创建模态对话框:
(1)DialogBox宏从一个对话框模板资源中创建一个模态对话框。
(2)模态对话框直到指定的回调函数通过调用EndDialog函数终止对话框才返回值。
int DialogBox(
HINSTANCE hInstance, // handle to application instance
LPCTSTR lpTemplate, // identifies dialog box template
HWND hWndParent, // handle to owner window
DLGPROC lpDialogFunc // pointer to dialog box procedure
);
如:
DialogBox(hinstance,MAKEINTRESOURCE(IDD_DIALOG1),hwnd,DialogModalProc);
3.对话框过程
(1)BOOL:返回值
(2)CALLBACK:回调函数
(3)不是真正的窗口过程函数
(4)DialogBox宏使用CreateWindowEx函数去创建模态对话框后,向对话框过程函数发送一个WM_INITDIALOG消息,该消息是对话框接收到的第一个消息。
如:
BOOL CALLBACK DialogModalProc(HWND hdlg,UINT msg,WPARAM wParam,LPARAM lParam)
{
switch(msg)
{
case WM_INITDIALOG:
MessageBox(NULL,TEXT("模态对话框被创建!"),TEXT("创建"),MB_OK|MB_ICONINFORMATION);
return TRUE;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDOK:
case IDCANCEL:
EndDialog(hdlg,0);//终止模态对话框
return TRUE;
}
break;
}
return FALSE;
}
4.终止模态对话框
BOOL EndDialog(
HWND hDlg, // handle to dialog box
int nResult // value to return
);
如:
EndDialog(hdlg,0);//
三、非模态对话框(Modeless Dialog Box)
1. 创建模态对话框:
(1)CreateDialog宏从一个对话框模板资源中创建一个非模态对话框
(2)返回对话框句柄
HWND CreateDialog(
HINSTANCE hInstance, // handle to application instance
LPCTSTR lpTemplate, // identifies dialog box template name
HWND hWndParent, // handle to owner window
DLGPROC lpDialogFunc // pointer to dialog box procedure
);
如:
hdlg=CreateDialog(hinstance,MAKEINTRESOURC(IDD_DIALOG2),hwnd,
DialogModalessProc);
2.非模态对话框过程函数
BOOL CALLBACK DialogModalessProc(HWND hdlg,UINT msg,WPARAM wParam,LPARAM lParam)
{
switch(msg)
{
case WM_INITDIALOG:
MessageBox(NULL,TEXT("非模态对话框被创建!"),TEXT("创建"),MB_OK|MB_ICONINFORMATION);
return TRUE;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDOK:
DestroyWindow(hdlg);//终止非模态对话框
return TRUE;
}
break;
}
return FALSE;
}
3.销毁非模态对话框
DestroyWindow:
BOOL DestroyWindow(
HWND hWnd // handle to window to destroy
);
如:DestroyWindow(hdlg);