简体   繁体   中英

How to show custom messages in a dialog box in Win32 API?

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.

Use the DialogBoxParam function to create the modal (suspend execution until the window is closed) dialog box.

DialogBoxParam(instance, MAKEINTRESOURCE(IDD_YOURDIALOG), hWndParent, YourWndProc, (LPARAM)contentToShow);

You then have to create a function YourWndProc to handle the messages to paint and offer a mechanism to close the window, to allow execution to continue after your DialogBox() call.

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

Check out this tutorial on winprog.org. The steps are:

  1. Create a resource file for your custom dialog. Add a CTEXT or LTEXT control, which will contain the message.
  2. Write a dialog procedure for it. You can set the message, that is, the text of the CTEXT control, using SetDlgItemText in WM_INITDIALOG.
  3. Open the dialog by calling DialogBox.

Modal dialogs are similar to MessageBox : your code gets control back when the dialog is closed. API: DialogBox , DialogBoxIndirect .

Modeless dialogs are similar to windows: you create them with the help of dialog templates and you get the control back immediately, they live powered by message dispatch. This is what you do but you expect them to act as if they were modal. API: CreateDialog , CreateDialogIndirect .

With both modal and modeless dialog you control the dialog with your own DialogProc and you create the dialog with resource dialog template, which automatically creates controls (and you, of course, can add control in code).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM