VC 修改分割条的样式

本文介绍如何通过重写CSplitterWnd的OnDrawSplitter和OnInvertTracker方法来自定义分割窗口的外观,包括更改边界和分割条的颜色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过重载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中的其余的一些虚拟方法就可以生成具有自己个性的分割窗口了。  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值