You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

900 lines
39 KiB
C++

// XTPTreeBase.h interface for the CXTPTreeBase class.
//
// This file is a part of the XTREME CONTROLS MFC class library.
// (c)1998-2012 Codejock Software, All Rights Reserved.
//
// THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
// RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
// CONSENT OF CODEJOCK SOFTWARE.
//
// THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
// IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
// YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
// SINGLE COMPUTER.
//
// CONTACT INFORMATION:
// support@codejock.com
// http://www.codejock.com
//
/////////////////////////////////////////////////////////////////////////////
//{{AFX_CODEJOCK_PRIVATE
#if !defined(__XTTREEBASE_H__)
#define __XTTREEBASE_H__
//}}AFX_CODEJOCK_PRIVATE
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
//===========================================================================
// Summary:
// CXTPTreeBase is a CTreeView derived class. It extends the CTreeView
// class to add additional functionality, including tree traversal, searching,
// color, and settings.
//===========================================================================
class _XTP_EXT_CLASS CXTPTreeBase
{
protected:
// ----------------------------------------------------------------------
// Summary:
// CLRFONT structure is used to by the CXTPShellTreeCtrl and
// CXTPShellTreeView class to maintain font information for a
// particular tree item.
// See Also:
// CXTPShellTreeCtrl, CXTPShellTreeView
// ----------------------------------------------------------------------
struct CLRFONT
{
// ----------------------------------------------------------------------
// Summary: Constructs a CLRFONT struct and initializes member data.
// ----------------------------------------------------------------------
CLRFONT();
LOGFONT logfont; // A LOGFONT object that represents the tree item font.
COLORREF color; // An RGB value that represents the text color for a tree item.
COLORREF colorBack; // An RGB value that represents the background color for a tree item.
};
// ----------------------------------------------------------------------
// Summary:
// Map for maintaining HTREEITEM to CLRFONT structure relationships.
// Remarks:
// CMap definition used by the CXTPTreeBase class to maintain
// a list of HTREEITEM to CLRFONT structure relationships representing
// tree item that has user defined color information.
// See Also:
// CXTPTreeBase, CLRFONT
// ----------------------------------------------------------------------
typedef CMap<void*, void*, CLRFONT, CLRFONT&> CColorFontMap;
protected:
//-----------------------------------------------------------------------
// Summary:
// Protected constructor used by dynamic creation. Constructs a CXTPTreeBase
// object
//-----------------------------------------------------------------------
CXTPTreeBase();
//-----------------------------------------------------------------------
// Summary:
// Destroys a CXTPTreeBase object, handles cleanup and deallocation
//-----------------------------------------------------------------------
virtual ~CXTPTreeBase();
public:
//-----------------------------------------------------------------------
// Summary:
// This member function will retrieve the tree view item that has the
// specified relationship, indicated by the 'nCode' parameter, to 'hItem'.
// Parameters:
// hItem - Handle of a tree item.
// nCode - A flag indicating the type of relation to 'hItem'. This flag can be
// one of the values listed in the Remarks section.
// Remarks:
// nCode can be one of the following values:
// * <b>TVGN_CARET</b> Retrieves the currently selected item.
// * <b>TVGN_CHILD</b> Retrieves the first child item. The 'hItem'
// parameter must be NULL.
// * <b>TVGN_DROPHILITE</b> Retrieves the item that is the target
// of a drag-and-drop operation.
// * <b>TVGN_FIRSTVISIBLE</b> Retrieves the first visible item.
// * <b>TVGN_NEXT</b> Retrieves the next sibling item.
// * <b>TVGN_NEXTVISIBLE</b> Retrieves the next visible item
// that follows the specified item.
// * <b>TVGN_PARENT</b> Retrieves the parent of the specified
// item.
// * <b>TVGN_PREVIOUS</b> Retrieves the previous sibling item.
// * <b>TVGN_PREVIOUSVISIBLE</b> Retrieves the first visible
// item that precedes the specified item.
// * <b>TVGN_ROOT</b> Retrieves the first child item of the
// root item of which the specified item is a part.
//
// The Non nCode version gets the next item as if the outline was completely
// expanded.
// Returns:
// The handle of the next item if successful, otherwise returns
// NULL.
//-----------------------------------------------------------------------
virtual HTREEITEM GetNextItem(HTREEITEM hItem) const;
virtual HTREEITEM GetNextItem(HTREEITEM hItem, UINT nCode) const; // <combine CXTPTreeBase::GetNextItem@HTREEITEM@const>
//-----------------------------------------------------------------------
// Summary:
// This member function gets the previous item as if the outline was
// completely expanded.
// Parameters:
// hItem - Handle of the reference item.
// Returns:
// The handle of the item immediately above the reference item.
//-----------------------------------------------------------------------
virtual HTREEITEM GetPrevItem(HTREEITEM hItem) const;
//-----------------------------------------------------------------------
// Summary:
// This member function retrieves the last item in the branch.
// Parameters:
// hItem - Node identifying the branch. NULL will return the last item in the
// outline.
// Returns:
// The handle of the last item.
//-----------------------------------------------------------------------
virtual HTREEITEM GetLastItem(HTREEITEM hItem) const;
//-----------------------------------------------------------------------
// Summary:
// This member function searches the entire tree for an item label
// that contains the search string.
// Parameters:
// lpszSearch - String to search for.
// bCaseSensitive - TRUE if the search should be case sensitive.
// bDownDir - TRUE for down.
// bWholeWord - TRUE if search should match whole words.
// hItem - Handle of the tree item to start searching from, NULL to use
// the currently selected tree item.
// Returns:
// The handle to the item, or returns NULL.
// See Also:
// IsFindValid
//-----------------------------------------------------------------------
virtual HTREEITEM FindItem(LPCTSTR lpszSearch, BOOL bCaseSensitive = FALSE, BOOL bDownDir = TRUE, BOOL bWholeWord = FALSE, HTREEITEM hItem = NULL);
//-----------------------------------------------------------------------
// Summary:
// This member function searches the entire branch specified by htiItem for an item label
// that contains the search string.
// Parameters:
// lpszSearch - String to search for.
// bCaseSensitive - TRUE if the search should be case sensitive.
// bWholeWord - TRUE if search should match whole words.
// htiItem - Handle of the tree item to start searching from, NULL to use
// the currently selected tree item.
// Returns:
// The handle to the item, or returns NULL.
// See Also:
// IsFindValid
//-----------------------------------------------------------------------
virtual HTREEITEM FindItemInBranch(LPCTSTR lpszSearch, BOOL bCaseSensitive /*= FALSE*/, BOOL bWholeWord /*= FALSE*/, HTREEITEM htiItem /*= NULL*/);
//-----------------------------------------------------------------------
// Summary:
// This member function sets the font for the reference tree item.
// Parameters:
// hItem - Handle of the reference item.
// logfont - New font for the tree item.
//-----------------------------------------------------------------------
virtual void SetItemFont(HTREEITEM hItem, LOGFONT& logfont);
//-----------------------------------------------------------------------
// Summary:
// This member function retrieves the current LOGFONT font used by
// the tree item.
// Parameters:
// hItem - Handle of the reference item.
// plogfont - Pointer to receive LOGFONT information.
// Returns:
// TRUE if successful, otherwise returns FALSE.
//-----------------------------------------------------------------------
virtual BOOL GetItemFont(HTREEITEM hItem, LOGFONT* plogfont);
//-----------------------------------------------------------------------
// Summary:
// This member function sets the reference tree item font to bold.
// Parameters:
// hItem - Handle of the reference item.
// bBold - TRUE for bold font.
//-----------------------------------------------------------------------
virtual void SetItemBold(HTREEITEM hItem, BOOL bBold = TRUE);
//-----------------------------------------------------------------------
// Summary:
// This member function checks whether or not the tree item has a bold font.
// Parameters:
// hItem - Handle of the reference item.
// Returns:
// TRUE if the tree item has a bold font, otherwise returns FALSE.
//-----------------------------------------------------------------------
virtual BOOL GetItemBold(HTREEITEM hItem);
//-----------------------------------------------------------------------
// Summary:
// This member function sets the tree item text color.
// Parameters:
// hItem - Handle of the reference item.
// color - RGB value for the tree item's text.
//-----------------------------------------------------------------------
virtual void SetItemColor(HTREEITEM hItem, COLORREF color);
//-----------------------------------------------------------------------
// Summary:
// This member function sets the tree item background color.
// Parameters:
// hItem - Handle of the reference item.
// color - RGB value for the tree item's text.
//-----------------------------------------------------------------------
virtual void SetItemBackColor(HTREEITEM hItem, COLORREF color);
//-----------------------------------------------------------------------
// Summary:
// This member function returns the RGB value for the specified
// tree item text color or (COLORREF)-1, if color was not set.
// Parameters:
// hItem - Handle of the reference item.
// Returns:
// The RGB value for the specified tree item text color, or (COLORREF)-1, if the
// color was not set.
//-----------------------------------------------------------------------
virtual COLORREF GetItemColor(HTREEITEM hItem);
//-----------------------------------------------------------------------
// Summary:
// This member function returns the RGB value for the specified
// tree item background color or (COLORREF)-1, if color was not set.
// Parameters:
// hItem - Handle of the reference item.
// Returns:
// The RGB value for the specified tree item background color, or (COLORREF)-1, if the
// color was not set.
//-----------------------------------------------------------------------
virtual COLORREF GetItemBackColor(HTREEITEM hItem);
//-----------------------------------------------------------------------
// Summary:
// This member function enables or disables multi-selection for the
// tree control.
// Parameters:
// bMultiSelect - TRUE for a multi-selection tree control.
// Returns:
// TRUE if successful, otherwise returns FALSE.
//-----------------------------------------------------------------------
virtual BOOL EnableMultiSelect(BOOL bMultiSelect = TRUE);
//-----------------------------------------------------------------------
// Summary:
// This member function returns the previously selected tree item in
// a multi-selection tree control.
// Parameters:
// hItem - Handle of the reference item.
// Returns:
// A handle to the previously selected tree item.
//-----------------------------------------------------------------------
virtual HTREEITEM GetPrevSelectedItem(HTREEITEM hItem) const;
//-----------------------------------------------------------------------
// Summary:
// This member function returns the next selected item in a multi-selection
// tree control.
// Parameters:
// hItem - Handle of the reference item.
// Returns:
// A handle to the next selected tree item.
//-----------------------------------------------------------------------
HTREEITEM GetNextSelectedItem(HTREEITEM hItem) const;
//-----------------------------------------------------------------------
// Summary:
// This member function returns the first selected item in a multi-selection
// tree control.
// Returns:
// A handle to the first selected tree item.
//-----------------------------------------------------------------------
HTREEITEM GetFirstSelectedItem() const;
//-----------------------------------------------------------------------
// Summary:
// This member function returns the number of tree items that are selected.
// Returns:
// A UNIT value that represents the number of tree items selected.
//-----------------------------------------------------------------------
UINT GetSelectedCount() const;
// --------------------------------------------------------------------------
// Summary:
// This member function is a replacement for the base class function
// of the same name, to handle TVIS_FOCUSED in a multi-select
// tree control. It sets the state of the item specified by <i>hItem</i>.
// Parameters:
// hItem - Handle of the item whose state is to be set.
// nState - Specifies the new states for the item.
// nStateMask - Specifies which states are to be changed.
// Returns:
// Nonzero if successful, otherwise returns zero.
// Remarks:
// The TVIS_FOCUSED state flag when set will draw a focus
// rectangle around the tree item that currently has input focus.
// Only one tree item can have focus at any given time. For a list of
// possible item state flags, see Tree-View Control Item States in
// the MSDN documentation.
// --------------------------------------------------------------------------
BOOL SetItemState(HTREEITEM hItem, UINT nState, UINT nStateMask);
//-----------------------------------------------------------------------
// Summary:
// This member function is a replacement for the base class function of
// the same name to handle TVIS_FOCUSED in a multi-select tree control.
// Parameters:
// hItem - Handle of the item whose state is to be retrieved.
// nStateMask - Mask indicating which states are to be retrieved. For more information
// on possible values for 'nStateMask', see the discussion of the 'state'
// and 'stateMask' members of the TVITEM structure in the Platform SDK.
// Returns:
// The state of the item specified by 'hItem'.
//-----------------------------------------------------------------------
UINT GetItemState(HTREEITEM hItem, UINT nStateMask) const;
//-----------------------------------------------------------------------
// Summary:
// This member function is a replacement for the base class function of
// the same name, to handle TVIS_FOCUSED in a multi-select tree control.
// Call this function to select the given tree view item. If 'hItem' is
// NULL, then no items are selected.
// Parameters:
// hItem - Handle of a tree item.
// Returns:
// Nonzero if successful, otherwise returns zero.
//-----------------------------------------------------------------------
BOOL SelectItem(HTREEITEM hItem);
//-----------------------------------------------------------------------
// Summary:
// This member function returns the handle to the tree item that currently
// has focus.
// Returns:
// The handle of the item that has focus, otherwise returns NULL.
//-----------------------------------------------------------------------
HTREEITEM GetFocusedItem() const;
//-----------------------------------------------------------------------
// Summary:
// This member function will set the focus for the tree item specified
// by 'hItem'.
// Parameters:
// hItem - Handle of a tree item.
// Returns:
// TRUE if successful, otherwise returns FALSE.
//-----------------------------------------------------------------------
BOOL FocusItem(HTREEITEM hItem);
//-----------------------------------------------------------------------
// Summary:
// Call this member function to clear, or select, all of the visible items
// in the tree control. This will not effect the focus of the tree items.
// Parameters:
// bSelect - TRUE to select all the items, or FALSE to clear the selection.
// htItem - Tree item to start selection from. If NULL selection will begin at the root.
//-----------------------------------------------------------------------
void SelectAll(BOOL bSelect = TRUE, HTREEITEM htItem = NULL);
//-----------------------------------------------------------------------
// Summary:
// This member function selects items from 'hItemFrom' to 'hItemTo' in
// a multi-selection tree control. It does not select a child item if
// the parent is collapsed. It will remove the selection from all other
// items if 'bOnly' is set to TRUE.
// Parameters:
// hItemFrom - Handle of the item to start selecting from.
// hItemTo - Handle of the item to end selection at.
// bOnly - TRUE to only select the specified range, or FALSE to keep existing
// selections.
//-----------------------------------------------------------------------
void SelectItems(HTREEITEM hItemFrom, HTREEITEM hItemTo, BOOL bOnly = TRUE);
//-----------------------------------------------------------------------
// Summary:
// This member function checks whether or not the specified item is selected.
// Parameters:
// hItem - Handle of a tree item.
// Returns:
// TRUE if the specified item is selected, otherwise returns FALSE.
//-----------------------------------------------------------------------
BOOL IsSelected(HTREEITEM hItem) const;
//-----------------------------------------------------------------------
// Summary:
// This member function will cause all of the children of the specified
// tree item to be selected or deselected.
// Parameters:
// hParent - Handle of tree item to begin selection from.
// bSelect - TRUE to select only the child items or FALSE to keep existing selections.
// bRecurse - TRUE to recurse all siblings or FALSE to select only children of the
// parent item.
// Returns:
// TRUE if focus was on a child item, otherwise returns FALSE.
//-----------------------------------------------------------------------
BOOL SelectChildren(HTREEITEM hParent, BOOL bSelect = TRUE, BOOL bRecurse = TRUE);
//-----------------------------------------------------------------------
// Summary:
// This member function will retrieve a reference to the typed pointer
// array that contains the items selected in the tree control.
// Parameters:
// list - Reference to a CTypedPtrList\<CPtrList, HTREEITEM\> object.
//-----------------------------------------------------------------------
void GetSelectedList(CTypedPtrList<CPtrList, HTREEITEM>& list) const;
//-----------------------------------------------------------------------
// Summary:
// This member function checks to see if the tree control is a multi-select
// tree.
// Returns:
// TRUE if the tree control is a multi-select tree, otherwise returns FALSE.
//-----------------------------------------------------------------------
BOOL IsMultiSelect() const;
//-----------------------------------------------------------------------
// Summary:
// This member function sets the banding mode for a multi-selection tree
// control. If 'bLabel' is TRUE, then items are selected only when the
// banding rect passes over the tree item label. If FALSE, passing
// over any part of the tree item will cause selection to be made when
// the banding rect passes over it.
// Parameters:
// bLabel - TRUE to select items only when banding rect passes over the text label,
// or FALSE to select items when banding rect passes over any part of
// the tree item.
// Returns:
// The previous banding state.
//-----------------------------------------------------------------------
BOOL SetBandingHit(BOOL bLabel);
protected:
//-----------------------------------------------------------------------
// Summary:
// This member function is called by the CXTPTreeBase class to
// perform initialization when the window is created or sub-classed.
// Returns:
// TRUE if the window was successfully initialized, otherwise FALSE.
//-----------------------------------------------------------------------
virtual bool Init();
//-----------------------------------------------------------------------
// Summary:
// Sends a WM_NOTIFY message to the tree control owner window.
// Parameters:
// pNMHDR - Pointer to an NMHDR structure that contains the notification
// code and additional information. For some notification messages,
// this parameter points to a larger structure that has the NMHDR
// structure as its first member.
// Remarks:
// Called by the tree control to package and send a WM_NOTIFY message
// to the tree control's owner window. You can override this member
// to provide additional functionality.
// Returns:
// The return value is ignored except for notification messages that
// specify otherwise.
//-----------------------------------------------------------------------
virtual LRESULT SendNotify(LPNMHDR pNMHDR);
//-----------------------------------------------------------------------
// Summary:
// Toggles selection for all items in a multiple selection tree control.
// Parameters:
// bSelect - TRUE to select, FALSE to remove selection.
// hIgnore - Handle to a tree item to skip while performing the operation.
// Remarks:
// Called to toggle selection for all items in a multiple selection
// tree control. You can override this member to provide additional
// functionality.
//-----------------------------------------------------------------------
virtual void SelectAllIgnore(BOOL bSelect, HTREEITEM hIgnore);
//-----------------------------------------------------------------------
// Summary:
// Called when a mouse button click event occurs.
// Parameters:
// bLeft - TRUE if the left mouse button is down.
// nFlags - Indicates whether various virtual keys are down. See Remarks
// section for a list of values.
// point - xy cursor location.
// Remarks:
// <i>nFlags</i> can be any combination of the following values:<p/>
// * <b>MK_CONTROL</b> Set if the CTRL key is down.
// * <b>MK_LBUTTON</b> Set if the left mouse button is down.
// * <b>MK_MBUTTON</b> Set if the middle mouse button is down.
// * <b>MK_RBUTTON</b> Set if the right mouse button is down.
// * <b>MK_SHIFT</b> Set if the SHIFT key is down.
// Returns:
// TRUE if successful, otherwise FALSE.
//-----------------------------------------------------------------------
virtual BOOL OnButtonDown(BOOL bLeft, UINT nFlags, CPoint point);
//-----------------------------------------------------------------------
// Summary:
// Called during item selection in a multiple selection tree control.
// Parameters:
// hItem - Handle to the last item clicked that will receive focus.
// bLeft - TRUE if the left mouse button is down.
// nFlags - Indicates whether various virtual keys are down. See Remarks
// section for a list of values.
// Remarks:
// <i>nFlags</i> can be any combination of the following values:<p/>
// * <b>MK_CONTROL</b> Set if the CTRL key is down.
// * <b>MK_LBUTTON</b> Set if the left mouse button is down.
// * <b>MK_MBUTTON</b> Set if the middle mouse button is down.
// * <b>MK_RBUTTON</b> Set if the right mouse button is down.
// * <b>MK_SHIFT</b> Set if the SHIFT key is down.
//-----------------------------------------------------------------------
virtual void DoPreSelection(HTREEITEM hItem, BOOL bLeft, UINT nFlags);
//-----------------------------------------------------------------------
// Summary:
// Called during item selection in a multiple selection tree control.
// Parameters:
// hItem - Handle to the last item clicked that will receive focus.
// bLeft - TRUE if the left mouse button is down.
// nFlags - Indicates whether various virtual keys are down. See Remarks
// section for a list of values.
// point - Mouse cursor position.
// Remarks:
// <i>nFlags</i> can be any combination of the following values:<p/>
// * <b>MK_CONTROL</b> Set if the CTRL key is down.
// * <b>MK_LBUTTON</b> Set if the left mouse button is down.
// * <b>MK_MBUTTON</b> Set if the middle mouse button is down.
// * <b>MK_RBUTTON</b> Set if the right mouse button is down.
// * <b>MK_SHIFT</b> Set if the SHIFT key is down.
//-----------------------------------------------------------------------
virtual void DoAction(HTREEITEM hItem, BOOL bLeft, UINT nFlags, CPoint point);
//-----------------------------------------------------------------------
// Summary:
// Draws a selection rectangle during item selection.
// Parameters:
// point - xy location of the mouse cursor.
// nFlags - Indicates whether various virtual keys are down. See Remarks
// section for a list of values.
// Remarks:
// <i>nFlags</i> can be any combination of the following values:<p/>
// * <b>MK_CONTROL</b> Set if the CTRL key is down.
// * <b>MK_LBUTTON</b> Set if the left mouse button is down.
// * <b>MK_MBUTTON</b> Set if the middle mouse button is down.
// * <b>MK_RBUTTON</b> Set if the right mouse button is down.
// * <b>MK_SHIFT</b> Set if the SHIFT key is down.
//-----------------------------------------------------------------------
virtual void DoBanding(UINT nFlags, CPoint point);
//-----------------------------------------------------------------------
// Summary:
// Updates tree item selection.
// Parameters:
// pRect - Cursor drag rectangle representing tree items to select.
// nFlags - Indicates whether various virtual keys are down. See Remarks
// section for a list of values.
// list - An array of tree items that are currently selected.
// Remarks:
// Called by the tree control to select tree items based upon the area
// specified by <i>pRect</i>.
// <i>nFlags</i> can be any combination of the following values:<p/>
// * <b>MK_CONTROL</b> Set if the CTRL key is down.
// * <b>MK_LBUTTON</b> Set if the left mouse button is down.
// * <b>MK_MBUTTON</b> Set if the middle mouse button is down.
// * <b>MK_RBUTTON</b> Set if the right mouse button is down.
// * <b>MK_SHIFT</b> Set if the SHIFT key is down.
//-----------------------------------------------------------------------
virtual void UpdateSelectionForRect(LPCRECT pRect, UINT nFlags, CTypedPtrList<CPtrList, HTREEITEM>& list);
//-----------------------------------------------------------------------
// Summary:
// Member override to determine if a tree item is valid.
// Parameters:
// hti - Handle to the tree item that was found when FindItem or
// FindItemInBranch has been called.
// Remarks:
// Override this member function to determine if the tree item
// specified by <i>hti</i> is a valid. If IsFindValid returns
// FALSE the calling functions FindItem and FindItemInBranch
// will return NULL.
// Returns:
// TRUE in the base class. Derived classes must return TRUE to
// indicate success and FALSE to indicate failure.
//-----------------------------------------------------------------------
virtual BOOL IsFindValid(HTREEITEM hti);
//-----------------------------------------------------------------------
// Summary:
// Called to render the tree control.
// Parameters:
// dc - Reference to the tree control device context.
// bInternal - FALSE to skip extended rendering tasks and to
// the tree control's default rendering.
// Remarks:
// This member is called to render the tree control using user defined
// fonts and colors. You can override this member to provide additional
// functionality.
//-----------------------------------------------------------------------
virtual void DoPaint(CDC& dc, BOOL bInternal = TRUE);
//-----------------------------------------------------------------------
// Summary:
// Retrieves the tree control background color.
// Returns:
// An RGB value representing the tree control background color.
// See Also:
// CTreeCtrl::SetBkColor, CTreeCtrl::GetBkColor, GetTreeTextColor,
// GetItemBackColor, GetItemTextColor
//-----------------------------------------------------------------------
virtual COLORREF GetTreeBackColor() const;
//-----------------------------------------------------------------------
// Summary:
// Retrieves the tree control text color.
// Returns:
// An RGB value representing the tree control text color.
// See Also:
// CTreeCtrl::SetTextColor, CTreeCtrl::GetTextColor, GetTreeBackColor,
// GetItemBackColor, GetItemTextColor
//-----------------------------------------------------------------------
virtual COLORREF GetTreeTextColor() const;
//-----------------------------------------------------------------------
// Summary:
// Retrieves a tree items background color.
// Parameters:
// uState - Mask indicating which states are to be retrieved. For
// more information on possible values for nStateMask, see
// the discussion of the state and stateMask members of
// the TVITEM structure in the Platform SDK.
// bTreeHasFocus - true if the tree item has input focus.
// dwStyle - Set of flags specifying tree item state.
// crBack - Default color to be returned, usually the tree control background color.
// Remarks:
// This member function is called to retrieve a tree items background
// color. The value retrieved will depend on the tree items state and
// TVS_ style.
// Returns:
// An RGB value representing the specified item background color.
// See Also:
// GetTreeBackColor, GetTreeTextColor, GetItemTextColor
//-----------------------------------------------------------------------
virtual COLORREF GetItemBackColor(UINT uState, bool bTreeHasFocus, DWORD dwStyle, COLORREF crBack) const;
//-----------------------------------------------------------------------
// Summary:
// Retrieves a tree items text color.
// Parameters:
// uState - Mask indicating which states are to be retrieved. For
// more information on possible values for nStateMask, see
// the discussion of the state and stateMask members of
// the TVITEM structure in the Platform SDK.
// bTreeHasFocus - true if the tree item has input focus.
// dwStyle - Set of flags specifying tree item state.
// crText - Default color to be returned, usually the tree control text color.
// Remarks:
// This member function is called to retrieve a tree items text
// color. The value retrieved will depend on the tree items state and
// TVS_ style.
// Returns:
// An RGB value representing the specified item text color.
// See Also:
// GetTreeBackColor, GetTreeTextColor, GetItemBackColor
//-----------------------------------------------------------------------
virtual COLORREF GetItemTextColor(UINT uState, bool bTreeHasFocus, DWORD dwStyle, COLORREF crText) const;
//-----------------------------------------------------------------------
// Summary:
// Determines if the tree control has edit labels.
// Returns:
// true if the TVS_EDITLABELS style is set for the tree control, otherwise false.
//-----------------------------------------------------------------------
bool HasEditLabels() const;
protected:
//{{AFX_CODEJOCK_PRIVATE
//{{AFX_VIRTUAL(CXTPTreeBase)
virtual BOOL PreTranslateMessage(MSG* pMsg);
virtual BOOL OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult);
//}}AFX_VIRTUAL
//{{AFX_MSG(CXTPTreeBase)
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnSetFocus(CWnd* pOldWnd);
afx_msg void OnKillFocus(CWnd* pNewWnd);
afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg BOOL OnDeleteItem(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg BOOL OnItemExpanding(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg BOOL OnBeginLabelEdit(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg BOOL OnEndLabelEdit(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg void OnTimer(UINT_PTR nIDEvent);
afx_msg void OnNcMouseMove(UINT nHitTest, CPoint point);
//}}AFX_MSG
//}}AFX_CODEJOCK_PRIVATE
protected:
//{{AFX_CODEJOCK_PRIVATE
// Needed in order to access protected functions.
class CTreeCtrl_Friendly : public CTreeCtrl { friend class CXTPTreeBase; };
//}}AFX_CODEJOCK_PRIVATE
protected:
BOOL m_bMultiSelect; // TRUE for a multi-selection tree control.
BOOL m_bBandLabel; // TRUE to include the label when selecting tree items.
HTREEITEM m_hSelect; // For shift selection.
HTREEITEM m_htiEdit; // Tree item that is currently edited.
HTREEITEM m_htiLast; // Tree item that was last had the mouse over.
CColorFontMap m_mapColorFont; // Maps HTREEITEM handles with CLRFONT structures that contains the color and logfont information for the tree item.
CTreeCtrl_Friendly* m_pTreeCtrl; // Self tree pointer.
private:
bool m_bActionDone;
bool m_bOkToEdit;
};
//////////////////////////////////////////////////////////////////////
AFX_INLINE HTREEITEM CXTPTreeBase::GetNextItem(HTREEITEM hItem, UINT nCode) const {
ASSERT(::IsWindow(m_pTreeCtrl->m_hWnd)); return m_pTreeCtrl->GetNextItem(hItem, nCode);
}
AFX_INLINE HTREEITEM CXTPTreeBase::GetFocusedItem() const {
ASSERT(m_bMultiSelect); return m_pTreeCtrl->GetSelectedItem();
}
AFX_INLINE BOOL CXTPTreeBase::IsSelected(HTREEITEM hItem) const {
return !!(TVIS_SELECTED & m_pTreeCtrl->GetItemState(hItem, TVIS_SELECTED));
}
AFX_INLINE BOOL CXTPTreeBase::IsMultiSelect() const {
return m_bMultiSelect;
}
AFX_INLINE BOOL CXTPTreeBase::SetBandingHit(BOOL bLabel) {
BOOL bReturn = m_bBandLabel; m_bBandLabel = bLabel; return bReturn;
}
AFX_INLINE CXTPTreeBase::CLRFONT::CLRFONT() : color((COLORREF)-1), colorBack((COLORREF)-1) {
::ZeroMemory(&logfont, sizeof(LOGFONT));
}
//{{AFX_CODEJOCK_PRIVATE
#define DECLATE_TREE_BASE(ClassName, Tree, Base)\
class _XTP_EXT_CLASS ClassName : public Tree, public Base\
{\
public:\
ClassName() {\
m_bPreSubclassInit = true;\
} \
virtual UINT GetItemState(HTREEITEM hItem, UINT nStateMask) const {\
return Base::GetItemState(hItem, nStateMask);\
}\
virtual BOOL SelectItem(HTREEITEM hItem) {\
return Base::SelectItem(hItem);\
}\
virtual BOOL SetItemState(HTREEITEM hItem, UINT nState, UINT nStateMask) {\
return Base::SetItemState(hItem, nState, nStateMask);\
}\
virtual HTREEITEM GetNextItem(HTREEITEM hItem, UINT nCode) const {\
return Base::GetNextItem(hItem, nCode);\
}\
virtual HTREEITEM GetNextItem(HTREEITEM hItem) const {\
return Base::GetNextItem(hItem);\
}\
UINT GetSelectedCount() const {\
return Base::GetSelectedCount();\
}\
protected:\
virtual BOOL OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult) {\
return Base::OnNotify(wParam, lParam, pResult);\
} \
virtual BOOL PreTranslateMessage(MSG* pMsg) {\
return Base::PreTranslateMessage(pMsg);\
} \
virtual bool Init() {\
return Base::Init();\
} \
virtual void PreSubclassWindow()\
{\
Tree::PreSubclassWindow();\
if (m_bPreSubclassInit)\
Init();\
} \
virtual BOOL PreCreateWindow(CREATESTRUCT& cs)\
{\
if (!Tree::PreCreateWindow(cs))\
return FALSE;\
m_bPreSubclassInit = false;\
return TRUE;\
} \
bool m_bPreSubclassInit;\
afx_msg void OnLButtonDown(UINT nFlags, CPoint point) {\
Base::OnLButtonDown(nFlags, point);\
} \
afx_msg void OnRButtonDown(UINT nFlags, CPoint point) {\
Base::OnRButtonDown(nFlags, point);\
} \
afx_msg void OnSetFocus(CWnd* pOldWnd) {\
Base::OnSetFocus(pOldWnd);\
} \
afx_msg void OnKillFocus(CWnd* pNewWnd) {\
Base::OnKillFocus(pNewWnd); \
} \
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) {\
Base::OnKeyDown(nChar, nRepCnt, nFlags);\
} \
afx_msg BOOL OnBeginLabelEdit(NMHDR* pNMHDR, LRESULT* pResult) {\
return Base::OnBeginLabelEdit(pNMHDR, pResult); \
} \
afx_msg BOOL OnEndLabelEdit(NMHDR* pNMHDR, LRESULT* pResult) {\
return Base::OnEndLabelEdit(pNMHDR, pResult);\
} \
afx_msg BOOL OnItemExpanding(NMHDR* pNMHDR, LRESULT* pResult) {\
return Base::OnItemExpanding(pNMHDR, pResult);\
} \
afx_msg BOOL OnDeleteItem(NMHDR* pNMHDR, LRESULT* pResult) {\
return Base::OnDeleteItem(pNMHDR, pResult);\
} \
afx_msg void OnSize(UINT nType, int cx, int cy) {\
Base::OnSize(nType, cx, cy);\
} \
afx_msg void OnMouseMove(UINT nFlags, CPoint point) { \
Base::OnMouseMove(nFlags, point);\
} \
afx_msg void OnTimer(UINT_PTR nIDEvent) { \
Base::OnTimer(nIDEvent);\
} \
afx_msg void OnNcMouseMove(UINT nHitTest, CPoint point) {\
Base::OnNcMouseMove(nHitTest, point);\
}\
afx_msg BOOL OnEraseBkgnd(CDC*) {\
return TRUE;\
}\
afx_msg void OnPaint() {\
CPaintDC dc(this);\
DoPaint(dc); \
}\
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct)\
{\
if (Tree::OnCreate(lpCreateStruct) == -1)\
return -1;\
Init();\
return 0;\
} \
};
#define ON_TREECTRL_REFLECT\
ON_WM_LBUTTONDOWN()\
ON_WM_SETFOCUS()\
ON_WM_KILLFOCUS()\
ON_WM_RBUTTONDOWN()\
ON_WM_KEYDOWN()\
ON_WM_ERASEBKGND()\
ON_WM_PAINT()\
ON_WM_SIZE()\
ON_NOTIFY_REFLECT_EX(TVN_DELETEITEM, OnDeleteItem)\
ON_NOTIFY_REFLECT_EX(TVN_ITEMEXPANDING, OnItemExpanding)\
ON_NOTIFY_REFLECT_EX(TVN_BEGINLABELEDIT, OnBeginLabelEdit)\
ON_NOTIFY_REFLECT_EX(TVN_ENDLABELEDIT, OnEndLabelEdit)\
ON_WM_MOUSEMOVE()\
ON_WM_TIMER()\
ON_WM_NCMOUSEMOVE()\
ON_WM_CREATE
//}}AFX_CODEJOCK_PRIVATE
const DWORD TVIS_FOCUSED = 0x0001; //<ALIAS CXTPTreeBase::SetItemState@HTREEITEM@UINT@UINT>
#endif // !defined(__XTTREEBASE_H__)