📄 prjtreec.cpp
字号:
else
{
dc.SetTextColor (::GetSysColor (COLOR_WINDOWTEXT));
dc.SetBkColor (::GetSysColor (COLOR_WINDOW));
}
if (!m_ext.IsEmpty ())
{
POSITION pos = m_ext.GetHeadPosition ();
int left;
dc.SelectObject (&pen2);
do
{
left = m_ext.GetNext (pos);
if (left != rc.left)
{
dc.MoveTo (left - 10, rc.top);
dc.LineTo (left - 10, rc.bottom);
}
}
while (pos);
}
if (GetNextItem (hItem, TVGN_CHILD))
{
dc.SelectObject (&pen1);
dc.Rectangle (rc.left - 14, rc.top + 4, rc.left - 5, rc.top + 13);
dc.SelectObject (&pen2);
dc.MoveTo (rc.left - 5, rc.top + 8);
dc.LineTo (rc.left, rc.top + 8);
dc.MoveTo (rc.left - 10, rc.top);
dc.LineTo (rc.left - 10, rc.top + 4);
if (GetNextItem (hItem, TVGN_NEXT))
{
dc.MoveTo (rc.left - 10, rc.top + 13);
dc.LineTo (rc.left - 10, rc.bottom);
if (!m_ext.Find (rc.left))
{
m_ext.AddTail (rc.left);
}
}
else
{
POSITION pos = m_ext.Find (rc.left);
if (pos)
{
m_ext.RemoveAt (pos);
}
}
dc.SelectObject (&pen3);
dc.MoveTo (rc.left - 12, rc.top + 8);
dc.LineTo (rc.left - 7, rc.top + 8);
if (!(state & TVIS_EXPANDED))
{
dc.MoveTo (rc.left - 10, rc.top + 6);
dc.LineTo (rc.left - 10, rc.top + 11);
}
}
else
{
dc.SelectObject (&pen2);
dc.MoveTo (rc.left - 10, rc.top + 8);
dc.LineTo (rc.left, rc.top + 8);
if (GetNextItem (hItem, TVGN_NEXT))
{
dc.MoveTo (rc.left - 10, rc.top);
dc.LineTo (rc.left - 10, rc.bottom);
if (!m_ext.Find (rc.left))
{
m_ext.AddTail (rc.left);
}
}
else
{
dc.MoveTo (rc.left - 10, rc.top);
dc.LineTo (rc.left - 10, rc.top + 8);
POSITION pos = m_ext.Find (rc.left);
if (pos)
{
m_ext.RemoveAt (pos);
}
}
}
int iImage, iSelectedImage;
VERIFY (GetItemImage (hItem, iImage, iSelectedImage));
m_objStatusImages.Draw (&dc, iImage, rc.TopLeft (), ILD_TRANSPARENT);
rc.left += ICON_WIDTH;
rc.right += ICON_WIDTH;
dc.ExtTextOut (rc.left + TEXT_DELTA, rc.top + 1, ETO_OPAQUE, rc, sItem, NULL);
if (state & TVIS_SELECTED)
{
dc.DrawFocusRect (rc);
}
if (state & TVIS_SELECTED)
{
dc.SetTextColor (::GetSysColor (COLOR_WINDOWTEXT));
dc.SetBkColor (::GetSysColor (COLOR_WINDOW));
}
if (m_dwLayout & PRJTREEC_SHOWDESC)
{
LPTSTR str = sText.GetBuffer (_tcslen (_T ("DUMMY")) + 1);
_tcscpy (str, _T ("DUMMY"));
_tcslwr (str + 1);
sText.ReleaseBuffer ();
if (m_dwLayout & PRJTREEC_TABBEDCOLS)
{
rc.left = rc1.left;
rc.right = rc1.right;
}
else
{
rc.left = rc.right + TEXT_DELTA;
rc.right = (long) (rc.left + dc.GetTextExtent (sText).cx + (TEXT_DELTA << 1) + 1);
}
dc.ExtTextOut (rc.left + TEXT_DELTA, rc.top + 1, ETO_OPAQUE, rc, sText, NULL);
}
hItem = GetNextVisibleItem (hItem);
}
dc.SelectObject (pOldPen);
pen1.DeleteObject ();
pen2.DeleteObject ();
pen3.DeleteObject ();
dc.SelectObject (pOldFont);
normal.DeleteObject ();*/
}
void CProjectTreeCtrl::
OnLButtonDblClk (UINT nFlags, CPoint point)
{
/*UINT nFlags2;
HTREEITEM hItem;
hItem = HitTest (point, &nFlags2);
KillTimer (1);
m_bDblClk = true;
CAppTreeCtrl::OnLButtonDblClk (nFlags, point);
OnTimer (1);*/
if (m_hPointedItem)
{
//EditLabel (m_hPointedItem);
CProjectItem *pItem = (CProjectItem*) GetItemData (m_hPointedItem);
if (pItem && (pItem->dwType & PI_FILE))
{
ASSERT (g_pProject);
CString sPath = g_pProject->MakePath (pItem);
AfxGetMainWnd ()->SendMessage (WM_OPEN_HERE, 0, (LPARAM) (LPCTSTR) sPath);
}
else
{
if (pItem && !pItem->lstItems.IsEmpty ())
ExpandItem (m_hPointedItem, TVE_TOGGLE);
}
CWnd *pWnd = AfxGetMainWnd ();
pWnd->SetForegroundWindow ();
pWnd->SetFocus ();
}
CWnd *pWnd = AfxGetMainWnd ();
pWnd->SetForegroundWindow ();
pWnd->SetFocus ();
}
void CProjectTreeCtrl::
OnLButtonDown (UINT nFlags, CPoint point)
{
UINT nFlags2;
m_hPointedItem = HitTest (point, &nFlags2);
/*KillTimer (1);
m_bDblClk = false;*/
if (m_hPointedItem && (nFlags2 & (TVHT_ONITEMICON|TVHT_ONITEMLABEL)))
{
if (GetFocus () != this)
{
SetFocus ();
}
return;
}
CAppTreeCtrl::OnLButtonDown (nFlags, point);
}
void CProjectTreeCtrl::
OnLButtonUp (UINT nFlags, CPoint point)
{
UINT nFlags2;
HTREEITEM hItem = HitTest (point, &nFlags2);
if (hItem == m_hPointedItem && (nFlags2 & (TVHT_ONITEMICON | TVHT_ONITEMLABEL)))
{
if (GetItemState (hItem, TVIS_SELECTED) & TVIS_SELECTED)
{
if (nFlags & MK_SHIFT)
{
SelectTo (hItem);
}
else if (nFlags & MK_CONTROL)
{
SetItemState (hItem, 0, TVIS_SELECTED);
m_listSelected.RemoveAt (m_listSelected.Find(hItem));
}
/*else if (!m_bDblClk)
{
SetTimer (1, GetDoubleClickTime (), NULL);
}*/
}
else
{
if (nFlags & MK_SHIFT)
{
SelectTo (hItem);
}
else
{
if (nFlags & MK_CONTROL)
{
SetItemState (hItem, TVIS_SELECTED, TVIS_SELECTED);
m_listSelected.AddTail (hItem);
}
else
{
ClearSelection ();
SetItemState (hItem, TVIS_SELECTED, TVIS_SELECTED);
m_listSelected.AddTail (hItem);
}
}
}
CWnd *pWnd = AfxGetMainWnd ();
pWnd->SetForegroundWindow ();
pWnd->SetFocus ();
return;
}
CAppTreeCtrl::OnLButtonUp (nFlags, point);
CWnd *pWnd = AfxGetMainWnd ();
pWnd->SetForegroundWindow ();
pWnd->SetFocus ();
}
void CProjectTreeCtrl::
OnDestroy ()
{
if (m_dwLayout & PRJTREEC_HEADER)
{
LPCTSTR pszName = REGISTRY_ROOT _T ("ProjectTree");
HDITEM item;
item.mask = HDI_WIDTH;
if (m_ctlHeader.GetItem (0, &item))
{
RegSaveNumber (HKEY_CURRENT_USER, pszName, _T ("Description"), item.cxy);
}
if (m_ctlHeader.GetItem (1, &item))
{
RegSaveNumber (HKEY_CURRENT_USER, pszName, _T ("Name"), item.cxy);
}
m_ctlHeader.DestroyWindow ();
}
CAppTreeCtrl::OnDestroy ();
}
/*LONG CProjectTreeCtrl::
OnHitTest (WPARAM wParam, LPARAM lParam)
{
LONG lResult = DefWindowProc (TVM_HITTEST, wParam, lParam);
LPTVHITTESTINFO pHitTestInfo = (LPTVHITTESTINFO) lParam;
if (pHitTestInfo->hItem)
{
CClientDC dc (this);
CRect rc;
GetItemRect (pHitTestInfo->hItem, &rc, TRUE);
rc.right++;
UINT state = GetItemState (pHitTestInfo->hItem, TVIS_SELECTED);
pHitTestInfo->flags = 0;
if (pHitTestInfo->pt.x > rc.left - ICON_WIDTH && pHitTestInfo->pt.x < rc.left)
{
pHitTestInfo->flags |= TVHT_ONITEMBUTTON;
}
int delta = STATUS_WIDTH;
if (pHitTestInfo->pt.x > rc.left && pHitTestInfo->pt.x < rc.left + delta)
{
pHitTestInfo->flags |= TVHT_ONITEMICON;
if ((pHitTestInfo->pt.x - rc.left) / ICON_WIDTH == 0)
{
pHitTestInfo->flags |= TVHT_ONITEMICON1;
}
}
rc.left += delta;
rc.right += delta;
if (pHitTestInfo->pt.x > rc.left && pHitTestInfo->pt.x < rc.right)
{
pHitTestInfo->flags |= TVHT_ONITEMLABEL;
}
if (pHitTestInfo->pt.x > rc.right)
{
pHitTestInfo->flags |= TVHT_ONITEMRIGHT;
}
}
return lResult;
}*/
/*void CProjectTreeCtrl::
OnTimer (UINT nIDEvent)
{
KillTimer (1);
if (m_hPointedItem)
{
//EditLabel (m_hPointedItem);
CProjectItem *pItem = (CProjectItem*) GetItemData (m_hPointedItem);
if (pItem && (pItem->dwType & PI_FILE))
{
ASSERT (g_pProject);
CString sPath = g_pProject->MakePath (pItem);
AfxGetMainWnd ()->SendMessage (WM_OPEN_HERE, 0, (LPARAM) (LPCTSTR) sPath);
}
else
{
if (pItem && !pItem->lstItems.IsEmpty ())
ExpandItem (m_hPointedItem, TVE_TOGGLE);
}
CWnd *pWnd = AfxGetMainWnd ();
pWnd->SetForegroundWindow ();
pWnd->SetFocus ();
}
CAppTreeCtrl::OnTimer (nIDEvent);
}*/
void CProjectTreeCtrl::
OnSize (UINT nType, int cx, int cy)
{
CAppTreeCtrl::OnSize (nType, cx, cy);
if (m_dwLayout & PRJTREEC_HEADER)
{
CRect rc;
m_ctlHeader.GetWindowRect (rc);
m_ctlHeader.SetWindowPos (NULL, 0, 0, cx, rc.Height (), SWP_NOZORDER | SWP_NOMOVE);
}
}
#pragma warning ( disable : 4100 )
void CProjectTreeCtrl::
OnRButtonDown (UINT nFlags, CPoint point)
{
UINT nFlags2;
m_hPointedItem = HitTest (point, &nFlags2);
if (m_hPointedItem && (nFlags2 & (TVHT_ONITEMICON | TVHT_ONITEMLABEL)))
{
m_bWasSelected = GetItemState (m_hPointedItem, TVIS_SELECTED) != 0;
if (!m_bWasSelected)
{
VERIFY (SetItemState (m_hPointedItem, TVIS_SELECTED, TVIS_SELECTED));
}
}
// CAppTreeCtrl::OnRButtonDown (nFlags, point);
}
#pragma warning ( default : 4100 )
#define ID_SPACE_FIRST ID_REFRESH
#define ID_SPACE_LAST ID_REFRESH
#pragma warning ( disable : 4100 )
void CProjectTreeCtrl::
OnRButtonUp (UINT nFlags, CPoint point)
{
UINT nFlags2;
HTREEITEM hItem = HitTest (point, &nFlags2);
if (m_hPointedItem && (nFlags2 & (TVHT_ONITEMICON | TVHT_ONITEMLABEL)))
{
if (hItem == m_hPointedItem)
{
CMenu menuItem;
CMenu *pMenu;
if (menuItem.LoadMenu (IDM_PRJTREE_ITEM) && (pMenu = menuItem.GetSubMenu (0)) != NULL)
{
CProjectItem *pItem = (CProjectItem*) GetItemData (m_hPointedItem);
if (!(pItem && (pItem->dwType & PI_FILE)))
pMenu->EnableMenuItem (ID_OPEN, MF_BYCOMMAND|MF_GRAYED);
if (pItem && (pItem->dwType & PI_FILE))
{
pMenu->EnableMenuItem (ID_NEW_FILE, MF_BYCOMMAND|MF_GRAYED);
pMenu->EnableMenuItem (ID_NEW_GROUP, MF_BYCOMMAND|MF_GRAYED);
pMenu->EnableMenuItem (ID_ADD_FILE, MF_BYCOMMAND|MF_GRAYED);
}
if (!(pItem && !(pItem->dwType & (PI_FILE|PI_SUBITEM))))
pMenu->EnableMenuItem (ID_RENAME_ITEM, MF_BYCOMMAND|MF_GRAYED);
if (!GetItemData (m_hPointedItem))
pMenu->EnableMenuItem (ID_REMOVE_ITEM, MF_BYCOMMAND|MF_GRAYED);
pMenu->EnableMenuItem (ID_ITEM_PROPERTIES, MF_BYCOMMAND|MF_GRAYED);
ClientToScreen (&point);
pMenu->TrackPopupMenu (TPM_LEFTBUTTON|TPM_RIGHTBUTTON/*|TPM_RETURNCMD*/|TPM_LEFTALIGN|TPM_TOPALIGN, point.x, point.y, this);
}
}
if (!m_bWasSelected && m_hPointedItem)
{
VERIFY (SetItemState (m_hPointedItem, 0, TVIS_SELECTED));
}
}
else
{
CMenu menu;
if (menu.CreatePopupMenu ())
{
DWORD dwResult = 0;
CWnd *pWnd = this;
bool bSeparated = false, bContinue = true, bProcess = false, bProperties = false;
do
{
dwResult = pWnd->SendMessage (WM_APPEND_MENU, dwResult, (LPARAM) menu.GetSafeHmenu ());
if (dwResult & 1)
{
bProcess = true;
if (dwResult & 2)
{
bContinue = false;
}
if (dwResult & 4)
{
bSeparated = true;
}
if (dwResult & 8)
{
bProperties = true;
}
}
pWnd = pWnd->GetParent ();
}
while (pWnd && bContinue);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -