多视代码

#if !defined(AFX_SPLITTERWND_H__5A32C2D9_8383_4046_9F1D_7B3F6F36BD6D__INCLUDED_)
#define AFX_SPLITTERWND_H__5A32C2D9_8383_4046_9F1D_7B3F6F36BD6D__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// SplitterWnd.h : header file
//

/////////////////////////////////////////////////////////////////////////////
// CSplitterWndEx window

class CSplitterWndEx : public CSplitterWnd
{
// Construction
public:
 CSplitterWndEx();

// Attributes
public:

// Operations
public:

// Overrides
 // ClassWizard generated virtual function overrides
 //{{AFX_VIRTUAL(CSplitterWndEx)
 //}}AFX_VIRTUAL
// virtual void OnDrawSplitter( CDC* pDC, ESplitType nType, const CRect& rect );
// virtual void OnInvertTracker( const CRect& rect );

// Implementation
public:
 void OnInvertTracker(const CRect& rect);
 void OnDrawSplitter( CDC* pDC, ESplitType nType, const CRect& rectArg );
 virtual ~CSplitterWndEx();

 // Generated message map functions
protected:
 //{{AFX_MSG(CSplitterWndEx)
 afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
 //}}AFX_MSG
 DECLARE_MESSAGE_MAP()
};

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_SPLITTERWND_H__5A32C2D9_8383_4046_9F1D_7B3F6F36BD6D__INCLUDED_)

 

----------------------------------------------------------------------------------

// SplitterWnd.cpp : implementation file
//

#include "stdafx.h"
#include "Chapter16.h"
#include "SplitterWnd.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CSplitterWndEx

CSplitterWndEx::CSplitterWndEx()
{
 //更改分割条和窗格间距大小
 m_cxSplitter = m_cySplitter = 10;
 m_cxSplitterGap = m_cySplitterGap = 10;
}

CSplitterWndEx::~CSplitterWndEx()
{
}


BEGIN_MESSAGE_MAP(CSplitterWndEx, CSplitterWnd)
 //{{AFX_MSG_MAP(CSplitterWndEx)
 ON_WM_LBUTTONDOWN()
 //}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CSplitterWndEx message handlers

void CSplitterWndEx::OnDrawSplitter(CDC *pDC, ESplitType nType, const CRect &rectArg)
{
 // if pDC == NULL, then just invalidate
 if (pDC == NULL)
 {
  RedrawWindow(rectArg, NULL, RDW_INVALIDATE|RDW_NOCHILDREN);
  return;
 }
 ASSERT_VALID(pDC);
 
 // otherwise, actually draw
 CRect rc = rectArg;
 switch(nType)
 {
 case splitBorder:
  //重画分割窗口边界,使左上为绿色 右下为红色
  pDC->Draw3dRect(rc,RGB(0,200,0),RGB(255,0,0));
  rc.InflateRect(-1,-1);
  pDC->Draw3dRect(rc,RGB(0,200,0),RGB(255,0,0));
  return;
 case splitBox:
  pDC->Draw3dRect(rc,RGB(0,0,0),RGB(0,0,0));
  rc.InflateRect(-1,-1);
  pDC->Draw3dRect(rc,RGB(0,0,0),RGB(0,0,0));
  rc.InflateRect(-1,-1);
  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(100,200,255));
  rc.InflateRect(-1,-1);
  pDC->Draw3dRect(rc,RGB(0,0,200),RGB(0,0,200));  
  return;
 default:
  ASSERT(FALSE);
 }
 // fill the middle
 pDC->FillSolidRect(rc, RGB(0,200,0));
}

void CSplitterWndEx::OnInvertTracker(const CRect &rect)
{
 ASSERT_VALID(this);
 ASSERT(!rect.IsRectEmpty());
 ASSERT((GetStyle() & WS_CLIPCHILDREN) == 0);
 
 // pat-blt without clip children on
 CDC* pDC = GetDC();
 // invert the brush pattern (looks just like frame window sizing)
 CBrush* pBrush = CDC::GetHalftoneBrush();
 HBRUSH hOldBrush = NULL;
 if (pBrush != NULL)
  hOldBrush = (HBRUSH)SelectObject(pDC->m_hDC, pBrush->m_hObject);
 pDC->PatBlt(rect.left, rect.top, rect.Width(), rect.Height(), PATINVERT);
 if (hOldBrush != NULL)
  SelectObject(pDC->m_hDC, hOldBrush);
 ReleaseDC(pDC);

}

void CSplitterWndEx::OnLButtonDown(UINT nFlags, CPoint point)
{
 // TODO: Add your message handler code here and/or call default 
 CSplitterWnd::OnLButtonDown(nFlags, point);
}
--------------------------------------------------------------------------------------------------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值