124 lines
4.9 KiB
C
124 lines
4.9 KiB
C
|
#ifndef CToolbarMenu_H
|
||
|
#define CToolbarMenu_H
|
||
|
|
||
|
#include "menuband.h"
|
||
|
#include "mnbase.h"
|
||
|
#include "cwndproc.h"
|
||
|
|
||
|
#define TF_TBMENU 0
|
||
|
|
||
|
class CToolbarMenu : public CMenuToolbarBase,
|
||
|
public CNotifySubclassWndProc
|
||
|
|
||
|
{
|
||
|
|
||
|
public:
|
||
|
// *** IUnknown (override) ***
|
||
|
virtual STDMETHODIMP_(ULONG) AddRef(void) { return CMenuToolbarBase::AddRef(); };
|
||
|
virtual STDMETHODIMP_(ULONG) Release(void) { return CMenuToolbarBase::Release(); };
|
||
|
virtual STDMETHODIMP QueryInterface(REFIID riid, void** ppvObj) { return CMenuToolbarBase::QueryInterface(riid, ppvObj); };
|
||
|
|
||
|
// *** IWinEventHandler methods (override) ***
|
||
|
virtual STDMETHODIMP IsWindowOwner(HWND hwnd);
|
||
|
virtual STDMETHODIMP OnWinEvent(HWND hwnd, UINT dwMsg, WPARAM wParam, LPARAM lParam, LRESULT *plres);
|
||
|
|
||
|
virtual BOOL v_TrackingSubContextMenu() { return _fTrackingSubMenu; };
|
||
|
|
||
|
virtual void v_Show(BOOL fShow, BOOL fForceUpdate) ;
|
||
|
virtual BOOL v_UpdateIconSize(UINT uIconSize, BOOL fUpdateButtons) { return FALSE; };
|
||
|
virtual void v_UpdateButtons(BOOL fNegotiateSize) ;
|
||
|
virtual HRESULT v_GetSubMenu(int iCmd, const GUID* pguidService, REFIID riid, void** pObj) {return E_FAIL;};
|
||
|
virtual HRESULT v_CallCBItem(int idtCmd, UINT dwMsg, WPARAM wParam, LPARAM lParam) ;
|
||
|
virtual HRESULT v_GetState(int idtCmd, LPSMDATA psmd);
|
||
|
virtual HRESULT v_ExecItem(int iCmd);
|
||
|
virtual DWORD v_GetFlags(int iCmd) { return 0; };
|
||
|
virtual void v_Close(); // override
|
||
|
|
||
|
|
||
|
virtual int v_GetDragOverButton() { ASSERT(0); return 0;};
|
||
|
virtual HRESULT v_GetInfoTip(int iCmd, LPTSTR psz, UINT cch) {return E_NOTIMPL;};
|
||
|
virtual HRESULT v_CreateTrackPopup(int idCmd, REFIID riid, void** ppvObj) {ASSERT(0); return E_NOTIMPL;};
|
||
|
virtual void v_Refresh() {/*ASSERT(0);*/};
|
||
|
virtual void v_SendMenuNotification(UINT idCmd, BOOL fClear) {};
|
||
|
|
||
|
CToolbarMenu(DWORD dwFlags, HWND hwndTB);
|
||
|
|
||
|
|
||
|
protected:
|
||
|
|
||
|
virtual STDMETHODIMP OnChange(LONG lEvent, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) { return E_NOTIMPL; }
|
||
|
virtual LRESULT _DefWindowProc(HWND hwnd, UINT uMessage, WPARAM wParam, LPARAM lParam);
|
||
|
|
||
|
|
||
|
virtual void CreateToolbar(HWND hwndParent);
|
||
|
virtual void GetSize(SIZE* psize);
|
||
|
|
||
|
void _CancelMenu();
|
||
|
void _FillToolbar();
|
||
|
|
||
|
HWND _hwndSubject;
|
||
|
BITBOOL _fTrackingSubMenu:1;
|
||
|
|
||
|
friend CMenuToolbarBase* ToolbarMenu_Create(HWND hwnd);
|
||
|
};
|
||
|
|
||
|
class CTrackShellMenu : public ITrackShellMenu,
|
||
|
public IShellMenu2,
|
||
|
public IObjectWithSite,
|
||
|
public IServiceProvider
|
||
|
{
|
||
|
public:
|
||
|
// *** IUnknown ***
|
||
|
virtual STDMETHODIMP QueryInterface(REFIID riid, LPVOID * ppvObj);
|
||
|
virtual STDMETHODIMP_(ULONG) AddRef(void);
|
||
|
virtual STDMETHODIMP_(ULONG) Release(void);
|
||
|
|
||
|
// *** IShellMenu methods ***
|
||
|
virtual STDMETHODIMP Initialize(IShellMenuCallback* psmc, UINT uId, UINT uIdAncestor, DWORD dwFlags);
|
||
|
virtual STDMETHODIMP GetMenuInfo(IShellMenuCallback** ppsmc, UINT* puId,
|
||
|
UINT* puIdAncestor, DWORD* pdwFlags);
|
||
|
virtual STDMETHODIMP SetShellFolder(IShellFolder* psf, LPCITEMIDLIST pidlFolder, HKEY hkey, DWORD dwFlags);
|
||
|
virtual STDMETHODIMP GetShellFolder(DWORD* pdwFlags, LPITEMIDLIST* ppidl, REFIID riid, void** ppvObj);
|
||
|
virtual STDMETHODIMP SetMenu(HMENU hmenu, HWND hwnd, DWORD dwFlags);
|
||
|
virtual STDMETHODIMP GetMenu(HMENU* phmenu, HWND* phwnd, DWORD* pdwFlags);
|
||
|
virtual STDMETHODIMP InvalidateItem(LPSMDATA psmd, DWORD dwFlags);
|
||
|
virtual STDMETHODIMP GetState(LPSMDATA psmd);
|
||
|
virtual STDMETHODIMP SetMenuToolbar(IUnknown* punk, DWORD dwFlags);
|
||
|
|
||
|
// *** ITrackShellMenu methods ***
|
||
|
virtual STDMETHODIMP SetObscured(HWND hwndTB, IUnknown* punkBand, DWORD dwSMSetFlags);
|
||
|
virtual STDMETHODIMP Popup(HWND hwnd, POINTL *ppt, RECTL *prcExclude, DWORD dwFlags);
|
||
|
|
||
|
// *** IObjectWithSite methods ***
|
||
|
virtual STDMETHODIMP SetSite(IUnknown* punkSite);
|
||
|
virtual STDMETHODIMP GetSite(REFIID ridd, void** ppvObj) { *ppvObj = NULL; return E_NOTIMPL; };
|
||
|
|
||
|
// *** IServiceProvider methods ***
|
||
|
virtual STDMETHODIMP QueryService(REFGUID guidService,
|
||
|
REFIID riid, void **ppvObj);
|
||
|
|
||
|
// *** IShellMenu2 methods ***
|
||
|
virtual STDMETHODIMP GetSubMenu(UINT idCmd, REFIID riid, void **ppvObj);
|
||
|
virtual STDMETHODIMP SetToolbar(HWND hwnd, DWORD dwFlags);
|
||
|
virtual STDMETHODIMP SetMinWidth(int cxMenu);
|
||
|
virtual STDMETHODIMP SetNoBorder(BOOL fNoBorder);
|
||
|
virtual STDMETHODIMP SetTheme(LPCWSTR pszTheme);
|
||
|
|
||
|
CTrackShellMenu();
|
||
|
private:
|
||
|
virtual ~CTrackShellMenu();
|
||
|
|
||
|
IShellMenu* _psmClient;
|
||
|
IShellMenu* _psm;
|
||
|
IShellMenu2* _psm2;
|
||
|
IUnknown* _punkSite;
|
||
|
int _cRef;
|
||
|
HMENU _hmenu;
|
||
|
BITBOOL _fDestroyTopLevel : 1;
|
||
|
};
|
||
|
|
||
|
HRESULT ToolbarMenu_Popup(HWND hwnd, LPRECT prc, IUnknown* punk, HWND hwndTB, int idMenu, DWORD dwFlags);
|
||
|
CMenuToolbarBase* ToolbarMenu_Create(HWND hwnd);
|
||
|
|
||
|
#endif
|