繁体   English   中英

Windows XP上的Winapi对话框损坏

[英]Winapi dialog broken on windows xp

我有一个游戏,在启动时会显示对话框以选择语言。 一切都适用于Windows 7/8,但不适用于Windows XP(或者如果我将兼容模式设置为Windows XP SP 3)。 控件向下移动,窗口无法移动,关闭按钮不起作用。

在Windows XP的左侧好对话框上,右侧断开

我创建这样的对话框:

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

使用Visual Studio 2008在窗口8 64位上编译。应用程序是32位。 有什么想法怎么了?

更改

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

return FALSE;

解决我的问题。 看起来对话框需要与普通窗口不同的处理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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