Activex中加入了工具栏,如何使用Update_Command_UI那种的功能来更新工具栏按钮状态appwizzard中没有WM_IDLEUPDATECMDUI,WM_KICKIDLE消息,全部手动添加的全部没响应!好几天了,想不出有什么办法,求指教

解决方案 »

  1.   

    ON_Update_Command_UI用菜单显示就能触发啊,点击菜单就触发了难道用Invalidate无效么?
      

  2.   

    你看看这个帖子
    http://bbs.csdn.net/topics/40150965
      

  3.   

    上面的帖子看过了,确实是菜单可以响应的
    工具条就是不行......,郁闷之极我有个想法,就是怎么能获得工具栏上按钮的CCmdUI 然后在OnTimer里手动更新。可以么?
    如果可以怎么才能获得CCmdUI呢
      

  4.   

    //-------菜单创建开始
    long lStyle;
    lStyle = ::GetWindowLong(m_hWnd, GWL_STYLE);lStyle &= WS_POPUP;//WS_OVERLAPPEDWINDOW;
    lStyle |= CBRS_GRIPPER;
    ::SetWindowLong(m_hWnd, GWL_STYLE, lStyle);
    CWnd * pWnd = AfxGetMainWnd();

    m_Menu = new CMenu;
    m_Menu->LoadMenu(IDR_MAINMENU);
    SetMenu(m_Menu);
    m_Menu->Detach();
    //-------菜单创建结束
    //-------工具栏创建开始
    if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
      | TBSTYLE_FLAT | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
      !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
    {
    TRACE0("Failed to create toolbar\n");
    return -1;      // fail to create
    }
    //-------工具栏创建结束
    不同的是菜单是WS_POPUP的,工具栏不是,工具栏用popup的话就直接报错了
      

  5.   

    void CXXXCtrl::OnTimer(UINT nIDEvent) 
    {
    CCmdUI state;
    state.m_nID = ID_DXF_BTN; 
    state.m_pOther = this;
    state.m_nIndex = 8;   //需要截取update_command_ui的工具栏按钮索引,也就是从0数第8个
    CWnd::OnCmdMsg(state.m_nID, CN_UPDATE_COMMAND_UI, &state, NULL); COleControl::OnTimer(nIDEvent);
    }这样添加了
    void CXXXCtrl::OnUpdateDxfBtn(CCmdUI* pCmdUI) 
    {
    pCmdUI->SetCheck(1);//m_ptrData->GetPtrConfigData()->GetChartShow());
    }倒是可以响应了,但是按钮在setcheck后仍然为凸起状态,实际貌似没有效果,求帮助!快疯了