Click here to Skip to main content
15,885,864 members
Articles / Desktop Programming / MFC

Custom Drawn Vertical Tree Control

Rate me:
Please Sign up or sign in to vote.
4.93/5 (39 votes)
14 Oct 20053 min read 148.2K   3.3K   107  
A CTreeCtrl derived class which is both: a normal CTreeCtrl or a fully custom drawn vertical tree control
/**
 * Copyright (C) 2005
 * Doga Arinir
 * 
 * Author: Doga Arinir
 * E-Mail: arinir@gmx.de
 *
 * This software is provided 'as-is', without any express or implied
 * warranty.  In no event will the author or the company be held liable 
 * for any damages arising from the use of this software. EXPECT BUGS!
 * 
 * You may use this software in compiled form in any way you desire PROVIDING it is
 * not sold for profit without the authors written permission, and providing that this
 * notice and the authors name is included. If the source code in this file is used in 
 * any commercial application then acknowledgement must be made to the author of this file.
 */


#if !defined(AFX_VERTICALTREE1_H__D9ACD532_0DEB_422B_9037_2EC4CCD72144__INCLUDED_)
#define AFX_VERTICALTREE1_H__D9ACD532_0DEB_422B_9037_2EC4CCD72144__INCLUDED_

#pragma warning(disable:4786)

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// VerticalTree1.h : Header-Datei
//
#include <map>

/////////////////////////////////////////////////////////////////////////////
// Fenster CVerticalTree 
#define BUTTON_SIZE 9
class CVerticalTree : public CTreeCtrl
{
struct ItemViewport
{
	ItemViewport(HTREEITEM i) {this->item = i;}
	HTREEITEM item;
	int cx;
	int cy;
	int x;
	int y;
};
typedef std::map<HTREEITEM, ItemViewport*> HTREE2VPMAP;
// Konstruktion
public:
	CVerticalTree();

// Attribute
public:


protected:
	BOOL m_bHasLines;
	BOOL m_bHasButtons;
	BOOL m_bCustomDrawn;
	int m_ItemSpaceX;
	int m_ItemSpaceY;

	CRect m_Rect;
	int   m_OffsetX;
	int   m_OffsetY;
	int   m_XMax;
	int   m_YMax; 

	COLORREF m_LeafTextColor;
	COLORREF m_LeafBkColor;
	COLORREF m_ItemTextColor;
	COLORREF m_ItemBkColor;

	HTREE2VPMAP m_HTree2VP;
	CPen	m_TreeLinePen;
// Operationen
public:
	void SetCustomDrawn(BOOL);
	BOOL GetCustomDrawn();

	//These operations are overwritten. The Problem is that those are non-virtual
	//functions...
	HTREEITEM InsertItem(LPTVINSERTSTRUCT lpInsertStruct);
	HTREEITEM InsertItem(UINT nMask, LPCTSTR lpszItem, int nImage, int nSelectedImage, UINT nState, UINT nStateMask, LPARAM lParam, HTREEITEM hParent, HTREEITEM hInsertAfter);
	HTREEITEM InsertItem(LPCTSTR lpszItem, HTREEITEM hParent = TVI_ROOT, HTREEITEM hInsertAfter = TVI_LAST);
	HTREEITEM InsertItem(LPCTSTR lpszItem, int nImage, int nSelectedImage, HTREEITEM hParent = TVI_ROOT, HTREEITEM hInsertAfter = TVI_LAST);
	BOOL DeleteItem(HTREEITEM hItem);
	BOOL DeleteAllItems();


// �berschreibungen
	// Vom Klassen-Assistenten generierte virtuelle Funktions�berschreibungen
	//{{AFX_VIRTUAL(CVerticalTree)
	//}}AFX_VIRTUAL

// Implementierung
public:
	int GetItemSpaceX();
	void SetItemSpaceX(int);
	int GetItemSpaceY();
	void SetItemSpaceY(int);
	virtual ~CVerticalTree();

	// Generierte Nachrichtenzuordnungsfunktionen
protected:
	void ResetScrollbars();
	__forceinline ItemViewport* GetViewport(HTREEITEM hItem);
	void DeleteAllViewportItems();
	void DrawItemText(CDC *pDC, HTREEITEM item, const char *text, int x, int y, int cx, int cy, COLORREF bkcolor,COLORREF txtcolor);
	int DrawItem(CDC *pDC, HTREEITEM, int x, int level = 0);
	void UpdateDimensions();
	//{{AFX_MSG(CVerticalTree)
	afx_msg void OnPaint();
	afx_msg BOOL OnEraseBkgnd(CDC* pDC);
	afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
	afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
	afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
	afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
	afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
	afx_msg void OnMouseMove(UINT nFlags, CPoint point);
	afx_msg void OnSizing(UINT fwSide, LPRECT pRect);
	afx_msg void OnSize(UINT nType, int cx, int cy);
	//}}AFX_MSG

	DECLARE_MESSAGE_MAP()
};

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

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ f�gt unmittelbar vor der vorhergehenden Zeile zus�tzliche Deklarationen ein.

#endif // AFX_VERTICALTREE1_H__D9ACD532_0DEB_422B_9037_2EC4CCD72144__INCLUDED_

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.


Written By
Chief Technology Officer W3L
Germany Germany
-Since 1th August 2007: Chief Technology Officer of W3L
-2002/08/01-2007/07/31: PhD student
-1997/10/15-2002/07/31: Studied Electrical Engineering and Computer Science

Comments and Discussions