首先对话框有两个radio按钮,IDC_RADIO_FEMALE group true IDC_RADIO_male  group false
消息映射如下:
ON_BN_CLICKED(IDC_RADIO_MALE, &CLoverMatchingView::OnClickedRadioMale)
ON_BN_CLICKED(IDC_RADIO_FEMALE, &CLoverMatchingView::OnClickedRadioFemale)
函数内容如下:
void CLoverMatchingView::OnClickedRadioMale()
{
// TODO: 在此添加控件通知处理程序代码
if(m_radio_gender)
return; if(!randomExecuted)
m_radio_gender=1;
else
{
if(IDYES==MessageBoxW(TEXT("请慎重!\r\n是否继续?"),
TEXT("警告"),MB_YESNO|MB_ICONWARNING))
{
m_radio_gender = 1;
randomExecuted=false;
}
else
{
CheckRadioButton(IDC_RADIO_FEMALE,IDC_RADIO_MALE,IDC_RADIO_FEMALE);
}
}
}void CLoverMatchingView::OnClickedRadioFemale()
{
// TODO: 在此添加控件通知处理程序代码
if(!m_radio_gender)
return; if(!randomExecuted)
m_radio_gender=0;
else
{
if(IDYES==MessageBoxW(TEXT("请慎重!\r\n是否继续?"),
TEXT("警告"),MB_YESNO|MB_ICONWARNING))
{
m_radio_gender = 0;
randomExecuted=false;
}
else
{
CheckRadioButton(IDC_RADIO_FEMALE,IDC_RADIO_MALE,IDC_RADIO_MALE);
}
}
}现在,运行时都没有什么问题,通过某个button响应函数把randomExecuted设置为true时候也可以运行,问题是,当我把窗口最小化之后,在显示的时候,会弹出多个MessageBox对话框,你选择Yes或者No,还是如此,设置断点后可以发现程序不停地进入ButtonClicked函数。难道最小化最大化之后有什么特别的机制。求助啊,找了很多资料都没解决,与网上说的Timer响应无关对话框控件

解决方案 »

  1.   

    你把 “CheckRadioButton(IDC_RADIO_FEMALE,IDC_RADIO_MALE,IDC_RADIO_FEMALE);”
    注释掉 看看。
      

  2.   

    这段代码没什么问题,是不是你在timer中调用了这些函数了
      

  3.   

    1楼的方法是可以的,本来我最早使用的是SetChecked()函数的,后来改成这个函数,但是这个功能必须要有,这中间的机制是什么,看了很多关于MessageBox抢占消息循环的资料依然无解
      

  4.   

    OnClickedRadioFemale()
    是否有其它地方调用这个函数?、 RadioButton 的ID是否重复了???
      

  5.   

    是不是你在哪里设定了。焦点!导致每次响应刷新的时候。响应了ButtonClicked函数。如果还不行。截断下消息吧。把这个过滤掉。虽然没办法毕竟功能实现了。
      

  6.   

    7楼的方法,焦点是什么意思,是不让他tab键停留吗?这个我设置了,但是对于radio button好像没反应呢,他照样停留,你说的这个很有道理,我试试,thanks
      

  7.   

    radio按钮 与 ON_BN_CLICKED的关系稍微理理。
      

  8.   

    插了蛮久资料,也spy了蛮久,应该是由于WM_SETFOCUS的缘故,在窗口最小化在最大化后会发出WN_SETFOCUS,但是它和BN_CLICKED的关系尚不明确,一般资料显示最好不要自己处理这些消息。。
    最后,给出我只记得解决方案:在父窗口中截获所有的WM_LBUTTONDOWN消息,判断point是否在radio button上,再决定是否处理就这样问题就迎刃而解了
      

  9.   

    radio 通常 不是 你那样处理的。
    两个radio按钮,IDC_RADIO_FEMALE (group) IDC_RADIO_male  只需要关联一个变量。
    int m_Sex;不用响应点击。