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_)