// JavaTreeCtrl.cpp : implementation file
//
#include "stdafx.h"
#include "VisualJava.h"
#include "JavaTreeCtrl.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CJavaTreeCtrl
IMPLEMENT_DYNAMIC(CJavaTreeCtrl,CTreeCtrl)
CJavaTreeCtrl::CJavaTreeCtrl()
{
m_brBackground.CreateSolidBrush(RGB(192,192,255));
}
CJavaTreeCtrl::~CJavaTreeCtrl()
{
m_brBackground.DeleteObject();
}
BEGIN_MESSAGE_MAP(CJavaTreeCtrl, CTreeCtrl)
//{{AFX_MSG_MAP(CJavaTreeCtrl)
ON_WM_PAINT()
//}}AFX_MSG_MAP
//ON_WM_NCCALCSIZE()
ON_WM_ERASEBKGND()
//ON_WM_PAINT()
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CJavaTreeCtrl message handlers
void CJavaTreeCtrl::OnNcPaint()
{
// get window DC that is clipped to the non-client area
CWindowDC dc(this);
CRect rcClient, rcBar;
GetClientRect(rcClient);
ClientToScreen(rcClient);
GetWindowRect(rcBar);
rcClient.OffsetRect(-rcBar.TopLeft());
rcBar.OffsetRect(-rcBar.TopLeft());
CDC mdc;
mdc.CreateCompatibleDC(&dc);
CBitmap bm;
bm.CreateCompatibleBitmap(&dc, rcBar.Width(), rcBar.Height());
CBitmap* pOldBm = mdc.SelectObject(&bm);
// client area is not our bussiness :)
dc.ExcludeClipRect(rcClient);
// draw borders in non-client area
CRect rcDraw = rcBar;
mdc.FillRect(rcDraw,&m_brBackground);
//rcDraw.DeflateRect(0,0,0,17);
//mdc.FillRect(rcDraw,&m_brBackground);
/*
CPen nPen(PS_SOLID,1,RGB(0,0,0));
CPen* pOldPen = mdc.SelectObject(&nPen);
mdc.MoveTo(0,rcDraw.bottom-18);
mdc.LineTo(0,rcDraw.bottom);
mdc.SelectObject(pOldPen);
*/
// erase parts not drawn
//mdc.IntersectClipRect(rcDraw);
// erase the NC background
mdc.FillSolidRect(rcDraw,RGB(0,0,0));
dc.BitBlt(0, 0, rcBar.Width(), rcBar.Height(), &mdc, 0, 0, SRCCOPY);
ReleaseDC(&dc);
mdc.SelectObject(pOldBm);
bm.DeleteObject();
mdc.DeleteDC();
}
void CJavaTreeCtrl::OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp)
{
CTreeCtrl::OnNcCalcSize(bCalcValidRects, lpncsp);
/**
CRect rc(lpncsp->rgrc[0]);
rc.DeflateRect(1,1,1,1);
LPRECT rt = &lpncsp->rgrc[0];
*rt = rc;
**/
}
BOOL CJavaTreeCtrl::PreCreateWindow(CREATESTRUCT& cs)
{
cs.style |= WS_CLIPCHILDREN;
return CTreeCtrl::PreCreateWindow(cs);
}
BOOL CJavaTreeCtrl::OnEraseBkgnd(CDC* pDC)
{
return TRUE;
}
void CJavaTreeCtrl::OnPaint()
{
CPaintDC dc(this); // device context for painting
CTreeCtrl::DefWindowProc(WM_PAINT,(WPARAM)dc.m_hDC,0);
// Do not call CTreeCtrl::OnPaint() for painting messages
}