创建对话框
case ID_DIALOG_TEXT:
DialogBox(hInst, MAKEINTRESOURCE(IDD_TEXTBOX), hWnd,Textset);
break; //创建模态对话框
case ID_DIALOG_TCOLOR:
dHwnd = CreateDialog(hInst, MAKEINTRESOURCE(IDD_DIALOG_TCOLOR), hWnd, TextColor);
ShowWindow(dHwnd,SW_SHOW); //创建非模态对话框
break;
Textset 函数
其中
GetDlgItemText(hDlg, IDC_EDITTEXT,szDialogtext, 64); 函数可从对话框的编辑框里取出用户填写的字符串到szDialogtext中,64为其长度。
wcscpy_s(szBuffer,szDialogtext); 用于宽字符的赋值。
SetDlgItemText(hDlg, IDC_EDITTEXT, szBuffer); 在编辑框里显示szBuffer。
SetFocus(GetDlgItem(hDlg, IDC_EDITTEXT)); 设置焦点到指定编辑框IDC_EDITTEXT。
SendDlgItemMessage(hDlg, IDC_EDITTEXT,EM_SETSEL, 0, -1L); 编辑框内容全选。
INT_PTR CALLBACK Textset(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
TCHAR szDialogtext[64] = TEXT(" ");
switch (message)
{
case WM_INITDIALOG:
return (INT_PTR)TRUE;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDOK:
GetDlgItemText(hDlg, IDC_EDITTEXT,
szDialogtext, 64);
wcscpy_s(szBuffer,szDialogtext);
InvalidateRect(temHwnd, NULL, TRUE);
case IDCANCEL:
EndDialog(hDlg, wParam);
return TRUE;
}
break; //break需加上,否则会在上switch内
case WM_SHOWWINDOW:
SetDlgItemText(hDlg, IDC_EDITTEXT, szBuffer);
SetFocus(GetDlgItem(hDlg, IDC_EDITTEXT));
SendDlgItemMessage(hDlg, IDC_EDITTEXT,EM_SETSEL, 0, -1L); //全选
break;
}
return (INT_PTR)FALSE;
}
Text Color 函数
需要注意的是,非模态对话框的TAB键使用需要在消息处理额外设置。
while (GetMessage(&msg, nullptr, 0, 0))
{
if (!IsDialogMessage(dHwnd, &msg)) {
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}
INT_PTR CALLBACK TextColor(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
return (INT_PTR)TRUE;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDAPPLY:
rNum = GetDlgItemInt(hDlg, IDC_EDITRED,NULL, FALSE);
gNum = GetDlgItemInt(hDlg, IDC_EDITGREEN, NULL, FALSE);
bNum = GetDlgItemInt(hDlg, IDC_EDITBLUE, NULL, FALSE);
InvalidateRect(temHwnd, NULL, TRUE);
return TRUE;
case IDCANCEL:
DestroyWindow(hDlg);
return TRUE;
}
break;
case WM_SHOWWINDOW:
SetFocus(GetDlgItem(hDlg, IDC_EDITRED));
SetDlgItemInt(hDlg, IDC_EDITRED, rNum, FALSE);
SetDlgItemInt(hDlg, IDC_EDITGREEN, gNum, FALSE);
SetDlgItemInt(hDlg, IDC_EDITBLUE, bNum, FALSE);
SendDlgItemMessage(hDlg, IDC_EDITRED, EM_SETSEL, 0, -1L);
SendDlgItemMessage(hDlg, IDC_EDITGREEN, EM_SETSEL, 0, -1L);
SendDlgItemMessage(hDlg, IDC_EDITBLUE, EM_SETSEL, 0, -1L);
break;
}
return (INT_PTR)FALSE;
}
输入框可设置指定输入类型,如只输入数字,由EDIT框的properties中找到Number选项,选为TRUE。