碰到个奇怪的问题,程序是单文档视图程序,静态拆分成多个视图,有个视图是FormView视图,界面上有一组单选按钮,假设为a,b,c。
从b切到c的时候,为了加个二次确认,我响应了单选框c的BN_CLICKED消息,在其中用AfxMessageBox弹出提问框,如果点是,正常切换。
如果点否,则认为使用者希望放弃这次切换,所以要让其状态弹回到单选框b上。我置单选框对应的变量m_nStatus为单选框b的值,再通过
UpdateDate(FALSE),让其切回b。(用SetCheck也试过,也是可以)现在的问题是,当b切到c,点否时,没什么问题,正常切回b。但是如果最小化窗口,或者缩小到系统托盘,还原后又弹出了提问框(就是在
单选框c的单击响应函数里的那个),而且是反复弹出,要按好多次才能关掉该弹出对话框。看起来就像c的单击响应函数被多次调用了。跟踪
看了call stack,发现是OnCmdMsg等一系列处理消息的过程函数调用的它。不知道这是什么情况,是不是这样强行让单选按钮弹回,会使得
该消息滞留在消息队列之类的。实在想不出什么原因,请大家帮忙看看。或者是这样的单选按钮切换需求不应该这样做,有其正确的做法,也请
告知,谢谢。

解决方案 »

  1.   

    大致代码如下:
    void CTryRadioButtonView::OnRadio3() 
    {
    int nRet = AfxMessageBox("Sure ?",MB_YESNO); if (nRet == IDNO)
    {
    m_nStatus = 1;
    UpdateData(FALSE);
    }
    }随便建了一个单文档视图,就会发生这个问题。估计是不能这么做,违反了什么显而易见的问题,但一时想不到。望大家不吝指教。
      

  2.   

    应该是程序重复调用了OnRadio3()吧
      

  3.   

    void CTryRadioButtonView::OnRadio3() 

    int nRet = AfxMessageBox("Sure ?",MB_YESNO); if (nRet == IDNO) 

    m_nStatus = 1; 
    UpdateData(FALSE); 

    }就是在第三个单选按钮的BN_CLICKED响应函数里调用的....让它弹回到第二个。不知道是不是这么做有问题。
    我随便新建了个单文档视图的formview的,这样做也出现同样的问题。疑惑中