对话框回调函数未调用

时间:2020-01-24 15:46:38

标签: c++ dialog

我正在努力地创建一个对话框。 第一个问题是使对话框本身可见。显示对话框时,它仅在Dialob框内显示控件,但是对话框本身是invisiblem,但是仍然可以按关闭按钮。我通过在对话框属性中添加自定义类名称并注册该类来解决此问题。有人知道问题出在哪里吗?我的一位同事不需要显式注册该类并将其添加到对话框的属性中。

但是我当前的问题如下:

我有这个回调函数:

static BOOL CALLBACK DialogProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch(message)
    {
    case WM_INITDIALOG:
        MessageBox(NULL, L"init dialog", L"Message Box", NULL);
        break;
    case WM_CLOSE:
        DestroyWindow(hwnd);
        MessageBox(NULL, L"close dialog", L"Message Box", NULL);
        break;
    case WM_DESTROY:
        MessageBox(NULL, L"destroying dialog", L"Message Box", NULL);
        break;
    }
    return TRUE;
}

并启动一个新对话框:

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
    HWND hWnd;
    TCHAR szTitle[MAX_LOADSTRING] = TEXT("This is the DialogBox Title");        // Titelleistentext
    TCHAR szWindowClass[MAX_LOADSTRING] = TEXT("MyDialogBoxClass"); // Klassenname des Hauptfensters

    g_hInst = hInstance; // Instanzenhandle in der globalen Variablen speichern

    if (!MyRegisterClass(hInstance, szWindowClass))
    {
        return FALSE;
    }

    hWnd = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_DIALOG_FTPHELPER), NULL, DialogProc);
    if (!hWnd)
    {
        return FALSE;
    }
    SetWindowText(hWnd, szTitle);


    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);

    if (g_hWndCommandBar)
    {
        CommandBar_Show(g_hWndCommandBar, TRUE);
    }

    return TRUE;
}

当显示一个新对话框时,它甚至不会调用一次“ DialogProc”函数,永远不会,这会让我感到恶心...

有人知道这个问题的答案吗?

最好的问候,谢谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您的DialogProc函数始终返回TRUE,这意味着它处理了收到的任何消息。但是,您实际上只处理了三则消息,系统还调用了许多其他消息(例如WM_CREATE)以“设置”对话框窗口。

如果您已经完全处理了邮件,则仅应返回TRUE,否则,请返回FALSE,以便系统可以为您未收到的邮件调用默认过程。可以。

来自Microsoft documentation

通常,如果对话框过程已处理,则应返回TRUE 消息,如果没有则为FALSE。如果对话框中的步骤 返回FALSE,对话框管理器执行默认对话框 操作以响应该消息。