// ShellTreeView.cpp // // (c)1998-2025 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 // ///////////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "WinExplorer.h" #include "ShellTreeView.h" #include "ShellListView.h" #include "MainFrm.h" #ifdef _DEBUG # define new DEBUG_NEW # undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CShellTreeView IMPLEMENT_DYNCREATE(CShellTreeView, CXTPShellTreeView) CShellTreeView::CShellTreeView() : m_pListView(NULL) { } CShellTreeView::~CShellTreeView() { } BEGIN_MESSAGE_MAP(CShellTreeView, CXTPShellTreeView) //{{AFX_MSG_MAP(CShellTreeView) ON_WM_NCCALCSIZE() ON_WM_NCPAINT() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CShellTreeView drawing void CShellTreeView::OnDraw(CDC* /*pDC*/) { } void CShellTreeView::OnInitialUpdate() { CXTPShellTreeView::OnInitialUpdate(); SetExplorerStyle(); } ///////////////////////////////////////////////////////////////////////////// // CShellTreeView diagnostics #ifdef _DEBUG void CShellTreeView::AssertValid() const { CXTPShellTreeView::AssertValid(); } void CShellTreeView::Dump(CDumpContext& dc) const { CXTPShellTreeView::Dump(dc); } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CShellTreeView message handlers void CShellTreeView::SelectParentItem() { if (::IsWindow(GetTreeCtrl().m_hWnd)) { HTREEITEM htItem = GetTreeCtrl().GetSelectedItem(); if (htItem != GetTreeCtrl().GetRootItem()) { GetTreeCtrl().SelectItem(GetTreeCtrl().GetParentItem(htItem)); GetTreeCtrl().SetFocus(); } } } BOOL CShellTreeView::PreCreateWindow(CREATESTRUCT& cs) { if (!CXTPShellTreeView::PreCreateWindow(cs)) return FALSE; cs.dwExStyle |= WS_EX_STATICEDGE; return TRUE; } int CShellTreeView::GetHeaderHeight() const { if (m_pListView) { CListCtrl* pListCtrl = &m_pListView->GetListCtrl(); if (::IsWindow(pListCtrl->GetSafeHwnd())) { CHeaderCtrl* pHeader = pListCtrl->GetHeaderCtrl(); if (::IsWindow(pHeader->GetSafeHwnd())) { CRect rc; pHeader->GetWindowRect(&rc); return rc.Height(); } } } return XTP_DPI_Y(19); // default size. } void CShellTreeView::OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp) { lpncsp->rgrc[0].top = GetHeaderHeight() + XTP_DPI_Y(3); CXTPShellTreeView::OnNcCalcSize(bCalcValidRects, lpncsp); } void CShellTreeView::OnNcPaint() { // code block: paint scrollbars first. { Default(); } CWindowDC dc(this); CXTPWindowRect rWindow(this); rWindow.OffsetRect(-rWindow.TopLeft()); dc.Draw3dRect(&rWindow, GetXtremeColor(COLOR_3DSHADOW), GetXtremeColor(COLOR_3DHIGHLIGHT)); rWindow.DeflateRect(1, 1); rWindow.bottom = rWindow.top + GetHeaderHeight(); dc.FillSolidRect(rWindow.left, rWindow.bottom, rWindow.Width(), 1, GetXtremeColor(COLOR_WINDOW)); CXTPBufferDC memDC(dc, rWindow); memDC.FillSolidRect(rWindow, GetXtremeColor(COLOR_3DFACE)); memDC.Draw3dRect(&rWindow, GetXtremeColor(COLOR_3DHIGHLIGHT), GetXtremeColor(COLOR_3DSHADOW)); CXTPFontDC fontDC(&memDC, &XTPAuxData().xtpFont); rWindow.DeflateRect(XTP_DPI_X(4), XTP_DPI_Y(2)); memDC.SetBkMode(TRANSPARENT); memDC.DrawText(_T("Folders"), &rWindow, DT_SINGLELINE | DT_VCENTER | DT_END_ELLIPSIS); }