状态栏上有几个按钮,“采集”(ID_COLLECT_DLG)“停止”(ID_STOP),
需求:按下“采集”的时候,程序响应采集函数(onCollect()),按钮一直处于“按下”状态,直到按下“停止”按钮为止。
问题:我用ON_UPDATE_COMMAND_UI来进行设置按钮的状态,代码如下:
void CMainFrame::OnUpdateCollectDlg(CCmdUI* pCmdUI) 
{
pCmdUI->SetCheck();
}
可是这样的话,程序一运行就直接进入“采集”按钮按下的状态,请问这种情况我该如何解决?谢谢

解决方案 »

  1.   

    当按下"采集"时,置一个变量为TRUE,当按下"停止"时,把这变量置为FALSE,初始化时为FALSE;
    pCmdUI->SetCheck(m_bDown);
      

  2.   

    void CMainFrame::OnUpdateCollectDlg(CCmdUI* pCmdUI) 
    {
    pCmdUI->Enable(m_bItemSearch);//m_bItemSearch是BOOL型变量,FALSE变灰不能
                                             //操作,TRUE变亮可以操作
    }初始化为TURE,按下为FALSE,另一个按钮按下为TRUE。
    另一个按钮相同
      

  3.   

    谢谢你们的回复,可是为什么我的程序在调试的时候,点击“调试”按钮,程序一直在
    OnUpdateCollectDlg()这个函数内,导致程序无法运行,请问这是为什么?谢谢。
      

  4.   

    代码实在太长,贴出来一部分如下:
    MainFrm.hprotected:
    afx_msg void OnCollectDlg();(这是一个COMMAND消息)
    afx_msg void OnUpdateCollectDlg(CCmdUI* pCmdUI);(这是一个UPDATE_COMMAND_UI消息)
    其中还有个onTimer的消息
    afx_msg void OnTimer(UINT nIDEvent);
    其他的消息可能没有关系,
    void CMainFrame::OnCollect()
    {
    m_bCollDown = true;
    SetTimer(1,1000,NULL);
    }void CMainFrame::OnUpdateCollectDlg(CCmdUI* pCmdUI) 
    {
    // TODO: Add your command update UI handler code here pCmdUI->SetCheck(m_bCollDown);
    }
    我怀疑是否是那个OnTimer的原因,因此在OnCollect()中把SetTimer(1,1000,NULL)注释掉了,还是不行,
      

  5.   

    我觉得问题不在是Enable还是SetCheck,我的程序在一直调用OnUpdateCollectDlg(),在这儿陷入了死循环,呵呵,不知道为什么,呵呵
      

  6.   

    不要在这里下断点,因为界面更新的时候要调用UpdateCmdUI,所以就进入,然后断点,然后又更新界面,然后又进入………………死循环
    你可以在一次中断后看看数据,把断点去掉。
      

  7.   

    Mackz(在相互)兄说的是正解,但是问题还是出现在OnTimer这个消息上面,原来我没有把OnTimer去掉的时候,把断点去掉程序界面还是出现不了,现在去掉OnTimer,去掉断点就可以了,多谢。呵呵