【问题标题】:Owner-drawn button with BS_AUTORADIOBUTTON style具有 BS_AUTORADIOBUTTON 样式的所有者绘制的按钮
【发布时间】:2011-02-22 10:32:08
【问题描述】:

如何获得 BS_AUTORADIOBUTTON 的选中/未选中状态?我的代码目前不起作用。

void CPngButton::DrawItem( LPDRAWITEMSTRUCT lpDIS )
{
    ASSERT(lpDIS != NULL);

    UINT state = lpDIS->itemState;
    if (state & ODS_CHECKED)
    {
    // do stuff
    }
}

我也试过了

if (BST_CHECKED == SendMessage(BM_GETCHECK))

但这也不起作用。

【问题讨论】:

    标签: c++ windows winapi mfc ownerdrawn


    【解决方案1】:

    ODS_CHECKED 仅适用于菜单。 BM_GETCHECK 和 BM_GETSTATE 都可以提供检查状态:

    if (Button_GetState(lpDIS->hwndItem) & BST_CHECKED)
    

    【讨论】:

    • 请注意,您需要包含 windowsx.h 才能使用 Button_GetState 宏。
    【解决方案2】:

    根据documentationODS_CHECKED 标志只适用于菜单项:

    ODS_CHECKED 如果要检查菜单项,则设置此位。该位仅在菜单中使用。

    相反,要确定按钮的选中状态,您应该调用CButton::GetCheck function。它将返回以下值之一:

    BST_UNCHECKED           按钮未选中

    BST_CHECKED              按钮已选中

    BST_INDETERMINATE   按钮状态不确定 (仅当 BS_3STATEBS_AUTO3STATE 设置时)。

    例如:

    CButton myBtn;
    if (myBtn.GetCheck() = BST_CHECKED)
    {
        // Drawing code here...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多