📄 prjtreec.cpp
字号:
if (bProcess)
{
if (bProperties)
{
if (!bSeparated)
VERIFY (menu.AppendMenu (MF_SEPARATOR));
if (bProperties)
{
CString sCaption;
sCaption.LoadString (IDS_MENU_PROPERTIES);
VERIFY (menu.AppendMenu (MF_STRING, ID_PROPERTIES, sCaption));
}
}
ClientToScreen (&point);
do
{
DWORD dwReturn = menu.TrackPopupMenu (TPM_LEFTBUTTON|TPM_RIGHTBUTTON|TPM_RETURNCMD|TPM_LEFTALIGN|TPM_TOPALIGN, point.x, point.y, this);
bProperties = false;
if (dwReturn)
{
if (dwReturn == ID_PROPERTIES)
{
SendMessage (WM_COMMAND, dwReturn, (LPARAM) this);
}
else
{
dwResult = 0;
pWnd = this;
bContinue = true;
do
{
dwResult = pWnd->SendMessage (WM_PROCESS_MENU, dwReturn);
if (dwResult & 1)
{
if (dwResult & 2)
{
bContinue = false;
}
if (dwResult & 4)
{
bProperties = true;
}
}
pWnd = pWnd->GetParent ();
}
while (pWnd && bContinue);
}
}
}
while (bProperties);
}
}
}
// CAppTreeCtrl::OnRButtonUp (nFlags, point);
}
#pragma warning ( default : 4100 )
#pragma warning ( disable : 4100 )
LONG CProjectTreeCtrl::
OnAppendMenu (WPARAM wParam, LPARAM lParam)
{
CMenu menu;
CMenu *pMenu;
if (menu.LoadMenu (IDM_PRJTREE_SPACE) && (pMenu = menu.GetSubMenu (0)) != NULL)
{
int nCount = pMenu->GetMenuItemCount ();
UINT uItem;
CString sItem;
DWORD dwResult = 25;
for (int i = 0; i < nCount; i++)
{
uItem = pMenu->GetMenuItemID (i);
if (uItem)
{
dwResult &= ~4;
pMenu->GetMenuString (i, sItem, MF_BYPOSITION);
VERIFY (::AppendMenu ((HMENU) lParam, MF_STRING, uItem, sItem));
}
else
{
dwResult |= 4;
VERIFY (::AppendMenu ((HMENU) lParam, MF_SEPARATOR, 0, NULL));
}
}
if (!g_pProject)
::EnableMenuItem ((HMENU) lParam, ID_REFRESH, MF_BYCOMMAND|MF_GRAYED);
return dwResult;
}
return 0;
}
#pragma warning ( default : 4100 )
#pragma warning ( disable : 4100 )
LONG CProjectTreeCtrl::
OnProcessMenu (WPARAM wParam, LPARAM lParam)
{
if (wParam >= ID_SPACE_FIRST && wParam <= ID_SPACE_LAST)
{
SendMessage (WM_COMMAND, wParam, (LPARAM) this);
return 1;
}
return 0;
}
#pragma warning ( default : 4100 )
#pragma warning ( disable : 4100 )
LONG CProjectTreeCtrl::
OnAppendProps (WPARAM wParam, LPARAM lParam)
{
/*CDbTreePropPage *pPage = new CDbTreePropPage;
if (pPage)
{
pPage->m_psp.dwFlags &= ~PSP_HASHELP;
pPage->Init (this);
((CPropertySheetPlus*) lParam)->AddPagePlus (pPage);
return 1;
}*/
return 0;
}
#pragma warning ( default : 4100 )
void CProjectTreeCtrl::
OnProperties ()
{
CPropertySheetPlus sheet (IDS_CAPTION_PROPERTIES, this);
DWORD dwResult = 0;
CWnd *pWnd = this;
bool bContinue = true, bProcess = false;
do
{
dwResult = pWnd->SendMessage (WM_APPEND_PROPS, dwResult, (LPARAM) &sheet);
if (dwResult & 1)
{
bProcess = true;
if (dwResult & 2)
{
bContinue = false;
}
}
pWnd = pWnd->GetParent ();
}
while (pWnd && bContinue);
if (bProcess)
{
sheet.m_psh.dwFlags &= ~PSH_HASHELP;
sheet.m_psh.dwFlags |= PSH_USEHICON;
sheet.m_psh.hIcon = ::LoadIcon (NULL, MAKEINTRESOURCE (IDI_EDITPAD));
sheet.m_bDeletePages = true;
sheet.DoModal ();
}
}
/////////////////////////////////////////////////////////////////////////////
#pragma warning ( default : 4711 )
void CProjectTreeCtrl::OnOpen()
{
if (m_hPointedItem)
{
if (m_listSelected.IsEmpty () || !m_listSelected.Find (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
{
POSITION pos = m_listSelected.GetHeadPosition ();
ASSERT (pos);
CProjectItem *pItem;
do
{
pItem = (CProjectItem*) GetItemData (m_listSelected.GetNext (pos));
if (pItem && (pItem->dwType & PI_FILE))
{
ASSERT (g_pProject);
CString sPath = g_pProject->MakePath (pItem);
AfxGetMainWnd ()->SendMessage (WM_OPEN_HERE, 0, (LPARAM) (LPCTSTR) sPath);
}
}
while (pos);
}
CWnd *pWnd = AfxGetMainWnd ();
pWnd->SetForegroundWindow ();
pWnd->SetFocus ();
}
}
void CProjectTreeCtrl::OnNewFile()
{
if (m_hPointedItem)
{
CProjectItem *pItem = (CProjectItem*) GetItemData (m_hPointedItem);
CFileDialog oFileDialog (FALSE, _T (""), _T (""), OFN_EXPLORER|OFN_ENABLEHOOK|OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, _T("Source Files (.c;.cc;.cxx;.cpp;.def;.rc;.rc2)|*.c;*.cc;*.cxx;*.cpp;*.def;*.rc;*.rc2|Header Files (.h;.hpp;.hxx;.inl;.hm)|*.h;*.hpp;*.hxx;*.inl;*.hm|All Files (*.*)|*.*||"), AfxGetMainWnd ());
static TCHAR szPath[_MAX_PATH];
oFileDialog.m_ofn.lpstrInitialDir = szPath;
if (oFileDialog.DoModal () != IDOK)
return;
ASSERT (g_pProject);
CString sFile = oFileDialog.GetPathName (), sPath = GetPath (g_pProject->sPath, TRUE);
FILE *fp = _tfopen (sFile, _T ("wt"));
if (fp)
{
fclose (fp);
AfxGetMainWnd ()->SendMessage (WM_OPEN_HERE, 0, (LPARAM) (LPCTSTR) sFile);
int nLen = sPath.GetLength ();
if (sPath == sFile.Left (nLen))
sFile = sFile.Mid (nLen);
CProjectItem *pNew = new CProjectItem;
pNew->sPath = sFile;
pNew->sMidPath = _T ("");
pNew->dwType = PI_FILE;
if (pItem)
pItem->lstItems.AddTail (pNew);
else
pNew->dwType |= PI_ROOT;
g_pProject->lstItems.AddTail (pNew);
g_pProject->SetModified ();
CString sName = GetNameExt (sFile);
int iIcon = GetItemIcon (sFile);
InsertFile (sName, iIcon, iIcon, (LPARAM) pNew, m_hPointedItem);
ExpandItem (m_hPointedItem, TVE_EXPAND);
}
}
}
void CProjectTreeCtrl::OnNewGroup()
{
if (m_hPointedItem)
{
CProjectItem *pItem = (CProjectItem*) GetItemData (m_hPointedItem);
ASSERT (g_pProject);
CProjectItem *pNew = new CProjectItem;
pNew->sPath = _T ("New Group");
pNew->sMidPath = _T ("");
pNew->dwType = PI_GROUP;
if (pItem)
pItem->lstItems.AddTail (pNew);
else
pNew->dwType |= PI_ROOT;
g_pProject->lstItems.AddTail (pNew);
g_pProject->SetModified ();
InsertGroup (pNew->sPath, 2, 2, (LPARAM) pNew, m_hPointedItem);
ExpandItem (m_hPointedItem, TVE_EXPAND);
}
}
void CProjectTreeCtrl::OnAddFile()
{
if (m_hPointedItem)
{
CProjectItem *pItem = (CProjectItem*) GetItemData (m_hPointedItem);
CEditFileAddDlg dlgFile (TRUE, _T (""), _T (""), OFN_ALLOWMULTISELECT|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_EXPLORER|OFN_ENABLEHOOK, _T("Source Files (.c;.cc;.cxx;.cpp;.def;.rc;.rc2)|*.c;*.cc;*.cxx;*.cpp;*.def;*.rc;*.rc2|Header Files (.h;.hpp;.hxx;.inl;.hm)|*.h;*.hpp;*.hxx;*.inl;*.hm|Resource Files (.ico;.bmp;.cur;.gif;.jpg)|*.ico;*.bmp;*.cur;*.gif;*.jpg|Supported Documents (...)|*.lsp;*.bas;*.vb;*.vbs;*.frm;*.dsm;*.bat;*.btm;*.cmd;*.c;*.cc;*.cpp;*.cxx;*.h;*.hpp;*.hxx;*.hm;*.inl;*.rh;*.tlh;*.tli;*.xs;*.dcl;*.dcc;*.f;*.f90;*.f9p;*.fpp;*.html;*.htm;*.shtml;*.ihtml;*.ssi;*.rul;*.java;*.jav;*.pas;*.pl;*.txt;*.doc;*.diz;*.py;*.rc;*.dlg;*.rex;*.rexx;*.sgml;*.sh;*.conf;*.scm;*.sql;*.tcl;*.text;*.sty;*.cls;*.clo;*.ltx;*.fd;*.dtx|All Files (*.*)|*.*||"), AfxGetMainWnd ());
static TCHAR szFileListBuffer[8192];
static TCHAR szPath[_MAX_PATH];
dlgFile.m_ofn.lpstrInitialDir = szPath;
*szFileListBuffer = _T ('\0');
dlgFile.m_ofn.lpstrFile = szFileListBuffer;
dlgFile.m_ofn.nMaxFile = countof (szFileListBuffer);
if (dlgFile.DoModal () == IDOK)
{
ASSERT (g_pProject);
POSITION pos = dlgFile.GetStartPosition ();
CString sFile, sPath = GetPath (g_pProject->sPath, TRUE);
int nLen = sPath.GetLength ();
while (pos)
{
sFile = dlgFile.GetNextPathName (pos);
if (sPath == sFile.Left (nLen))
sFile = sFile.Mid (nLen);
CProjectItem *pNew = new CProjectItem;
pNew->sPath = sFile;
pNew->sMidPath = _T ("");
pNew->dwType = PI_FILE;
if (pItem)
pItem->lstItems.AddTail (pNew);
else
pNew->dwType |= PI_ROOT;
g_pProject->lstItems.AddTail (pNew);
g_pProject->SetModified ();
CString sName = GetNameExt (sFile);
int iIcon = GetItemIcon (sFile);
InsertFile (sName, iIcon, iIcon, (LPARAM) pNew, m_hPointedItem);
}
ExpandItem (m_hPointedItem, TVE_EXPAND);
}
}
}
void CProjectTreeCtrl::OnRenameItem()
{
if (m_hPointedItem)
EditLabel (m_hPointedItem);
}
void CProjectTreeCtrl::OnRemoveItem()
{
if (m_hPointedItem)
{
if (m_listSelected.IsEmpty () || !m_listSelected.Find (m_hPointedItem))
{
CProjectItem *pItem = (CProjectItem*) GetItemData (m_hPointedItem);
if (pItem)
{
ASSERT (g_pProject);
POSITION pos = g_pProject->lstItems.Find (pItem);
if (pos)
{
g_pProject->RemoveItems (pos);
HTREEITEM hItem = GetParentItem (m_hPointedItem);
if (hItem)
{
CProjectItem *pParent = (CProjectItem*) GetItemData (hItem);
if (pParent)
{
pos = pParent->lstItems.Find (pItem);
if (pos)
pParent->lstItems.RemoveAt (pos);
}
if (GetItemCount (hItem) == 1)
ExpandItem (hItem, TVE_COLLAPSE);
}
g_pProject->SetModified ();
}
DeleteItem (m_hPointedItem);
}
}
else
{
POSITION pos = m_listSelected.GetHeadPosition (), oldpos;
ASSERT (pos);
CProjectItem *pItem;
HTREEITEM hItem;
do
{
oldpos = pos;
hItem = m_listSelected.GetNext (pos);
pItem = (CProjectItem*) GetItemData (hItem);
if (pItem && (pItem->dwType & PI_FILE))
{
ASSERT (g_pProject);
POSITION pos2 = g_pProject->lstItems.Find (pItem);
if (pos2)
{
HTREEITEM hParent = GetParentItem (hItem);
if (hParent)
{
CProjectItem *pParent = (CProjectItem*) GetItemData (hParent);
if (pParent)
{
POSITION pos3 = pParent->lstItems.Find (pItem);
if (pos3)
pParent->lstItems.RemoveAt (pos3);
}
if (GetItemCount (hParent) == 1)
ExpandItem (hParent, TVE_COLLAPSE);
}
g_pProject->RemoveItems (pos2);
}
DeleteItem (hItem);
m_listSelected.RemoveAt (oldpos);
pos = m_listSelected.GetHeadPosition ();
}
}
while (pos);
pos = m_listSelected.GetHeadPosition ();
while (pos)
{
hItem = m_listSelected.GetNext (pos);
pItem = (CProjectItem*) GetItemData (hItem);
if (pItem && (pItem->dwType & PI_GROUP))
{
ASSERT (g_pProject);
POSITION pos2 = g_pProject->lstItems.Find (pItem);
if (pos2)
{
HTREEITEM hParent = GetParentItem (hItem);
if (hParent)
{
CProjectItem *pParent = (CProjectItem*) GetItemData (hParent);
if (pParent)
{
POSITION pos3 = pParent->lstItems.Find (pItem);
if (pos3)
pParent->lstItems.RemoveAt (pos3);
}
if (GetItemCount (hParent) == 1)
ExpandItem (hParent, TVE_COLLAPSE);
}
g_pProject->RemoveItems (pos2);
}
DeleteItem (hItem);
}
}
m_listSelected.RemoveAll ();
g_pProject->SetModified ();
}
m_hPointedItem = NULL;
CWnd *pWnd = AfxGetMainWnd ();
pWnd->SetForegroundWindow ();
pWnd->SetFocus ();
}
}
void CProjectTreeCtrl::OnRefresh()
{
Populate ();
}
void CProjectTreeCtrl::OnItemProperties()
{
// TODO: Add your command handler code here
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -