如题,简单的说下,
工具栏1派生于CControlBar,并且在工具栏1上创建了一个对话框
再在对话框上添加一个工具条2在对话框源码内用ON_COMMAND无效,工具条2按钮为灰
后来我改在CMainFrame内用ON_COMMAND,当工具栏1停靠时,工具条2按钮有效,CMainFrame可以收到消息
当工具栏2浮动时,按钮就无效,如何解决?谢谢

解决方案 »

  1.   

     
    主要考虑到美化方面的东西
    本来是用button的
    后来用Ctoolbar来代替
      

  2.   

    如果考虑美化的问题,我觉得button比ctoolbar好用多了
      

  3.   

    在对话框程序内,没有像CMainFrame的命令更新机制了建议在对话框内处理WM_KIKEIDLE消息,并调用工具栏的命令更新函数void CXXXDlg::OnKikeIdle()
    {
        m_wndToolBar.OnUpdateCmdUI((CFrameWnd*)this, TRUE);
    }
      

  4.   

    要是我,我就用CDialogBar,想怎么放怎么放
      

  5.   

    你可以在controlbar中再建一个cframewnd,这样就可以再dock toolbar了。
      

  6.   

    经过我近两天的非持续性研究,终于解决了
    派生CToolbar 处理 WM_IDLEUPDATECMDUI消息LRESULT CControlBar::OnIdleUpdateCmdUI(WPARAM wParam, LPARAM)
    {
    // handle delay hide/show
    BOOL bVis = GetStyle() & WS_VISIBLE;
    UINT swpFlags = 0;
    if ((m_nStateFlags & delayHide) && bVis)
    swpFlags = SWP_HIDEWINDOW;
    else if ((m_nStateFlags & delayShow) && !bVis)
    swpFlags = SWP_SHOWWINDOW;
    m_nStateFlags &= ~(delayShow|delayHide);
    if (swpFlags != 0)
    {
    SetWindowPos(NULL, 0, 0, 0, 0, swpFlags|
    SWP_NOMOVE|SWP_NOSIZE|SWP_NOZORDER|SWP_NOACTIVATE);
    } // the style must be visible and if it is docked
    // the dockbar style must also be visible
    if ((GetStyle() & WS_VISIBLE) &&
    (m_pDockBar == NULL || (m_pDockBar->GetStyle() & WS_VISIBLE)))
    {
    CFrameWnd* pTarget = (CFrameWnd*)GetOwner();
    if (pTarget == NULL || !pTarget->IsFrameWnd())
    pTarget = GetParentFrame();
    if (pTarget != NULL)
    OnUpdateCmdUI(pTarget, (BOOL)wParam);
    }
    return 0L;
    }把CFrameWnd* pTarget = (CFrameWnd*)GetOwner();中的GetOwner()改为AfxGetMainWnd()
    当然还有其他的方法,我还没研究完,先暂时放下了貌似vs2005的output就是这样的,我就是仿它的
      

  7.   

    我现在做界面方面,很多都是frame,分隔view,view中嵌dialog,dialog中再嵌frame,frame有可能再分隔,dock不同的view............乱死了。