Winapi диалог не работает на Windows XP

0

У меня есть игра, которая при запуске показывает диалог, чтобы выбрать язык. Все работает на окнах 7/8, но не на windows xp (или если я установил режим совместимости с окнами xp sp 3). Элементы управления сдвинуты вниз, и окно не может быть перемещено, кнопка закрытия не работает.

Изображение 174551

Я создаю диалог следующим образом:

dialog_state = 0;
    HWND hwnd = CreateDialog(NULL, MAKEINTRESOURCE(IDD_DIALOG1), NULL, PickLanguageDialogProc);
    ShowWindow(hwnd, SW_SHOW);

    MSG aMsg = {};
    while(dialog_state == 0 && GetMessage(&aMsg, NULL, 0, 0))
    {
        if(!IsDialogMessage(hwnd, &aMsg))
        {
            TranslateMessage(&aMsg);
            DispatchMessage(&aMsg);
        }
    }

Обработчик сообщений:

static INT_PTR CALLBACK PickLanguageDialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch(uMsg)
    {
    case WM_INITDIALOG:
        // snip, fill list box
        return TRUE;

    case WM_CLOSE:
        DestroyWindow(hwndDlg);
        return TRUE;

    case WM_DESTROY:
        dialog_state = 2;
        return TRUE;

    case WM_COMMAND:
        // snip
        break;
    }
    return DefWindowProc(hwndDlg, uMsg, wParam, lParam);
}

Диалоговый код:

IDD_DIALOG1 DIALOGEX 0, 0, 148, 146
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Select language"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
    DEFPUSHBUTTON   "OK",IDOK,91,125,50,14
    PUSHBUTTON      "Cancel",IDCANCEL,7,125,50,14
    LISTBOX         IDC_LIST2,7,29,134,93,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
    LTEXT           "Select language (can be changed in options later):",IDC_STATIC,7,7,134,21
END

Скомпилировано в окне 8 64 бит с Visual Studio 2008. Приложение 32 бит. Какие-нибудь идеи в чем-то не так?

  • 2
    Похоже, кто-то добавляет пустое меню в XP.
Теги:
winapi

1 ответ

1
Лучший ответ

изменения

return DefWindowProc(hwndDlg, uMsg, wParam, lParam);

в

return FALSE;

исправить мою проблему. Похоже, диалоговое окно нуждается в другой обработке, а затем в обычном окне.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню