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

📄 explplg.cpp

📁 一个完整的编辑器的代码(很值得参考
💻 CPP
字号:

#include "stdafx.h"
#include "resource.h"
#include "editcmd.h"
#include "explplg.h"
#include "sheetpls.h"
#include "wm.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#pragma warning ( disable : 4711 )
/////////////////////////////////////////////////////////////////////////////
// CExplorePlug

CExplorePlug::CExplorePlug ()
{
}

CExplorePlug:: ~ CExplorePlug ()
{
}

BEGIN_MESSAGE_MAP (CExplorePlug, CShellTree)
//{{AFX_MSG_MAP( CExplorePlug )
ON_WM_CREATE ()
ON_NOTIFY_REFLECT (TVN_ITEMEXPANDING, OnItemExpanding)
ON_NOTIFY_REFLECT (TVN_SELCHANGED, OnSelChanged)
ON_NOTIFY_REFLECT (NM_DBLCLK, OnDblClk)
ON_NOTIFY_REFLECT (TVN_DELETEITEM, OnDeleteItem)
ON_WM_DESTROY ()
ON_WM_LBUTTONDOWN ()
ON_WM_MOUSEMOVE ()
ON_WM_LBUTTONUP ()
ON_WM_RBUTTONDOWN ()
ON_WM_RBUTTONUP ()
ON_COMMAND(ID_PROPERTIES, OnProperties)
//}}AFX_MSG_MAP
END_MESSAGE_MAP ()

/////////////////////////////////////////////////////////////////////////////
// CExplorePlug diagnostics

#ifdef _DEBUG
void CExplorePlug::AssertValid ()
const
{
  CShellTree::AssertValid ();
}

void CExplorePlug::Dump (CDumpContext & dc)
const
{
  CShellTree::Dump (dc);
}

#endif                          // _DEBUG

/////////////////////////////////////////////////////////////////////////////
// CExplorePlug message handlers

int CExplorePlug::OnCreate (LPCREATESTRUCT lpCreateStruct)
{
  if (CShellTree::OnCreate (lpCreateStruct) == -1)
    return -1;
  SetFont (CFont::FromHandle ((HFONT) GetStockObject (DEFAULT_GUI_FONT)));
  EnableImages ();
  PopulateTree ();
  //if (FAILED (OleInitialize (NULL)))
  //  TRACE (_T("Can't initialize OLE\n"));
  return 0;
}

void CExplorePlug::
OnDestroy ()
{
  CShellTree::OnDestroy ();
  //OleUninitialize ();
}

void CExplorePlug::
OnItemExpanding (NMHDR * pNMHDR, LRESULT * pResult)
{
  NM_TREEVIEW *pNMTreeView = (NM_TREEVIEW *) pNMHDR;

  CWaitCursor wait;
  OnFolderExpanding (pNMHDR, pResult);
  Invalidate ();
  *pResult = 0;
}

void CExplorePlug::
OnSelChanged (NMHDR * pNMHDR, LRESULT * pResult)
{
  NM_TREEVIEW *pNMTreeView = (NM_TREEVIEW *) pNMHDR;

  m_hPointedItem = pNMTreeView->itemNew.hItem;
  *pResult = 0;
}


void CExplorePlug::
OnDblClk (NMHDR * pNMHDR, LRESULT * pResult)
{
  NM_TREEVIEW *pNMTreeView = (NM_TREEVIEW *) pNMHDR;

	LPTVITEMDATA lptvid;  //Long pointer to TreeView item data
	LPSHELLFOLDER lpsf2 = NULL;
	TV_ITEM tvi;
	tvi.mask = TVIF_PARAM;
	tvi.hItem = m_hPointedItem;
  if (!GetItem (&tvi))
		return;
	lptvid = (LPTVITEMDATA) tvi.lParam;
  ULONG ulAttrs = SFGAO_HASSUBFOLDER|SFGAO_FOLDER;
  // Determine what type of object we have.
  lptvid->lpsfParent->GetAttributesOf (1, (const struct _ITEMIDLIST **) &lptvid->lpi, &ulAttrs);
  if (!(ulAttrs & SFGAO_FOLDER ))
    {
      TCHAR szPath[_MAX_PATH];
      if (GetName (lptvid->lpsfParent, lptvid->lpi, SHGDN_NORMAL|SHGDN_FORPARSING, szPath))
        AfxGetMainWnd ()->SendMessage (WM_OPEN_HERE, 0, (LPARAM) szPath);
    }
  *pResult = 0;
}

void CExplorePlug::
OnDeleteItem (NMHDR * pNMHDR, LRESULT * pResult)
{
  NM_TREEVIEW *pNMTreeView = (NM_TREEVIEW *) pNMHDR;

  OnDeleteShellItem (pNMHDR, pResult);
  *pResult = 0;
}

#pragma warning ( disable : 4100 )
void CExplorePlug::
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));
        }
    }
  // CTreeCtrl2::OnRButtonDown (nFlags, point);
}
#pragma warning ( default : 4100 )

#define ID_SPACE_FIRST 0
#define ID_SPACE_LAST 0

#pragma warning ( disable : 4100 )
void CExplorePlug::
OnRButtonUp (UINT nFlags, CPoint point)
{
  UINT nFlags2;
  HTREEITEM hItem = HitTest (point, &nFlags2);
  if (m_hPointedItem && nFlags2 & (TVHT_ONITEMICON | TVHT_ONITEMLABEL))
    {
      if (hItem == m_hPointedItem)
        {
	        LPTVITEMDATA lptvid;  //Long pointer to TreeView item data
	        LPSHELLFOLDER lpsf2 = NULL;
	        TV_ITEM tvi;
          ClientToScreen (&point);
		      tvi.mask = TVIF_PARAM;
		      tvi.hItem = hItem;
          if (!GetItem (&tvi))
			      return;
		      lptvid = (LPTVITEMDATA) tvi.lParam;
		      DoTheMenuThing (GetSafeHwnd (), lptvid->lpsfParent, lptvid->lpi, &point);
        }
      if (!m_bWasSelected)
        {
          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);
          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);
            }
        }
    }
  // CTreeCtrl2::OnRButtonUp (nFlags, point);
}
#pragma warning ( default : 4100 )

void CExplorePlug::
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 )

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -