对话框简介
通过CreateWindow创建窗口,比较复杂。于是微软提供了直接创建对话框的方式。
- 1、通过资源编辑器添加对话框资源,编辑ID
- 2、使用CreateDialog或DialogBox函数创建对话框
// 函数原型
HWND CreateDialog(
HINSTANCE hInstance, // handle to module
LPCTSTR lpTemplate, // dialog box template name
HWND hWndParent, // handle to owner window
DLGPROC lpDialogFunc // dialog box procedure
);
INT_PTR DialogBox(
HINSTANCE hInstance, // handle to module
LPCTSTR lpTemplate, // dialog box template
HWND hWndParent, // handle to owner window
DLGPROC lpDialogFunc // dialog box procedure
);
- 模态和非模态的区别
- 1、 CreateDialog创建的是非模态的对话框(不会阻塞父窗口)
- 2、 DialogBox创建的是模态对话框(会阻塞父窗口)
- 3、 非模态对话框需要直接编写消息循环,模态对话框自带消息循环
- 4、 退出消息循环用EndDialog
对话框和窗口的区别
- | 窗口 | 对话框 |
---|---|---|
函数返回值 | 返回LRESULT | 返回BOOL |
消息处理 | 不处理WM_INITDIALOG | 不处理WM_CREATE,WM_DESTORY,WM_PAINT |
不处理消息的处理 | return DefWindowProc | return 0 |
对话框处理的主要消息
WM_INITDIALOG | 初始化对话框 |
---|---|
WM_COMMAND | 响应对话框上常用控件的操作 |
WM_NOTIFY | 响应对话框复杂控件的操作 |
模态对话框的编写
#include <windows.h>
#include <tchar.h>
#include "resource.h"
int WINAPI _tWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPTSTR lpCmdLine,
_In_ int nShowCmd
)
{
g_hInstance = hInstance;
DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DlgProc);
return 0;
}
INT_PTR CALLBACK DlgProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam)
{
switch (Message)
{
case WM_CLOSE:
EndDialog(hWnd, 0);
//PostQuitMessage(EXIT_SUCCESS);
break;
default:
break;
}
return 0;
}
- 1、创建对话框资源
- 2、显示调用DialogBox对话框
- 3、编写对话框消息处理函数
- 4、关闭对话框函数
信息框
信息框是模态对话框的一种特殊形式
函数原型:
int MessageBox(
HWND hWnd, // handle to owner window
LPCTSTR lpText, // text in message box
LPCTSTR lpCaption, // message box title
UINT uType // message box style
);
标识 | 描述 |
---|---|
MB_ABORTRETRYIGNORE | 消息框包含三个按钮:Abort、重试和忽略。 |
MB_ICONEXCLAMATION | 感叹号点图标出现在消息框中。 |
MB_ICONQUESTION | 一个问号图标出现在消息框中。 |
MB_ICONSTOP | 一个停止标志图标出现在消息框中 |
MB_OK | 消息框包含一个按钮:OK。这是默认值 |
MB_OKCANCEL | 消息框包含两个按钮:OK和Cancel。 |
MB_RETRYCANCEL | 消息框包含两个按钮:重试和取消。 |
MB_YESNO | YES NO |
MB_YESNOCANCEL | 消息框包含三个按钮:是、否和取消 |
返回值
返回值|用户操作
IDABORT|按下 Abort
IDCANCEL|按下Cancel
IDIGNORE|按下Ignore
IDNO|按下NO
IDOK|按下OK
IDRETRY|按下Retry
IDYES|按下YES
非模态对话框
#include <windows.h>
#include <tchar.h>
#include "resource.h"
HINSTANCE g_hInstance = NULL;
int WINAPI _tWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPTSTR lpCmdLine, _In_ int nShowCmd)
{
g_hInstance = hInstance;
HWND hWnd = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DlgProc);
AnimateWindow(hWnd, 200, AW_CENTER);
ShowWindow(hWnd, SW_SHOW);
MSG msg;
while (GetMessage(&msg, 0, 0, 0))
{
DispatchMessage(&msg);
}
return 0;
}
INT_PTR CALLBACK DlgProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam)
{
switch (Message)
{
case WM_CLOSE:
//EndDialog(hWnd, 0);
PostQuitMessage(EXIT_SUCCESS);
break;
default:
break;
}
return 0;
}