www.pudn.com > TVToolbar_demo > WBToolBar.h
// WBToolBar.h: interface for the CWBToolBar class. #if !defined(AFX_WBTOOLBAR_H__INCLUDED_) #define AFX_WBTOOLBAR_H__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 //#include#include //#include #include #include #pragma warning(disable:4786) #include #include using namespace std ; typedef stack _stackAnchorCookies; #include "Globals.h" #define EB_CLASS_NAME (TEXT("WBToolBarClass")) #define MIN_SIZE_X 300 #define MIN_SIZE_Y 24 #define IDM_REFRESH 0 #define IDM_OPENINWINDOW 1 #define IDM_SEARCHMENU WM_USER + 200 #define IDM_ONTHEINTERNET WM_USER + 202 #define IDM_FIRSTURL WM_USER + 250 #define IDM_LASTURL WM_USER + 260 // We allow 10 Urls in the menu. // In Internet Explorer 5.0, there // are only 5 stored in the registry. ////////////////// // handy to initialize a POINTL struct CPointL : public POINTL { CPointL(long xx, long yy) { x=xx; y=yy; } }; class CWBToolBar : public IDeskBand, public IInputObject, public IObjectWithSite, public IPersistStream, public IContextMenu, public IOleClientSite, public IOleInPlaceSite, public IOleControlSite, public IDispatch { public: CWBToolBar(); ~CWBToolBar(); public: TCHAR gszExeDir[MAX_PATH]; TCHAR gszSSExeDir[MAX_PATH]; TCHAR gszSSExe[MAX_PATH]; TCHAR szPath[MAX_PATH]; TCHAR szBarsINI[MAX_PATH]; TCHAR szChmURL[MAX_PATH]; bool GetShellPath(CString csName); protected: CBrush nActiveBrush, nInactiveBrush; CPen nDarkBorder, nWhiteBorder, nSelectedBorder; protected: // IUnknown Methods STDMETHOD(QueryInterface)(REFIID iid, void** ppvObject); STDMETHOD_(ULONG, AddRef)(); STDMETHOD_(DWORD, Release)(); // IOleWindow Methods STDMETHOD(GetWindow)(HWND* phwnd); STDMETHOD(ContextSensitiveHelp)(BOOL fEnterMode); // IDockingWindow Methods STDMETHOD(ShowDW)(BOOL fShow); STDMETHOD(CloseDW)(DWORD dwReserved); STDMETHOD(ResizeBorderDW)(LPCRECT prcBorder, IUnknown* punkToolbarSite, BOOL fReserved); // IDeskBand Methods STDMETHOD(GetBandInfo)(DWORD dwBandID, DWORD dwViewMode, DESKBANDINFO* pdbi); // IInputObject Methods STDMETHOD(UIActivateIO)(BOOL fActivate, LPMSG lpMsg); STDMETHOD(HasFocusIO)(void); STDMETHOD(TranslateAcceleratorIO)(LPMSG lpMsg); // IObjectWithSite Methods STDMETHOD(SetSite)(IUnknown* pUnkSite); STDMETHOD(GetSite)(REFIID riid, void** ppvSite); // IPersistStream Methods STDMETHOD(GetClassID)(CLSID* pClassID); STDMETHOD(IsDirty)(void); STDMETHOD(Load)(LPSTREAM pStm); STDMETHOD(Save)(LPSTREAM pStm, BOOL fClearDirty); STDMETHOD(GetSizeMax)(ULARGE_INTEGER* pcbSize); // IContextMenu Methods STDMETHOD(QueryContextMenu)(HMENU hmenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags); STDMETHOD(InvokeCommand)(LPCMINVOKECOMMANDINFO lpici); STDMETHOD(GetCommandString)(UINT idCmd, UINT uType, UINT* pwReserved, LPSTR pszName, UINT cchMax); // IOleClientSite Methods STDMETHOD(SaveObject)(); STDMETHOD(GetMoniker)(DWORD dwAssign, DWORD dwWhichMoniker, LPMONIKER* ppmk); STDMETHOD(GetContainer)(LPOLECONTAINER* ppContainer); STDMETHOD(ShowObject)(); STDMETHOD(OnShowWindow)(BOOL fShow); STDMETHOD(RequestNewObjectLayout)(); // IOleInPlaceSite Methods STDMETHOD(CanInPlaceActivate)(); STDMETHOD(OnInPlaceActivate)(); STDMETHOD(OnUIActivate)(); STDMETHOD(GetWindowContext)(IOleInPlaceFrame** ppFrame, IOleInPlaceUIWindow** ppDoc, LPRECT lprcPosRect, LPRECT lprcClipRect, LPOLEINPLACEFRAMEINFO lpFrameInfo); STDMETHOD(Scroll)(SIZE scrollExtent); STDMETHOD(OnUIDeactivate)(BOOL fUndoable); STDMETHOD(OnInPlaceDeactivate)(); STDMETHOD(DiscardUndoState)(); STDMETHOD(DeactivateAndUndo)(); STDMETHOD(OnPosRectChange)(LPCRECT lprcPosRect); // IOleControlSite Methods STDMETHOD(OnControlInfoChanged)(void); STDMETHOD(LockInPlaceActive)(BOOL fLock); STDMETHOD(GetExtendedControl)(LPDISPATCH* ppDisp); STDMETHOD(TransformCoords)(POINTL* pPtlHimetric, POINTF* pPtfContainer, DWORD dwFlags); STDMETHOD(TranslateAccelerator)(LPMSG lpMsg, DWORD grfModifiers); STDMETHOD(OnFocus)(BOOL fGotFocus); STDMETHOD(ShowPropertyFrame)(void); // IDispatch Methods STDMETHOD(GetTypeInfoCount)(UINT* pctinfo); STDMETHOD(GetTypeInfo)(UINT iTInfo, LCID lcid, ITypeInfo** ppTInfo); STDMETHOD(GetIDsOfNames)(REFIID riid, LPOLESTR* rgszNames, UINT cNames, LCID lcid,DISPID* rgDispId); STDMETHOD(Invoke)(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarResult, EXCEPINFO* pExcepInfo, UINT* puArgErr); protected: LONG _cRef; //BOOL m_bEnableCtxMenus; DWORD m_dwDLControl; // stores the location of the CHM file if any CString m_csChm; typedef struct { DWORD mapid; DWORD offset; } MAPID; MAPID* m_paMapIds; int m_cMapIds; //CString m_cszHome; //int m_mapHome; //CImageList* m_pimg; //CImageList* m_pimgHot; //CToolBarCtrl* m_pTB; private: HWND _hwndParent; // HWND of the Parent HWND _hWnd; // My HWND HWND _hwndWB; // HWND of the WebBrowser OC DWORD _dwViewMode; DWORD _dwBandID; DWORD _dwWBCookie; BOOL _bBandVarH; // Allow variable height? LONG _lBandHeight; // BandHeight // Interface pointers IInputObjectSite* _pSite; IOleInPlaceObject* _pIOleIPObject; IOleObject* _pIOleObject; IWebBrowser2* _pFrameWB; IWebBrowser2* _pWebBrowserOC; stack _stackAnchorCookies; enum AdviseType { Advise, Unadvise }; private: // Message Handlers LRESULT OnKillFocus(void); LRESULT OnSetFocus(void); LRESULT OnPaint(void); LRESULT OnSize(void); LRESULT OnCommand(WPARAM wParam, LPARAM lParam); // Helper Methods void FocusChange(BOOL); BOOL RegisterAndCreateWindow(void); void Cleanup(void); // Event Helper Methods ToolBar void AdviseWBEventSink(void); void UnadviseWBEventSink(void); void ManageAnchorsEventSink(AdviseType adviseType); HRESULT GetConnectionPoint(LPUNKNOWN pUnk, REFIID riid, LPCONNECTIONPOINT* pCP); // Event Helper Methods Browser //void AdviseFrameWBEventSink(void); //void UnadviseFrameWBEventSink(void); //void ManageFrameAnchorsEventSink(AdviseType adviseType); //HRESULT GetFrameConnectionPoint(LPUNKNOWN pUnk, REFIID riid, LPCONNECTIONPOINT* pFrameCP); // CHM File Functions HRESULT NavigateChm(LPCTSTR lpszChmFile, UINT mapID, LPCTSTR lpszTargetFrameName); LPTSTR StrChr(LPCTSTR psz, TCHAR ch); LPTSTR StrRChr(LPCTSTR psz, TCHAR ch); void AddTrailingBackslash(LPTSTR psz); public: LRESULT WndProc(HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM lParam); }; #endif // !defined(AFX_WBTOOLBAR_H__INCLUDED_)