103 lines
2.7 KiB
C++
103 lines
2.7 KiB
C++
// ShellContextMenu.h: interface for the CShellContextMenu class.
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Copyright (C) 2000-2001 by Paolo Messina
|
|
// (http://www.geocities.com/ppescher - ppescher@yahoo.com)
|
|
//
|
|
// The contents of this file are subject to the Artistic License (the "License").
|
|
// You may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at:
|
|
// http://www.opensource.org/licenses/artistic-license.html
|
|
//
|
|
// If you find this code useful, credits would be nice!
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#if !defined(AFX_SHELLCONTEXTMENU_H__B690453B_A97A_4D33_A6A5_0A0BDE5EB1A4__INCLUDED_)
|
|
#define AFX_SHELLCONTEXTMENU_H__B690453B_A97A_4D33_A6A5_0A0BDE5EB1A4__INCLUDED_
|
|
|
|
#include <shlobj.h>
|
|
#include "ShellWrappers.h"
|
|
|
|
#if _MSC_VER > 1000
|
|
#pragma once
|
|
#endif // _MSC_VER > 1000
|
|
|
|
class CShellContextMenu
|
|
{
|
|
protected:
|
|
SContextMenuPtr m_pCtxMenu;
|
|
UINT m_nCmdFirstID;
|
|
UINT m_nCmdLastID;
|
|
CWnd* m_pOwner; // NULL means no owner (no subclassing in act)
|
|
WNDPROC m_oldWndProc;
|
|
|
|
public:
|
|
BOOL Create(IShellFolder* pParentFolder, LPCITEMIDLIST pidl);
|
|
CShellContextMenu();
|
|
virtual ~CShellContextMenu();
|
|
|
|
BOOL InvokeCommand(UINT nCmdID);
|
|
|
|
BOOL FillMenu(CMenu *pMenu, UINT nStartIndex = 0, UINT nCmdFirstID = 1, UINT nCmdLastID = 0x7FFF, UINT nFlags = 0);
|
|
|
|
BOOL HandleMenuMessage(UINT message, WPARAM wParam, LPARAM lParam, LRESULT *pLResult);
|
|
|
|
BOOL GetCommandDescription(UINT nCmdID, CString& rText);
|
|
|
|
BOOL IsValid();
|
|
|
|
// commands
|
|
void GetCommandRange(UINT& nCmdFirstID, UINT& nCmdLastID);
|
|
BOOL IsCommandInRange(UINT nCmdID);
|
|
|
|
// owner
|
|
void SetOwner(CWnd *pOwner);
|
|
CWnd* GetOwner();
|
|
|
|
protected:
|
|
void SubclassOwner();
|
|
void UnsubclassOwner();
|
|
static LRESULT CALLBACK WindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
|
|
};
|
|
|
|
// inline functions
|
|
|
|
inline CShellContextMenu::CShellContextMenu()
|
|
{
|
|
m_nCmdFirstID = 0;
|
|
m_nCmdLastID = 0;
|
|
m_pOwner = NULL;
|
|
m_oldWndProc = NULL;
|
|
}
|
|
|
|
inline CShellContextMenu::~CShellContextMenu()
|
|
{
|
|
if (m_pOwner != NULL)
|
|
UnsubclassOwner();
|
|
}
|
|
|
|
inline BOOL CShellContextMenu::IsValid()
|
|
{
|
|
return (m_pCtxMenu.IsValid());
|
|
}
|
|
|
|
inline void CShellContextMenu::GetCommandRange(UINT &nCmdFirstID, UINT &nCmdLastID)
|
|
{
|
|
nCmdFirstID = m_nCmdFirstID;
|
|
nCmdLastID = m_nCmdLastID;
|
|
}
|
|
|
|
inline BOOL CShellContextMenu::IsCommandInRange(UINT nCmdID)
|
|
{
|
|
return IsValid() && (nCmdID >= m_nCmdFirstID && nCmdID <= m_nCmdLastID);
|
|
}
|
|
|
|
inline CWnd* CShellContextMenu::GetOwner()
|
|
{
|
|
return m_pOwner;
|
|
}
|
|
|
|
#endif // !defined(AFX_SHELLCONTEXTMENU_H__B690453B_A97A_4D33_A6A5_0A0BDE5EB1A4__INCLUDED_)
|