none
菜单和对应的工具栏按钮如何同步启用或禁用 RRS feed

  • 问题

  • 我用VC6.0写了一个SDI程序,添加了工具栏,
    工具栏按钮的ID和某些菜单的ID一样,
    当添加OnUpdateXXX()
    在此函数中禁用某个菜单项时,具有同样ID的工具栏按钮
    却不能禁用,请问这是不是VC6.0的一个BUG,
    如果不是有什么解决办法?
    2009年4月23日 3:00

答案

  • 使用m_wndToolBar.SetButtonInfo(1, 10000, TBSTYLE_BUTTON, 1);来禁用,
    需要启用时,把10000改成相应ID即可.
    • 已标记为答案 rootxue 2009年5月16日 10:33
    2009年5月16日 10:33

全部回复

  • 发个消息给工具栏对应按钮让他成为禁用状态即可.应该有类似函数,EnableWindow(FALSE)


    Hello world
    2009年4月23日 3:10
    版主
  • 不行啊,添加了如下的代码,
     CMainFrame *pFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd;
      pFrame->m_wndToolBar.GetDlgItem(IDM_CONNECT)->EnableWindow(0);
    在这EnableWindow代码里的
    ASSERT(::IsWindow(m_hWnd));这句话出错
    2009年4月23日 3:40
  • 2009年4月23日 3:46
    版主
  • 问题就在于它不是自动的,所以才怀疑是BUG

    2009年4月23日 4:24
  • 可用状态:   
    GetMenu()->EnableMenuItem(ID_FILE,MF_BYCOMMAND|MF_ENABLED);//菜单项
    m_wndToolBar.SetButtonStyle(m_wndToolBar.CommandToIndex(ID_FILE),TBBS_BUTTON);//工具栏按钮
    不可用状态:
    GetMenu()->EnableMenuItem(ID_FILE,MF_BYCOMMAND|MF_GRAYED);//菜单项
    m_wndToolBar.SetButtonStyle(m_wndToolBar.CommandToIndex(ID_FILE),TBBS_DISABLED);//工具栏按钮
    2009年4月23日 5:18
  • ellvincent.qu的方法也不行啊,我创建工具栏的方法是
    1. Construct the CToolBar object.
    2. Call the Create (or CreateEx) function to create the Windows toolbar and attach it to the CToolBar object.
    3. Call LoadBitmap to load the bitmap that contains the toolbar button images.
    4. Call SetButtons to set the button style and associate each button with an image in the bitmap.

    这应该没问题啊,怎么回事?

    2009年4月23日 9:08
  • 你手动创建一下看是否菜单和按钮是关联的,如果这都不行就得找找其他方面的问题了
    欢迎光临我的个人网站:http://www.joyvc.cn,本网站提供[IM即时通信|棋牌游戏|网游开发|UI编程|网络通讯|组件开发|图像多媒体|数据库]方面的VC/C++/C技术文章、源代码和教程资料
    2009年4月23日 9:23
    版主

  • 问题在于有时候可以同步禁用,
    而有时候却不行

    • 已标记为答案 rootxue 2009年4月25日 8:15
    • 取消答案标记 rootxue 2009年4月25日 8:15
    2009年4月23日 9:41
  • m_bAutoMenuEnable我把它设成了FALSE,暂时没出现问题!
    • 已标记为答案 rootxue 2009年4月25日 8:17
    • 取消答案标记 rootxue 2009年5月16日 10:31
    2009年4月25日 8:16
  • 使用m_wndToolBar.SetButtonInfo(1, 10000, TBSTYLE_BUTTON, 1);来禁用,
    需要启用时,把10000改成相应ID即可.
    • 已标记为答案 rootxue 2009年5月16日 10:33
    2009年5月16日 10:33