BS_OWNERDRAW按钮的悬停视觉状态不同

时间:2011-07-08 01:11:06

标签: windows winapi

我创建了一个BS_OWNERDRAW按钮:

HWND hwndClose = CreateWindow(WC_BUTTON, _T(""),
                    BS_PUSHBUTTON | BS_OWNERDRAW | WS_CHILD | WS_VISIBLE,
                    0, 0, 16, 16, win->hwndTocBox, (HMENU)IDC_TOC_CLOSE, ghinst, NULL);

当光标在按钮上方时,我想以不同的方式绘制它。我希望每次光标进入/离开我的按钮时都会收到WM_DRAWITEM消息,但情况似乎并非如此。即使标准窗口按钮在悬停情况下明显具有不同的视觉状态,我也只能得到它一次。

在悬停状态发生变化时,是否可以轻松获取发送WM_DRAWITEM的窗口,而无需执行诸如子类化按钮窗口和手动处理WM_MOUSEMOVE / WM_MOUSELEAVE消息等繁琐的事情?

1 个答案:

答案 0 :(得分:1)

这是ownerdraw的副作用。您在“常规”按钮上获得的视觉悬停效果实际上仅在启用其视觉样式时才会出现。但是,任何打开其ownerdraw样式的控件都将获得视觉样式。这是appcompat行为,无法禁用。你必须这么做。