1

How to show custom messages using a dialog box in Win32 API rather than show them in a default MessageBox function?

I made a function as follows:

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);
}

But when I call this function, the dialog box is appearing like millions of times per second and never ending until I close the program by force.

Please kindly someone help me make a custom dialog box where I can show some content sent from the parent window to an EDIT control window in the dialog box.

4

3 回答 3

1

使用该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);
}
于 2013-09-17T11:05:38.093 回答
0

在 winprog.org 上查看本教程。步骤是:

  1. 为您的自定义对话框创建一个资源文件。添加将包含消息的 CTEXT 或 LTEXT 控件。
  2. 为它写一个对话过程。您可以使用 WM_INITDIALOG 中的 SetDlgItemText 设置消息,即 CTEXT 控件的文本。
  3. 通过调用 DialogBox 打开对话框。
于 2013-09-17T10:13:44.197 回答
0

模态对话框类似于MessageBox:当对话框关闭时,您的代码会重新获得控制权。API: DialogBox, DialogBoxIndirect.

无模式对话框类似于窗口:您在对话框模板的帮助下创建它们并立即获得控制权,它们由消息分发提供支持。这就是你所做的,但你希望它们表现得好像它们是模态的。API: CreateDialog, CreateDialogIndirect.

使用模态对话框和非模态对话框,您可以自己控制对话框,DialogProc并使用资源对话框模板创建对话框,该模板会自动创建控件(当然,您可以在代码中添加控件)。

于 2013-09-17T10:17:24.690 回答