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

📄 explplg.cpp

📁 CAN__组建现场总线系统设计技术(光盘)
💻 CPP
字号:

#include "stdafx.h"
#include "..\\resource.h"
#include "explplg.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 ()
//}}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))
	{//只有在item上才弹出这个菜单
		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));
		}
	}

	// CTreeCtrl2::OnRButtonUp (nFlags, point);
}
#pragma warning ( default : 4100 )


/////////////////////////////////////////////////////////////////////////////
#pragma warning ( default : 4711 )

⌨️ 快捷键说明

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