具有BS_AUTORADIOBUTTON样式的所有者绘制按钮

时间:2011-02-22 10:32:09

标签: c++ windows winapi mfc ownerdrawn

如何获得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))

但这也不起作用。

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

根据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...
}