Win32 对话框的系统菜单使用经典(无主题)风格并且行为怪异

问题描述 投票:0回答:1

我正在使用

DialogBoxW
打开一个对话框,无论出于何种原因,它的系统菜单(标题栏菜单)使用经典主题(无主题)样式并且行为很奇怪。其中的菜单项实际上只执行一半时间的操作,其余时间,它只是再次重新打开菜单。这是我的 DlgProc。

void DlgProc(
    HWND   hWnd,
    UINT   uMsg,
    WPARAM wParam,
    LPARAM lParam
)
{
    switch (uMsg)
    {
        case WM_CLOSE:
            DestroyWindow(hWnd);
            break;
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        case WM_INITDIALOG:
        {
            HWND hFileLabel = GetDlgItem(hWnd, IDD_OPENWITH_FILE);
            SetWindowTextW(hFileLabel, szFileName);
            break;
        }
        default:
            DefWindowProcW(hWnd, uMsg, wParam, lParam);
            break;
    }
}

我添加了 Common Controls 6.0 依赖项,并且对话框本身是主题的,所以我不知道为什么会发生这种情况。

c winapi dialog uxtheme
1个回答
0
投票

这不是一个有效的对话过程。对话过程必须这个签名

INT_PTR Dlgproc(
  HWND unnamedParam1,
  UINT unnamedParam2,
  WPARAM unnamedParam3,
  LPARAM unnamedParam4
)

对话框管理器将返回值用于各种用途。由于您的“对话过程”不返回值,因此对话管理器正在对不确定的值进行操作。因此,该行为是未定义的。

© www.soinside.com 2019 - 2024. All rights reserved.