你可以自己创建一个类,从splitter window类继承下来就行了,然后按照你要的要求自己去改。

解决方案 »

  1.   

    通过重载CSplitterWnd的虚方法OnDrawSplitter和OnInvertTracker可以达到这样的目的。下面的代码生成的效果是分割窗口的边界颜色为红色,分割条的颜色为绿色.代码如下:
    void CSplitterWndEx::OnDrawSplitter(CDC *pDC, ESplitType nType, const CRect &rectArg)
    {
      if(pDC==NULL) 
      { 
      RedrawWindow(rectArg,NULL,RDW_INVALIDATE|RDW_NOCHILDREN);
      return;
      } 
      ASSERT_VALID(pDC);
      CRect rc=rectArg;
      switch(nType) 
      { 
      case splitBorder:
      //重画分割窗口边界,使之为红色 
        pDC->Draw3dRect(rc,RGB(255,0,0),RGB(255,0,0));
        rc.InflateRect(-CX_BORDER,-CY_BORDER); 
        pDC->Draw3dRect(rc,RGB(255,0,0),RGB(255,0,0)); 
        return; 
      case splitBox:
        pDC->Draw3dRect(rc,RGB(0,0,0),RGB(0,0,0));
        rc.InflateRect(-CX_BORDER,-CY_BORDER); 
        pDC->Draw3dRect(rc,RGB(0,0,0),RGB(0,0,0));
        rc.InflateRect(-CX_BORDER,-CY_BORDER);
        pDC->FillSolidRect(rc,RGB(0,0,0)); 
        pDC->Draw3dRect(rc,RGB(0,0,0),RGB(0,0,0));
        return; 
      case splitBar: 
      //重画分割条,使之为绿色 
        pDC->FillSolidRect(rc,RGB(255,255,255));
        rc.InflateRect(-5,-5); 
        pDC->Draw3dRect(rc,RGB(255,0,0),RGB(255,0,0)); 
        return; 
      default: 
        ASSERT(FALSE); 
      } 
      pDC->FillSolidRect(rc,RGB(0,0,255));

    void CSplitterWndEx::OnInvertTracker(CRect &rect) 

      ASSERT_VALID(this);
      ASSERT(!rect.IsRectEmpty()); 
      ASSERT((GetStyle()&WS_CLIPCHILDREN)==0);
      CRect rc=rect; 
      rc.InflateRect(2,2);
      CDC* pDC=GetDC(); 
      CBrush* pBrush=CDC::GetHalftoneBrush();
      HBRUSH hOldBrush=NULL;
      if(pBrush!=NULL) hOldBrush=(HBRUSH)SelectObject(pDC->m_hDC,pBrush->m_hObject);
      pDC->PatBlt(rc.left,rc.top,rc.Width(),rc.Height(),BLACKNESS); 
      if(hOldBrush!=NULL) 
      SelectObject(pDC->m_hDC,hOldBrush);
      ReleaseDC(pDC); 

    同样只要继承CSplitterWnd中的其余的一些虚拟方法就可以生成具有自己个性的分割窗口了。
      

  2.   

    我认为这是MFC固化了的样式,既然MFC没有提供相应的接口去修改,你可能无法修改.
      

  3.   

    通过重载CSplitterWnd的虚方法OnDrawSplitter和OnInvertTracker可以达到这样的目的。下面的代码生成的效果是分割窗口的边界颜色为红色,分割条的颜色为绿色.代码如下:
    void CSplitterWndEx::OnDrawSplitter(CDC *pDC, ESplitType nType, const CRect &rectArg)
    {
      if(pDC==NULL) 
      { 
      RedrawWindow(rectArg,NULL,RDW_INVALIDATE|RDW_NOCHILDREN);
      return;
      } 
      ASSERT_VALID(pDC);
      CRect rc=rectArg;
      switch(nType) 
      { 
      case splitBorder:
      //重画分割窗口边界,使之为红色 
        pDC->Draw3dRect(rc,RGB(255,0,0),RGB(255,0,0));
        rc.InflateRect(-CX_BORDER,-CY_BORDER); 
        pDC->Draw3dRect(rc,RGB(255,0,0),RGB(255,0,0)); 
        return; 
      case splitBox:
        pDC->Draw3dRect(rc,RGB(0,0,0),RGB(0,0,0));
        rc.InflateRect(-CX_BORDER,-CY_BORDER); 
        pDC->Draw3dRect(rc,RGB(0,0,0),RGB(0,0,0));
        rc.InflateRect(-CX_BORDER,-CY_BORDER);
        pDC->FillSolidRect(rc,RGB(0,0,0)); 
        pDC->Draw3dRect(rc,RGB(0,0,0),RGB(0,0,0));
        return; 
      case splitBar: 
      //重画分割条,使之为绿色 
        pDC->FillSolidRect(rc,RGB(255,255,255));
        rc.InflateRect(-5,-5); 
        pDC->Draw3dRect(rc,RGB(255,0,0),RGB(255,0,0)); 
        return; 
      default: 
        ASSERT(FALSE); 
      } 
      pDC->FillSolidRect(rc,RGB(0,0,255));

    void CSplitterWndEx::OnInvertTracker(CRect &rect) 

      ASSERT_VALID(this);
      ASSERT(!rect.IsRectEmpty()); 
      ASSERT((GetStyle()&WS_CLIPCHILDREN)==0);
      CRect rc=rect; 
      rc.InflateRect(2,2);
      CDC* pDC=GetDC(); 
      CBrush* pBrush=CDC::GetHalftoneBrush();
      HBRUSH hOldBrush=NULL;
      if(pBrush!=NULL) hOldBrush=(HBRUSH)SelectObject(pDC->m_hDC,pBrush->m_hObject);
      pDC->PatBlt(rc.left,rc.top,rc.Width(),rc.Height(),BLACKNESS); 
      if(hOldBrush!=NULL) 
      SelectObject(pDC->m_hDC,hOldBrush);
      ReleaseDC(pDC); 

    同样只要继承CSplitterWnd中的其余的一些虚拟方法就可以生成具有自己个性的分割窗口了。