我在菜单“查看”里加了一项 “控制栏”
用来控制我的CDialogBar的显示隐藏。
我在MainFrame中处理了菜单"控制栏"的消息
当第一次点这个菜单时显示我的CDialogBar
并Check 这个菜单下一次就隐藏并UnCheck这个菜单这样本来是好用。
但是, 当CDialogBar浮动出来, 然后被关闭的时候, 我却无法UnCheck那个菜单, 怎么办?

解决方案 »

  1.   

    if(show)
      m_yourdialogbar.ShowWindow(SW_SHOW);
    else
      m_yourdialgobar.ShowWindow(SW_HIDE);
      

  2.   

    菜单中选项的Check与UnCheck:必须有完备的出里函数:
    void CMainFrame::OnPlay() 
    {
    // TODO: Add your command handler code here
    m_bDisplay = !m_bDisplay;  //取反
    } // The ID message is  "COMMAND"void CMainFrame::OnUpdatePlay(CCmdUI* pCmdUI) 
    {
    // TODO: Add your command update UI handler code here
    pCmdUI->SetCheck(m_bDisplay);
    } // The ID message is “UPDATE_COMMAND_UI”这两个必须有。
    BOOL变量 m_bDisplay 用来标是是否选上! m_bDisplay 不能忘记初始化你不能UnCheck应该是没有处理这个菜单选项的UPDATE_COMMAND_UI消息!!
    或是没有自在里面加上pCmdUI->SetCheck(m_bDisplay);-----------------------------------------------------------------
      

  3.   

    对不起, 我不是这个意思, 或许我表达错了. 不是不能UnCheck那个菜单, 而是说如果仅仅是由此菜单控制 CDialogBar的显示隐藏, 那么这便不成问题. 问题是当我不是使用此菜单来控制显示隐藏CDialogBar时(例如: 将CDialogBar浮动出来的时候, 点击CDialogBar的关闭按钮使它隐藏), 因为我没有获取和处理CDialogBar的消息, 所以我不知道CDialogBar到底现在是显示还是隐藏, 也不知道在什么时候该Check/UnCheck这个菜单.但是FrameWork本身的菜单, 用来控制工具栏/状态栏的显隐却能很好的工作, 当把工具条浮动出来
    并关闭时, 查看里的 "工具栏"会自动转为UnCheck, 不知道是怎么做的.我现在采用了一个笨方法解决了这个问题, 拦截MainFrame的WM_MENUSELECT, 一旦发现选择
    了POPUP型菜单就 根据当前CDialogBar的显隐状态Check/UnCheck这个菜单.但是MFC本身不是用这种方法, 那它是怎么做的?
      

  4.   

    maybe ShowControlBar( CControlBar* pBar, BOOL bShow, BOOL bDelay );
    gz
      

  5.   

    嘿, 现在的问题关键不在于怎么样显示/隐藏控制条, 而是怎么样在控制条显示/隐藏的时候, 能够通知我的程序, 好让我把菜单 "显示控制条" 给CHECK或UNCHECK一下啊.关于如何显示/隐藏控制条, 我这里有比各位提的都好的办法. CFrameWnd::OnCheckBar(int ctrlId); 就是最好的方法了.
      

  6.   

    嗯~~~, 应该是 OnBarCheck(int id)
      

  7.   

    和一般的菜单选像的CHECK或UNCHECK有什么区别吗?照一般作呀。
      

  8.   

    Check或UnCheck当然没有问题, 问题是什么时候Check,老大看清楚我问的是什么呀
      

  9.   

    在delphi中是在点击"查看"菜单的事件中实现的,点击了菜单,判断dialogbar是否显示,然后决定是否check;
    在VC中怎么判断dialogbar是否显示呢?
    就象delphi的
    menu1.Checked:=dialogbar.Visible;
      

  10.   

    dreamonce(小虫) 说的对, 我现在就是采用这种方法. 但是我发现CFrameWnd并不是采用这种方法, 不知道是怎么弄的呢.