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

C++ 具有BS_AUTORADIOBUTTON样式的所有者绘制按钮,c++,windows,winapi,mfc,ownerdrawn,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

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

但这也不起作用。

ODS\u CHECKED仅适用于菜单。BM_GETCHECK和BM_GETSTATE都可以提供选中状态:

if (Button_GetState(lpDIS->hwndItem) & BST_CHECKED)
根据ODS_CHECKED标志仅适用于菜单项:

ODS\u CHECKED
如果要检查菜单项,则设置此位。此位仅在菜单中使用

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

BST\u未选中
按钮未选中

BST\u已选中
按钮已选中

BST\u不确定
按钮状态不确定 (仅当
BS_3STATE
BS_AUTO3STATE
设置时)

例如:

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

请注意,您需要包含
windowsx.h
才能使用
按钮\u GetState
宏。