Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

267 lines
9.9 KiB

  1. #ifndef _bandsite_h
  2. #define _bandsite_h
  3. #ifdef __cplusplus
  4. extern "C" { /* Assume C declarations for C++ */
  5. #endif /* __cplusplus */
  6. #define SZ_REGKEY_GLOBALADMINSETTINGS TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\IEAK")
  7. #define SZ_REGVALUE_GLOBALADMINSETTINGS TEXT("Admin Band Settings")
  8. // Admin Settings (dwAdminSettings)
  9. #define BAND_ADMIN_NORMAL 0x00000000
  10. #define BAND_ADMIN_NODDCLOSE 0x00000001 // Disable Drag & Drop, and Close
  11. #define BAND_ADMIN_NOMOVE 0x00000002 // Disable Moving within a Bar.
  12. #define BAND_ADMIN_ADMINMACHINE 0x80000000 // This is an admin machine and this bit displays the two Admin Context Menu items
  13. BOOL BandSite_HandleMessage(IUnknown *punk, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *plres);
  14. void BandSite_SetMode(IUnknown *punk, DWORD dwMode);
  15. BOOL ConfirmRemoveBand(HWND hwnd, UINT uID, LPCTSTR szName);
  16. #ifdef WANT_CBANDSITE_CLASS
  17. // UIActivateIO callback instance data
  18. typedef struct tagACTDATA {
  19. LPMSG lpMsg; // IN
  20. HRESULT hres;
  21. IUnknown *punk;
  22. } ACTDATA;
  23. typedef struct tagBANDITEMDATA
  24. {
  25. HWND hwnd;
  26. IDeskBand *pdb;
  27. IWinEventHandler *pweh;
  28. POINTL ptMinSize;
  29. POINTL ptMaxSize;
  30. POINTL ptIntegral;
  31. POINTL ptActual;
  32. WCHAR szTitle[256];
  33. DWORD dwModeFlags;
  34. DWORD dwBandID;
  35. BITBOOL fShow:1; // current show state
  36. BITBOOL fNoTitle:1; // 1:don't show title
  37. DWORD dwAdminSettings;
  38. COLORREF crBkgnd;
  39. } BANDITEMDATA, *LPBANDITEMDATA;
  40. typedef int (*PFNBANDITEMENUMCALLBACK)(LPBANDITEMDATA pbid, LPVOID pData);
  41. int _UIActIOCallback(LPBANDITEMDATA pbid, void *pv);
  42. typedef struct {
  43. HRESULT hres;
  44. const GUID * pguidService;
  45. const IID * piid;
  46. void ** ppvObj;
  47. } QSDATA;
  48. int _QueryServiceCallback(LPBANDITEMDATA pbid, void *pv);
  49. #include "caggunk.h"
  50. class CBandSite : public CAggregatedUnknown
  51. , public IBandSite
  52. , public IInputObjectSite
  53. , public IInputObject
  54. , public IDeskBarClient
  55. , public IWinEventHandler
  56. , public IPersistStream
  57. , public IDropTarget
  58. , public IServiceProvider
  59. , public IBandSiteHelper
  60. , public IOleCommandTarget
  61. {
  62. public:
  63. // *** IUnknown ***
  64. virtual STDMETHODIMP QueryInterface(REFIID riid, LPVOID * ppvObj) { return CAggregatedUnknown::QueryInterface(riid, ppvObj);};
  65. virtual STDMETHODIMP_(ULONG) AddRef(void) { return CAggregatedUnknown::AddRef();};
  66. virtual STDMETHODIMP_(ULONG) Release(void) { return CAggregatedUnknown::Release();};
  67. // *** IPersistStream methods ***
  68. virtual STDMETHODIMP GetClassID(CLSID *pClassID);
  69. virtual STDMETHODIMP IsDirty(void);
  70. virtual STDMETHODIMP Load(IStream *pStm);
  71. virtual STDMETHODIMP Save(IStream *pStm, BOOL fClearDirty);
  72. virtual STDMETHODIMP GetSizeMax(ULARGE_INTEGER *pcbSize);
  73. // *** IBandSite methods ***
  74. virtual STDMETHODIMP AddBand(IUnknown* punk);
  75. virtual STDMETHODIMP EnumBands(UINT uBand, DWORD* pdwBandID);
  76. virtual STDMETHODIMP QueryBand(DWORD dwBandID, IDeskBand** ppstb, DWORD* pdwState, LPWSTR pszName, int cchName);
  77. virtual STDMETHODIMP SetBandState(DWORD dwBandID, DWORD dwMask, DWORD dwState);
  78. virtual STDMETHODIMP RemoveBand(DWORD dwBandID);
  79. virtual STDMETHODIMP GetBandObject(DWORD dwBandID, REFIID riid, LPVOID* ppvObj);
  80. virtual STDMETHODIMP SetBandSiteInfo(const BANDSITEINFO * pbsinfo);
  81. virtual STDMETHODIMP GetBandSiteInfo(BANDSITEINFO * pbsinfo);
  82. // *** IOleWindow methods ***
  83. virtual STDMETHODIMP GetWindow(HWND * lphwnd);
  84. virtual STDMETHODIMP ContextSensitiveHelp(BOOL fEnterMode) { return E_NOTIMPL; }
  85. // *** IInputObjectSite methods ***
  86. virtual STDMETHODIMP OnFocusChangeIS(IUnknown *punk, BOOL fSetFocus);
  87. // *** IInputObject methods ***
  88. virtual STDMETHODIMP UIActivateIO(BOOL fActivate, LPMSG lpMsg);
  89. virtual STDMETHODIMP HasFocusIO();
  90. virtual STDMETHODIMP TranslateAcceleratorIO(LPMSG lpMsg);
  91. // *** IDeskBarClient methods ***
  92. virtual STDMETHODIMP SetDeskBarSite(THIS_ IUnknown* punkSite) ;
  93. virtual STDMETHODIMP SetModeDBC (THIS_ DWORD dwMode) ;
  94. virtual STDMETHODIMP UIActivateDBC(THIS_ DWORD dwState) ;
  95. virtual STDMETHODIMP GetSize (THIS_ DWORD dwWhich, LPRECT prc);
  96. // *** IWinEventHandler methods ***
  97. virtual STDMETHODIMP OnWinEvent (HWND hwnd, UINT dwMsg, WPARAM wParam, LPARAM lParam, LRESULT *plres);
  98. virtual STDMETHODIMP IsWindowOwner(HWND hwnd);
  99. // *** IDropTarget ***
  100. virtual STDMETHODIMP DragEnter(IDataObject *pdtobj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect);
  101. virtual STDMETHODIMP DragOver(DWORD grfKeyState, POINTL pt, DWORD *pdwEffect);
  102. virtual STDMETHODIMP DragLeave(void);
  103. virtual STDMETHODIMP Drop(IDataObject *pdtobj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect);
  104. // *** IServiceProvider methods ***
  105. virtual STDMETHODIMP QueryService(REFGUID guidService, REFIID riid, LPVOID* ppvObj);
  106. // *** IBandSiteHelper methods ***
  107. virtual STDMETHODIMP LoadFromStreamBS(IStream *pstm, REFIID riid, LPVOID *ppv);
  108. virtual STDMETHODIMP SaveToStreamBS(IUnknown *punk, IStream *pstm);
  109. // *** IOleCommandTarget ***
  110. virtual STDMETHODIMP QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD rgCmds[], OLECMDTEXT *pcmdtext);
  111. virtual STDMETHODIMP Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANTARG *pvarargIn, VARIANTARG *pvarargOut);
  112. CBandSite(IUnknown *punkAgg);
  113. protected:
  114. virtual HRESULT v_InternalQueryInterface(REFIID riid, LPVOID * ppvObj);
  115. IDeskBar* _pdb;
  116. IUnknown* _punkSite;
  117. IBandSite* _pbsOuter; // the aggregating bandsite
  118. virtual HRESULT _Initialize(HWND hwndParent);
  119. virtual void _OnCloseBand(DWORD dwBandID);
  120. virtual LRESULT _OnBeginDrag(NMREBAR* pnm);
  121. virtual LRESULT _OnNotify(LPNMHDR pnm);
  122. virtual IDropTarget* _WrapDropTargetForBand(IDropTarget* pdtBand);
  123. virtual DWORD _GetWindowStyle(DWORD* pdwExStyle);
  124. virtual HMENU _LoadContextMenu();
  125. HRESULT _OnBSCommand(int idCmd, DWORD idBandActive, LPBANDITEMDATA pbid);
  126. HRESULT _AddBand(IUnknown* punk);
  127. virtual HRESULT _OnContextMenu(WPARAM wParam, LPARAM lParam);
  128. IDataObject* _DataObjForBand(DWORD dwBandID);
  129. LPBANDITEMDATA _GetBandItemDataStructByID(DWORD uID);
  130. virtual int _ContextMenuHittest(LPARAM lParam, POINT* ppt);
  131. // container specific (rebar) members
  132. virtual BOOL _AddBandItem(LPBANDITEMDATA pbid);
  133. virtual void _DeleteBandItem(int i);
  134. LPBANDITEMDATA _GetBandItem(int i);
  135. int _GetBandItemCount();
  136. void _BandItemEnumCallback(int dincr, PFNBANDITEMENUMCALLBACK pfnCB, void *pv);
  137. void _DeleteAllBandItems();
  138. virtual void _ShowBand(LPBANDITEMDATA pbid, BOOL fShow);
  139. int _BandIDToIndex(DWORD dwBandID);
  140. DWORD _IndexToBandID(int i);
  141. DWORD _BandIDFromPunk(IUnknown* punk);
  142. HRESULT _SetBandStateHelper(DWORD dwBandID, DWORD dwMask, DWORD dwState);
  143. virtual void _UpdateAllBands(BOOL fBSOnly, BOOL fNoAutoSize);
  144. void _UpdateBand(DWORD dwBandID);
  145. BOOL _UpdateBandInfo(LPBANDITEMDATA pbid, BOOL fBSOnly);
  146. void _GetBandInfo(LPBANDITEMDATA pbid, DESKBANDINFO *pdbi);
  147. virtual void _BandInfoFromBandItem(REBARBANDINFO *prbbi, LPBANDITEMDATA pbid, BOOL fBSOnly);
  148. virtual void v_SetTabstop(LPREBARBANDINFO prbbi);
  149. BOOL _IsEnableTitle(LPBANDITEMDATA pbid);
  150. BOOL _IsHeightReasonable(UINT cy);
  151. HRESULT _LoadBandInfo(IStream *pstm, int i, DWORD dwVersion);
  152. HRESULT _SaveBandInfo(IStream *pstm, int i);
  153. HRESULT _AddBandByID(IUnknown *punk, DWORD dwID);
  154. BOOL _SendToToolband(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT* plres);
  155. BOOL _HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT* plres);
  156. int _BandIndexFromPunk(IUnknown *punk);
  157. BOOL _IsBandTabstop(LPBANDITEMDATA pbid);
  158. IUnknown* _GetNextTabstopBand(IUnknown* ptb, BOOL fBackwards);
  159. virtual HRESULT _CycleFocusBS(LPMSG lpMsg);
  160. void _OnRBAutoSize(NMRBAUTOSIZE* pnm);
  161. void _DoDragDrop();
  162. BOOL _PreDragDrop();
  163. virtual void _Close();
  164. BOOL _IsBandDeleteable(DWORD dwBandID);
  165. void _MinimizeBand(DWORD dwBandID);
  166. void _MaximizeBand(DWORD dwBandID);
  167. void _CheckNotifyOnAddRemove(DWORD dwBandID, int iCode);
  168. DWORD _GetAdminSettings(DWORD dwBandID);
  169. void _SetAdminSettings(DWORD dwBandID, DWORD dwNewAdminSettings);
  170. void _ReleaseBandItemData(LPBANDITEMDATA pbid, int iIndex);
  171. void _CacheActiveBand(IUnknown* ptb);
  172. HRESULT _IsRestricted(DWORD dwBandID, DWORD dwRestrictAction, DWORD dwBandFlags);
  173. virtual ~CBandSite();
  174. HWND _hwnd;
  175. HDSA _hdsaBandItemData;
  176. DWORD _dwMode;
  177. DWORD _dwShowState;
  178. DWORD _dwBandIDNext;
  179. DWORD _dwStyle;
  180. IDataObject* _pdtobj; // the stored drag drop data object;
  181. UINT _uDragBand;
  182. DWORD _dwDropEffect;
  183. IOleCommandTarget *_pct;
  184. IUnknown *_ptbActive;
  185. // cache for message reflector stuff
  186. HWND _hwndCache;
  187. IWinEventHandler *_pwehCache;
  188. // Stuff we need to remember while our context menu is up
  189. IContextMenu3* _pcm3Parent;
  190. IShellLinkA *_plink;
  191. IBandProxy * _pbp;
  192. BITBOOL _fCreatedBandProxy:1;
  193. BITBOOL _fDragSource :1;
  194. BITBOOL _fNoDropTarget :1;
  195. BITBOOL _fIEAKInstalled :1; // If TRUE, then display 2 extra contex menu items for Admins to use.
  196. UINT _fDragging:2; // we're dragging (0:FALSE 1:move [2:size])
  197. HWND _hwndDD; // window for cool D&D cursor drawing.
  198. friend HRESULT CBandSite_CreateInstance(IUnknown* pUnkOuter, IUnknown** ppunk, LPCOBJECTINFO poi);
  199. };
  200. typedef enum {
  201. CNOAR_ADDBAND = 1,
  202. CNOAR_REMOVEBAND = 2,
  203. CNOAR_CLOSEBAR = 3,
  204. } CNOAR_CODES;
  205. #endif // WANT_CBANDSITE_CLASS
  206. #ifdef __cplusplus
  207. }; /* End of extern "C" { */
  208. #endif // __cplusplus
  209. #endif