原先的dialogBar是点击不能浮动的
使用FloatControlBar和Dock之后,点击dialogBar它的状态就在浮动\停靠中切换了
我要得到的效果是,当停靠后,点击dialogBar也不能改变为浮动状态怎么做?

解决方案 »

  1.   

    m_pDialogBar.m_pDockBar = NULL;
      

  2.   

    谢谢,这样做后出现了个新问题.
    我的是个dialogBar的继承类,重写了OnLButton消息,使得可以鼠标在dialogBar上按着不放
    可以拖动主窗口,
    void CShapeDialogBar::OnLButtonDown(UINT nFlags, CPoint point) 
    {
    //使可以移动皮肤对话框
    CWnd* pParent=GetParent();
    pParent->PostMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x,point.y));
        
    CDialogBar::OnLButtonDown(nFlags, point);
    }但EnableDocking和m_pDialogBar.m_pDockBar = NULL;之后,鼠标在dialogBar上按着不放只能拖动dialogBar,而主窗口不动了,怎么回事?
      

  3.   

    不要用CWnd* pParent=GetParent();
    在创建后,用个变量保存CWnd*bar.m_pwnd=this->GetSafeHwnd();HWND m_pwnd;
    .....pParent->PostMessage(m_pwnd,WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x,point.y));
      

  4.   

    错了bar.m_pwnd=this->GetSafeHwnd();HWND m_pwnd;
    .....::PostMessage(m_pwnd,WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x,point.y));
      

  5.   

    派生CDialogBar,在派生类里处理WM_LBUTTONDBLCLK,这样处理: if (m_pDockBar != NULL && OnToolHitTest(pt, NULL) == -1)
    {
    return;
    }
    else
    {
    CDialogBar::OnLButtonDblClk(nFlags, pt);
    }
      

  6.   

    还有一种办法,如果你打算学我那样派生CDockContext的话,重写它的ToggleDocking函数:
    void CMyDockContext::ToggleDocking()
    {
        if(m_pBar->IsKindOf(RUNTIME_CLASS(CDialogBar)))
        {
            return;
        }
        CDockContext::ToggleDocking();
    }
      

  7.   

    学习学习,MFC的消息还挺复杂的
      

  8.   

    怎么解决你这些问题都在MFC的源代码里可以找到解决方案。