favtreectrl.cpp

来自「一个多窗口的浏览器的程序benbrowse」· C++ 代码 · 共 162 行

CPP
162
字号
// FavTreeCtrl.cpp : implementation file
//

#include "stdafx.h"
#include "benbenbrowser.h"
#include "FavTreeCtrl.h"

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

/////////////////////////////////////////////////////////////////////////////
// CFavTreeCtrl
#include ".\sizecontrolbar\BenTreeCtrl.h"

CFavTreeCtrl::CFavTreeCtrl()
{
}

CFavTreeCtrl::~CFavTreeCtrl()
{
}


BEGIN_MESSAGE_MAP(CFavTreeCtrl, CBenTreeCtrl)
	//{{AFX_MSG_MAP(CFavTreeCtrl)
	ON_WM_CONTEXTMENU()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CFavTreeCtrl message handlers

void CFavTreeCtrl::OnContextMenu(CWnd* pWnd, CPoint point) 
{
	// TODO: Add your message handler code here
	HTREEITEM hItem = NULL;
	if (point.x == -1 && point.y == -1)
	{
		hItem = GetSelectedItem ();
	}
	else
	{
		CPoint ptClient = point;
		ScreenToClient (&ptClient);
		hItem = HitTest (ptClient);
	}
	if (hItem == NULL)
	{
		return;
	}
	
	TVITEM tvItem;
	
	ZeroMemory (&tvItem, sizeof (tvItem));
	tvItem.mask = TVIF_PARAM;
	tvItem.hItem = hItem;
	
	if (!GetItem (&tvItem))
	{
		return;
	}

	LPTVITEMDATA   lptvid; 
	lptvid = (LPTVITEMDATA)tvItem.lParam;
	if (lptvid == NULL)
	{
		ASSERT (FALSE);
		return;
	}

	IShellFolder* psfFolder = lptvid->lpsfParent;
	
	if (psfFolder == NULL)
	{
		SHGetDesktopFolder (&psfFolder);
	}
	else
	{
		psfFolder->AddRef();
	}
	
	if (psfFolder != NULL)
	{
		HWND hwndParent = GetParent()->GetSafeHwnd ();
		IContextMenu* pcm = NULL;

		HRESULT hr = psfFolder->GetUIObjectOf (hwndParent,
			1, 
			(LPCITEMIDLIST*)&lptvid->lpifq, 
			IID_IContextMenu, 
			NULL, 
			(LPVOID*)&pcm);
		
		if (SUCCEEDED (hr))
		{
			HMENU hPopup = CreatePopupMenu ();
			if (hPopup != NULL)
			{
				hr = pcm->QueryContextMenu(hPopup, 0, 1, 0x7fff, CMF_NORMAL | CMF_EXPLORE);
				
				if (SUCCEEDED (hr))
				{
					pcm->QueryInterface(IID_IContextMenu2, (LPVOID*)&m_pContextMenu2);
					
					HWND hwndThis = GetSafeHwnd ();
					UINT idCmd = TrackPopupMenu (hPopup,
									TPM_LEFTALIGN | TPM_RETURNCMD | TPM_RIGHTBUTTON, 
									point.x, 
									point.y,
									0,
									GetSafeHwnd (),
									NULL);
					
					if (::IsWindow (hwndThis))
					{
						if (m_pContextMenu2 != NULL)
						{
							m_pContextMenu2->Release();
							m_pContextMenu2 = NULL;
						}
						
						if (idCmd != 0)
						{
							CWaitCursor wait;

							CMINVOKECOMMANDINFO cmi;
							cmi.cbSize = sizeof(CMINVOKECOMMANDINFO);
							cmi.fMask = 0;
							cmi.hwnd = hwndParent;
							cmi.lpVerb = (LPCSTR)(INT_PTR)(idCmd - 1);
							cmi.lpParameters = NULL;
							cmi.lpDirectory = NULL;
							cmi.nShow = SW_SHOWNORMAL;
							cmi.dwHotKey = 0;
							cmi.hIcon = NULL;

							hr = pcm->InvokeCommand (&cmi);

							SetFocus ();
						}
					}
				}
			}
			
			if (pcm != NULL)
			{
				pcm->Release();
				pcm = NULL;
			}
		}
		
		if (psfFolder != NULL)
		{
			psfFolder->Release ();
			psfFolder = NULL;
		}
	}
}

⌨️ 快捷键说明

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