1 /* 2 * ReactOS Explorer 3 * 4 * Copyright 2009 Andrew Hill <ash77@reactos.org> 5 * 6 * This library is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Lesser General Public 8 * License as published by the Free Software Foundation; either 9 * version 2.1 of the License, or (at your option) any later version. 10 * 11 * This library is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with this library; if not, write to the Free Software 18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 19 */ 20 21 #pragma once 22 23 class CBrandBand : 24 public CWindowImpl<CBrandBand, CWindow, CControlWinTraits>, 25 public CComCoClass<CBrandBand, &CLSID_BrandBand>, 26 public CComObjectRootEx<CComMultiThreadModelNoCS>, 27 public IDeskBand, 28 public IObjectWithSite, 29 public IInputObject, 30 public IPersistStream, 31 public IOleCommandTarget, 32 public IServiceProvider, 33 public IWinEventHandler, 34 public IDispatch 35 { 36 private: 37 CComPtr<IDockingWindowSite> fSite; 38 DWORD fProfferCookie; 39 int fCurrentFrame; 40 int fMaxFrameCount; 41 HBITMAP fImageBitmap; 42 int fBitmapSize; 43 DWORD fAdviseCookie; 44 public: 45 CBrandBand(); 46 ~CBrandBand(); 47 void StartAnimation(); 48 void StopAnimation(); 49 void SelectImage(); 50 public: 51 // *** IDeskBand methods *** 52 STDMETHOD(GetBandInfo)(DWORD dwBandID, DWORD dwViewMode, DESKBANDINFO* pdbi) override; 53 54 // *** IObjectWithSite methods *** 55 STDMETHOD(SetSite)(IUnknown* pUnkSite) override; 56 STDMETHOD(GetSite)(REFIID riid, void **ppvSite) override; 57 58 // *** IOleWindow methods *** 59 STDMETHOD(GetWindow)(HWND *lphwnd) override; 60 STDMETHOD(ContextSensitiveHelp)(BOOL fEnterMode) override; 61 62 // *** IDockingWindow methods *** 63 STDMETHOD(CloseDW)(DWORD dwReserved) override; 64 STDMETHOD(ResizeBorderDW)(const RECT* prcBorder, IUnknown* punkToolbarSite, BOOL fReserved) override; 65 STDMETHOD(ShowDW)(BOOL fShow) override; 66 67 // *** IInputObject methods *** 68 STDMETHOD(HasFocusIO)() override; 69 STDMETHOD(TranslateAcceleratorIO)(LPMSG lpMsg) override; 70 STDMETHOD(UIActivateIO)(BOOL fActivate, LPMSG lpMsg) override; 71 72 // *** IPersist methods *** 73 STDMETHOD(GetClassID)(CLSID *pClassID) override; 74 75 // *** IPersistStream methods *** 76 STDMETHOD(IsDirty)() override; 77 STDMETHOD(Load)(IStream *pStm) override; 78 STDMETHOD(Save)(IStream *pStm, BOOL fClearDirty) override; 79 STDMETHOD(GetSizeMax)(ULARGE_INTEGER *pcbSize) override; 80 81 // *** IWinEventHandler methods *** 82 STDMETHOD(OnWinEvent)(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *theResult) override; 83 STDMETHOD(IsWindowOwner)(HWND hWnd) override; 84 85 // *** IOleCommandTarget methods *** 86 STDMETHOD(QueryStatus)(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[ ], OLECMDTEXT *pCmdText) override; 87 STDMETHOD(Exec)(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut) override; 88 89 // *** IServiceProvider methods *** 90 STDMETHOD(QueryService)(REFGUID guidService, REFIID riid, void **ppvObject) override; 91 92 // *** IDispatch methods *** 93 STDMETHOD(GetTypeInfoCount)(UINT *pctinfo) override; 94 STDMETHOD(GetTypeInfo)(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo) override; 95 STDMETHOD(GetIDsOfNames)(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) override; 96 STDMETHOD(Invoke)(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) override; 97 98 // message handlers 99 LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled); 100 LRESULT OnEraseBkgnd(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled); 101 LRESULT OnPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled); 102 LRESULT OnTimer(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled); 103 104 BEGIN_MSG_MAP(CBrandBand) 105 // MESSAGE_HANDLER(WM_SIZE, OnSize) 106 MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBkgnd) 107 MESSAGE_HANDLER(WM_PAINT, OnPaint) 108 MESSAGE_HANDLER(WM_TIMER, OnTimer) 109 END_MSG_MAP() 110 111 DECLARE_REGISTRY_RESOURCEID(IDR_BRANDBAND) 112 DECLARE_NOT_AGGREGATABLE(CBrandBand) 113 114 DECLARE_PROTECT_FINAL_CONSTRUCT() 115 116 BEGIN_COM_MAP(CBrandBand) 117 COM_INTERFACE_ENTRY_IID(IID_IDeskBand, IDeskBand) 118 COM_INTERFACE_ENTRY_IID(IID_IObjectWithSite, IObjectWithSite) 119 COM_INTERFACE_ENTRY_IID(IID_IOleWindow, IOleWindow) 120 COM_INTERFACE_ENTRY_IID(IID_IDockingWindow, IDockingWindow) 121 COM_INTERFACE_ENTRY_IID(IID_IInputObject, IInputObject) 122 COM_INTERFACE_ENTRY_IID(IID_IPersist, IPersist) 123 COM_INTERFACE_ENTRY_IID(IID_IPersistStream, IPersistStream) 124 COM_INTERFACE_ENTRY_IID(IID_IWinEventHandler, IWinEventHandler) 125 COM_INTERFACE_ENTRY_IID(IID_IOleCommandTarget, IOleCommandTarget) 126 COM_INTERFACE_ENTRY_IID(IID_IServiceProvider, IServiceProvider) 127 COM_INTERFACE_ENTRY_IID(IID_IDispatch, IDispatch) 128 END_COM_MAP() 129 }; 130