我使用MFC创建了一个对话框,它有5个单选按钮。我希望在其他单选按钮被选中时收到通知。
现在,每当单击任何单选按钮时,我都会收到通知。但我只需要在单选按钮中有更改时才能收到这些通知。
ON_BN_CLICKED(IDC_RADIO1, &CMyDlg::OnRadioButtonClicked)
ON_BN_CLICKED(IDC_RADIO1, &CMyDlg::OnRadioButtonClicked)
ON_BN_CLICKED(IDC_RADIO1, &CMyDlg::OnRadioButtonClicked)
ON_BN_CLICKED(IDC_RADIO1, &CMyDlg::OnRadioButtonClicked)
ON_BN_CLICKED(IDC_RADIO1, &CMyDlg::OnRadioButtonClicked)谢谢
发布于 2012-06-05 18:48:54
如果我没理解错的话,您想知道某个特定单选按钮(IDC_RADIO1)的选中状态何时发生变化。
然后将此状态作为成员变量存储在对话框类中。int m_radio1Checked;根据需要在构造函数中将其初始化为0或1,并在OnInitDialog()中适当地使用SetCheckRadioButton()。
然后处理消息映射中每个单选按钮的单击:
ON_BN_CLICKED(IDC_RADIO1, &CMyDlg::OnRadioButtonClicked)
ON_BN_CLICKED(IDC_RADIO2, &CMyDlg::OnRadioButtonClicked)
ON_BN_CLICKED(IDC_RADIO3, &CMyDlg::OnRadioButtonClicked)
ON_BN_CLICKED(IDC_RADIO4, &CMyDlg::OnRadioButtonClicked)
ON_BN_CLICKED(IDC_RADIO5, &CMyDlg::OnRadioButtonClicked)并在处理程序中检查是否有更改。
void CMyDlg::OnRadioButtonClicked()
{
int oldState = m_radio1Checked;
int newState = GetDlgItem(IDC_RADIO1)->GetChecked();
m_radio1Checked = newState;
if (oldState != newState)
// do something ...
}发布于 2013-06-17 17:27:41
可以使用ON_CONTROL_RANGE(BN_CLICKED,firstctrlid,lastcntrlid,memberfx)
发布于 2012-06-07 07:09:32
首先创建所有单选按钮的组。使用向导添加整数类型的成员变量。在通用处理程序中,调用UpdateData()并检查变量的值。它应该设置为组中按钮的值(从零开始),从组中的第一个按钮开始设置为0。确保按连续的Z顺序(Tab键顺序)设置按钮。
https://stackoverflow.com/questions/10893425
复制相似问题