windows-nt/Source/XPSP1/NT/shell/shell32/duitask.h
2020-09-26 16:20:57 +08:00

94 lines
3.4 KiB
C++

HRESULT GetElementRootHWNDElement(Element *pe, HWNDElement **pphwndeRoot);
HRESULT GetElementRootHWND(Element *pe, HWND *phwnd);
class ActionTask: public Element
{
public:
static HRESULT Create(OUT Element** ppElement) { return Create(0, NULL, NULL, NULL, NULL, ppElement); }
static HRESULT Create(UINT nActive, OUT Element** ppElement) { return Create(nActive, NULL, NULL, NULL, NULL, ppElement); }
static HRESULT Create(UINT nActive, IUICommand* puiCommand, IShellItemArray* psiItemArray, CDUIView* pDUIView, CDefView* pDefView, OUT Element** ppElement);
// System event callbacks
virtual void OnPropertyChanged(PropertyInfo* ppi, int iIndex, Value* pvOld, Value* pvNew);
// Generic events
virtual void OnEvent(Event* pEvent);
// ClassInfo accessors (static and virtual instance-based)
static IClassInfo* Class;
virtual IClassInfo* GetClassInfo() { return Class; }
static HRESULT Register();
void UpdateTaskUI();
ActionTask();
virtual ~ActionTask();
protected:
HRESULT Initialize(IUICommand* puiCommand, IShellItemArray* psiItemArray, CDUIView* pDUIView, CDefView* pDefView);
HRESULT InitializeElement(); // init ActionTask DUI Element
HRESULT InitializeButton(); // init ActionTask's DUI Button
HRESULT ShowInfotipWindow(BOOL bShow);
private:
Button* _peButton;
IUICommand* _puiCommand;
IShellItemArray* _psiItemArray;
CDUIView* _pDUIView; // weak link - do not ref.
CDefView* _pDefView;
HWND _hwndRoot; // cache of root hwnd element's hwnd
BOOL _bInfotip; // TRUE if infotip has been created
};
class DestinationTask: public Element
{
public:
static HRESULT Create(OUT Element** ppElement) { return Create(0, NULL, NULL, NULL, ppElement); }
static HRESULT Create(UINT nActive, OUT Element** ppElement) { return Create(nActive, NULL, NULL, NULL, ppElement); }
static HRESULT Create(UINT nActive, LPITEMIDLIST pidl, CDUIView* pDUIView, CDefView* pDefView, OUT Element** ppElement);
// System event callbacks
virtual void OnPropertyChanged(PropertyInfo* ppi, int iIndex, Value* pvOld, Value* pvNew);
// Generic events
virtual void OnEvent(Event* pEvent);
virtual UINT MessageCallback(GMSG* pGMsg);
// ClassInfo accessors (static and virtual instance-based)
static IClassInfo* Class;
virtual IClassInfo* GetClassInfo() { return Class; }
static HRESULT Register();
DestinationTask();
virtual ~DestinationTask();
protected:
HRESULT Initialize(LPITEMIDLIST pidl, CDUIView* pDUIView, CDefView *pDefView);
HRESULT InitializeElement(); // init DestinationTask DUI Element
HRESULT InitializeButton(HICON hIcon, LPCWSTR pwszTitle); // init DestinationTask's DUI Button
HRESULT InvokePidl();
HRESULT OnContextMenu(POINT *ppt);
HRESULT ShowInfotipWindow(BOOL bShow);
HWND GetHWND()
{
if (!_peHost)
GetElementRootHWNDElement(this, &_peHost);
return _peHost ? _peHost->GetHWND() : NULL;
}
private:
Button* _peButton;
LPITEMIDLIST _pidlDestination;
CDUIView* _pDUIView;
CDefView* _pDefView;
HWND _hwndRoot; // cache of root hwnd element's hwnd
BOOL _bInfotip; // TRUE if infotip has been created
// Caching host information
HWNDElement * _peHost;
};