У меня есть игра, которая при запуске показывает диалог, чтобы выбрать язык. Все работает на окнах 7/8, но не на windows xp (или если я установил режим совместимости с окнами xp sp 3). Элементы управления сдвинуты вниз, и окно не может быть перемещено, кнопка закрытия не работает.
Я создаю диалог следующим образом:
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 бит. Какие-нибудь идеи в чем-то не так?
изменения
return DefWindowProc(hwndDlg, uMsg, wParam, lParam);
в
return FALSE;
исправить мою проблему. Похоже, диалоговое окно нуждается в другой обработке, а затем в обычном окне.