在BS_CHECKBOX按钮上设置的视觉样式将覆盖NM_CUSTOMDRAW

时间:2019-01-07 09:08:10

标签: c++ winapi

我希望在C ++ WinAPI中创建一个复选框,并将自定义位图资源作为实际复选框。

不幸的是,当我创建一个WM_NOTIFY兼容的复选框(实际上以一种有意义的方式处理NM_CUSTOMDRAW)时,它似乎工作得很好,除了一件事:该复选框似乎在消失时改变状态。看起来,这与视觉样式有关,因此我只是用SetWindowTheme(chkLogging, _T(" "), _T(" "));取消了视觉样式。

HWND chkLogging = CreateWindowEx(
    NULL,
    _T("button"),
    _T("Export to log file"),
    WS_VISIBLE | WS_CHILD | BS_CHECKBOX | BS_NOTIFY,
    300, 100, 100, 20,
hWnd, (HMENU)IDC_EXPORTLOG, NULL, NULL);
CheckDlgButton(hWnd, IDC_EXPORTLOG, BST_CHECKED);
SetWindowTheme(chkLogging, _T(" "), _T(" "));

不幸的是,为该HWND设置主题将覆盖NM_CUSTOMDRAW渲染。我已经通过删除SetWindowTheme行并尝试使用默认主题对此进行了测试,并且复选框NM_CUSTOMDRAW的工作原理很吸引人。

通常这不是问题,但实际上它似乎可以正常用于普通按钮。

在此问题上的任何协助将不胜感激:)

0 个答案:

没有答案