我已经尝试了很长时间(好几天)来创建一个切换按钮。具有向上或向下状态的按钮。
花了一天时间才意识到无法创建所有者绘制的切换按钮,复选框和 pushlike 不起作用。使用所有者绘制时,复选框或常规按钮之间没有区别(MSDN 还指出,您不能将所有者绘制与任何这些样式一起使用。)
从阅读中我发现你必须自己做,通常根本不是问题,但我无法获得任何真正的“响应能力”。也就是说,如果我快速点击,什么也不会发生,有时我会点击它并改变状态,其他时候不会,只有当我点击不同的按钮时才会更新。
我创建了一个全局变量,用于判断按钮是否应显示为向上或向下状态。在我设置的命令中,当按钮 IDC_BTN_TOGGLE 时,它将在布尔值上设置相反的值。
然后是draw item部分:
// button down
if ((pDIS->itemState & ODS_SELECTED) || showButtonDown) {
oldBrush = (HBRUSH)SelectObject(pDIS->hDC, theme.hBrush[BRUSH_BUTTON2]);
}
// button up
else {
oldBrush = (HBRUSH)SelectObject(pDIS->hDC, theme.hBrush[BRUSH_BUTTON]);
}
我所有的按钮都是所有者绘制的并贯穿其中。showButtonDown 仅在绘制 IDC_BTN_TOGGLE 时为真,并且顶部布尔值也为真。
普通按钮功能正常,当我点击它们时,它立即显示向下状态,松开,恢复正常,切换按钮几乎没有响应。