[英]How to show custom messages in a dialog box in Win32 API?
如何使用Win32 API中的对话框显示自定义消息,而不是在默认的MessageBox
函数中显示它们?
我做了一个函数,如下所示:
void DialogBox_Custom (HWND hWndParent, LPSTR contentToShow)
{
HWND hDialog = CreateDialog(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DIALOG1), hWndParent, DialogProc);
if (!IsWindowVisible(hDialog))
{
ShowWindow(hDialog, SW_SHOW);
}
SetDlgItemText(hDialog, IDC_EDIT1, contentToShow);
}
但是,当我调用此函数时,对话框每秒显示数百万次,并且直到我强行关闭程序后才结束。
请有人帮助我制作一个自定义对话框,在其中可以显示从父窗口发送到对话框中的EDIT
控制窗口的某些内容。
使用DialogBoxParam
函数创建模式对话框(挂起执行直到关闭窗口)对话框。
DialogBoxParam(instance, MAKEINTRESOURCE(IDD_YOURDIALOG), hWndParent, YourWndProc, (LPARAM)contentToShow);
然后,您必须创建一个函数YourWndProc来处理要绘制的消息,并提供一种关闭窗口的机制,以允许在DialogBox()调用之后继续执行。
INT_PTR CALLBACK YourWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
SetDlgItemText(hDlg, IDC_EDIT1, (LPSTR)lParam);
return (INT_PTR)TRUE;
case WM_CLOSE:
EndDialog(hDlg, LOWORD(wParam));
break;
}
return DefWindowProc(hDlg, message, wParam, lParam);
}
在winprog.org上查看本教程 。 这些步骤是:
模态对话框类似于MessageBox
:关闭对话框时,代码将重新获得控制权。 API: DialogBox
, DialogBoxIndirect
。
无模式对话框类似于Windows:您可以在对话框模板的帮助下创建它们,然后立即获得控件,它们由消息分发驱动。 这是您要做的,但是您希望他们像模态那样行事。 API: CreateDialog
, CreateDialogIndirect
。
使用模式对话框和无模式对话框,您都可以使用自己的DialogProc
控制对话框,并使用资源对话框模板创建对话框,该模板会自动创建控件(当然,您也可以在代码中添加控件)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.