⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 prjtreec.cpp

📁 一个完整的编辑器的代码(很值得参考
💻 CPP
📖 第 1 页 / 共 3 页
字号:
          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 + -