Почему это диалоговое окно закрывается сразу после открытия? - PullRequest
1 голос
/ 29 сентября 2010

Моя проблема в том, что я пытаюсь создать приложение Opengl / Win32 и не могу открыть диалоговое окно. Он буквально мигает, как будто кто-то нажал кнопку отмены на нем прямо при открытии. Я просмотрел Google и нашел несколько других с этой проблемой, но ни одно из опубликованных ими решений не помогло мне, поэтому я обращаюсь к сообществу StackOverflow!

Изначально я написал код для процедуры диалога ...

LRESULT CALLBACK LoginDlgProc(HWND hWndDlg, UINT Msg, WPARAM wParam, LPARAM lParam)
{ 
    ShowWindow(hWndDlg, SW_SHOW); // These were added to get the window to show up
    UpdateWindow(hWndDlg); // even if the chance was small.
    switch(Msg)
    {
    case WM_INITDIALOG:
        return true;

    case WM_COMMAND:
        switch(wParam)
        {
        case IDOK:
            EndDialog(hWndDlg, 0);
            return TRUE;
        }
        break;
    }

    return FALSE;
}

Затем я написал реальный код для отображения окна.

void DisplayLoginBox()
{
    LoginDlgHwnd = NULL;
    LoginDlgHwnd = (HWND)DialogBox(GetModuleHandle(NULL), 
                                    MAKEINTRESOURCE(LOGIN_DIALOG),
                            app.GetHandle(),
                            reinterpret_cast<DLGPROC>(LoginDlgProc)
                        );

    if(LoginDlgHwnd == NULL)
        MessageBox(NULL, NULL, NULL, MB_OK);
}

app.GetHandle () возвращает hwnd основной программы. Эта функция работает правильно. и LoginDlgHwnd является глобальной переменной.

Фактическое диалоговое окно создано и включено правильно. Есть ли у вас какие-либо идеи? -Celestialkey

1 Ответ

3 голосов
/ 29 сентября 2010
  • DialogBox не возвращает hwnd, функция не возвращает, пока диалоговое окно не закрыто. Если вы хотите немодальный диалог и дескриптор, используйте CreateDialog
  • DLGPROCПараметр DialogBox должен не требовать приведения , изменить LoginDlgProc 'LRESULT на INT_PTR
  • MessageBox (NULL, NULL, NULL, MB_OK);ничего не будет отображаться, ему нужен текст во втором параметре

Трудно сказать, почему диалог не остается открытым, но вы должны проверить возвращаемое значение DialogBox, если оно равно 0,родительский hwnd недействителен, если он равен -1, вызовите GetLastError () для получения дополнительной информации.Вы можете попробовать удалить все элементы управления в шаблоне диалога LOGIN_DIALOG (если вы использовали общие элементы управления, но не вызывали InitCommonControls, диалоговое окно не будет работать и т. Д.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...