试图创建所有者绘制切换按钮的C++ Win32

试图创建所有者绘制切换按钮的C++ Win32,c++,winapi,owner,C++,Winapi,Owner,我已经尝试了很长一段时间以及几天来创建一个切换按钮。具有上升或下降状态的按钮 花了一天时间才意识到不可能创建一个所有者绘制的切换按钮,复选框和pushlike不起作用。使用“所有者绘制”时,复选框和常规按钮之间没有区别。MSDN还注意到,您不能将“所有者绘制”与这些样式中的任何一种一起使用 从阅读中我发现你必须自己做,通常一点问题都没有,但我无法得到任何真正的反应。也就是说,如果我快速点击,什么也不会发生,有时我会点击,它会改变状态,其他时候不会,只有当我点击一个不同的按钮时才会更新 我创建了一

我已经尝试了很长一段时间以及几天来创建一个切换按钮。具有上升或下降状态的按钮

花了一天时间才意识到不可能创建一个所有者绘制的切换按钮,复选框和pushlike不起作用。使用“所有者绘制”时,复选框和常规按钮之间没有区别。MSDN还注意到,您不能将“所有者绘制”与这些样式中的任何一种一起使用

从阅读中我发现你必须自己做,通常一点问题都没有,但我无法得到任何真正的反应。也就是说,如果我快速点击,什么也不会发生,有时我会点击,它会改变状态,其他时候不会,只有当我点击一个不同的按钮时才会更新

我创建了一个全局变量,用于确定按钮是否应显示为向上或向下状态。在命令中,我设置了当按钮IDC_BTN_切换时,它将在bool上设置相反的值

然后绘制项目部分:

// 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_切换时为真,且顶部布尔值也为真

正常按钮功能正常,当我单击它们时,它会立即显示关闭状态、释放、恢复正常,切换按钮几乎没有响应


ODS_的测试是否检查而不是ODS_选择的帮助?不,当我使用owner Drawed时,它肯定不起作用。测试时,ODS_选中,ODS_选择两个触发器,即使使用正常的按钮。由于您正在绘制,基本上是您控制按钮的外观,所以问题是您需要响应什么状态/输入。首先,我将打印出您在WM_DRAWITEM处理程序中看到的状态值,并查看是否可以建立模式。MSDN说,如果您拥有draw,任何按钮控件都将仅作为按钮控件。我把它添加到我的绘图项中:TESTINTpDIS->itemState;每个按钮的结果是:0、0、16。这是“所有者绘制”按钮和“所有者绘制”复选框。我不知道为什么每画一个按钮就返回3个整数。。。无论配置如何,结果都是一样的。我有它的设置,这样当点击按钮时,有一个bool设置为true,然后当绘制按钮时,我检查bool如何显示它。它不会更新按钮,我必须单击另一个按钮来更新另一个。我发现如果不看到更多的代码,就很难提供更多帮助,但是在切换标志后,您是否只需要强制按钮重新绘制?