3

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

但这也不起作用。

4

2 回答 2

4

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

if (Button_GetState(lpDIS->hwndItem) & BST_CHECKED)
于 2011-02-22T10:42:42.617 回答
1

根据文档,该ODS_CHECKED标志仅适用于菜单项:

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

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

BST_UNCHECKED           该按钮未选中

BST_CHECKED               按钮被选中

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

例如:

CButton myBtn;
if (myBtn.GetCheck() = BST_CHECKED)
{
    // Drawing code here...
}
于 2011-02-22T10:43:09.277 回答