📄 explplg.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 + -