OLD | NEW |
1 /* | 1 /* |
2 * http://msdn.microsoft.com/en-us/library/bb250436.aspx | 2 * http://msdn.microsoft.com/en-us/library/bb250436.aspx |
3 */ | 3 */ |
4 | 4 |
5 #ifndef _PLUGIN_CLASS_H_ | 5 #ifndef _PLUGIN_CLASS_H_ |
6 #define _PLUGIN_CLASS_H_ | 6 #define _PLUGIN_CLASS_H_ |
7 | 7 |
8 | 8 |
9 #include "PluginTypedef.h" | 9 #include "PluginTypedef.h" |
10 #include "Plugin.h" | 10 #include "Plugin.h" |
11 #include "PluginTab.h" | 11 #include "PluginTab.h" |
12 #define _CRTDBG_MAP_ALLOC | 12 #define _CRTDBG_MAP_ALLOC |
13 #include <stdlib.h> | 13 #include <stdlib.h> |
14 #include <crtdbg.h> | 14 #include <crtdbg.h> |
15 #include <set> | 15 #include <set> |
16 | 16 |
17 #include "NotificationMessage.h" | 17 #include "NotificationMessage.h" |
18 | 18 |
19 #define ICON_PLUGIN_DISABLED 0 | 19 #define ICON_PLUGIN_DISABLED 0 |
20 #define ICON_PLUGIN_ENABLED 1 | 20 #define ICON_PLUGIN_ENABLED 1 |
21 #define ICON_PLUGIN_DEACTIVATED 2 | 21 #define ICON_PLUGIN_DEACTIVATED 2 |
22 #define ICON_MAX 3 | 22 #define ICON_MAX 3 |
23 | 23 |
24 #define WM_LAUNCH_INFO (WM_APP + 10) | 24 #define WM_LAUNCH_INFO (WM_APP + 10) |
25 | 25 |
26 class CPluginMimeFilterClient; | 26 class CPluginMimeFilterClient; |
27 | 27 |
28 | 28 |
29 class ATL_NO_VTABLE CPluginClass : | 29 class ATL_NO_VTABLE CPluginClass : |
30 public CComObjectRootEx<CComMultiThreadModel>, | 30 public ATL::CComObjectRootEx<ATL::CComMultiThreadModel>, |
31 public CComCoClass<CPluginClass, &CLSID_PluginClass>, | 31 public ATL::CComCoClass<CPluginClass, &CLSID_PluginClass>, |
32 public IObjectWithSiteImpl<CPluginClass>, | 32 public ATL::IObjectWithSiteImpl<CPluginClass>, |
33 public IDispatchImpl<IIEPlugin, &IID_IIEPlugin, &LIBID_PluginLib>, | 33 public IOleCommandTarget, |
34 public IOleCommandTarget | 34 public ATL::IDispEventImpl<1, CPluginClass, &DIID_DWebBrowserEvents2, &LIBID_S
HDocVw, 1, 1> |
35 { | 35 { |
36 | 36 |
37 friend class CPluginTab; | 37 friend class CPluginTab; |
38 | 38 |
39 private: | 39 private: |
40 | 40 |
41 CPluginTab* m_tab; | 41 CPluginTab* m_tab; |
42 | 42 |
43 public: | 43 public: |
44 | 44 |
45 DECLARE_REGISTRY_RESOURCEID(IDR_PLUGIN_CLASS) | 45 DECLARE_REGISTRY_RESOURCEID(IDR_PLUGIN_CLASS) |
46 | 46 |
47 DECLARE_PROTECT_FINAL_CONSTRUCT() | 47 DECLARE_PROTECT_FINAL_CONSTRUCT() |
48 | 48 |
49 BEGIN_COM_MAP(CPluginClass) | 49 BEGIN_COM_MAP(CPluginClass) |
50 COM_INTERFACE_ENTRY(IIEPlugin) | |
51 COM_INTERFACE_ENTRY(IDispatch) | |
52 COM_INTERFACE_ENTRY(IObjectWithSite) | 50 COM_INTERFACE_ENTRY(IObjectWithSite) |
53 COM_INTERFACE_ENTRY(IOleCommandTarget) | 51 COM_INTERFACE_ENTRY(IOleCommandTarget) |
54 END_COM_MAP() | 52 END_COM_MAP() |
55 | 53 |
| 54 BEGIN_SINK_MAP(CPluginClass) |
| 55 SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_BEFORENAVIGATE2, OnBeforeNa
vigate2) |
| 56 SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_DOWNLOADBEGIN, OnDownloadBe
gin) |
| 57 SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_DOWNLOADCOMPLETE, OnDownloa
dComplete) |
| 58 SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_DOCUMENTCOMPLETE, OnDocumen
tComplete) |
| 59 SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_WINDOWSTATECHANGED, OnWindo
wStateChanged) |
| 60 SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_COMMANDSTATECHANGE, OnComma
ndStateChange) |
| 61 SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_ONQUIT, Unadvise) |
| 62 END_SINK_MAP() |
| 63 |
56 CPluginClass(); | 64 CPluginClass(); |
57 ~CPluginClass(); | 65 ~CPluginClass(); |
58 | 66 |
59 HRESULT FinalConstruct(); | 67 HRESULT FinalConstruct(); |
60 void FinalRelease(); | 68 void FinalRelease(); |
61 | 69 |
62 // IObjectWithSite | 70 // IObjectWithSite |
63 | 71 |
64 STDMETHOD(SetSite)(IUnknown *pUnkSite); | 72 STDMETHOD(SetSite)(IUnknown *pUnkSite); |
65 | 73 |
66 // IOleCommandTarget | 74 // IOleCommandTarget |
67 | 75 |
68 STDMETHOD(QueryStatus)(const GUID* pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[
], OLECMDTEXT* pCmdText); | 76 STDMETHOD(QueryStatus)(const GUID* pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[
], OLECMDTEXT* pCmdText); |
69 STDMETHOD(Exec)(const GUID*, DWORD nCmdID, DWORD, VARIANTARG*, VARIANTARG* pva
Out); | 77 STDMETHOD(Exec)(const GUID*, DWORD nCmdID, DWORD, VARIANTARG*, VARIANTARG* pva
Out); |
70 | 78 |
71 // IDispatch | |
72 | |
73 STDMETHOD(Invoke)(DISPID dispidMember,REFIID riid, LCID lcid, WORD wFlags, | |
74 DISPPARAMS * pdispparams, VARIANT * pvarResult,EXCEPINFO * pexcepinfo, UINT
* puArgErr); | |
75 | 79 |
76 static CPluginTab* GetTab(DWORD dwThreadId); | 80 static CPluginTab* GetTab(DWORD dwThreadId); |
77 CPluginTab* GetTab(); | 81 CPluginTab* GetTab(); |
78 | 82 |
79 void UpdateStatusBar(); | 83 void UpdateStatusBar(); |
80 static DWORD WINAPI MainThreadProc(LPVOID pParam); | 84 static DWORD WINAPI MainThreadProc(LPVOID pParam); |
81 | 85 |
82 private: | 86 private: |
83 | 87 |
84 bool SetMenuBar(HMENU hMenu, const CString& url); | 88 bool SetMenuBar(HMENU hMenu, const CString& url); |
85 HMENU CreatePluginMenu(const CString& url); | 89 HMENU CreatePluginMenu(const CString& url); |
86 | 90 |
87 void DisplayPluginMenu(HMENU hMenu, int nToolbarCmdID, POINT pt, UINT nMenuFla
gs); | 91 void DisplayPluginMenu(HMENU hMenu, int nToolbarCmdID, POINT pt, UINT nMenuFla
gs); |
88 bool CreateStatusBarPane(); | 92 bool CreateStatusBarPane(); |
89 | 93 |
90 CComPtr<IConnectionPoint> GetConnectionPoint(); | |
91 | |
92 public: | 94 public: |
93 HWND GetBrowserHWND() const; | 95 HWND GetBrowserHWND() const; |
94 HWND GetTabHWND() const; | 96 HWND GetTabHWND() const; |
95 CComQIPtr<IWebBrowser2> GetBrowser() const; | 97 CComQIPtr<IWebBrowser2> GetBrowser() const; |
96 | 98 |
97 STDMETHODIMP OnTabChanged(DISPPARAMS* pDispParams, WORD wFlags); | |
98 | 99 |
99 static CPluginMimeFilterClient* s_mimeFilter; | 100 static CPluginMimeFilterClient* s_mimeFilter; |
100 | 101 |
101 private: | 102 private: |
102 | 103 |
103 CString GetBrowserUrl() const; | 104 CString GetBrowserUrl() const; |
104 | 105 |
105 | 106 |
106 static DWORD WINAPI StartInitObject(LPVOID thisPtr); | 107 static DWORD WINAPI StartInitObject(LPVOID thisPtr); |
107 bool InitObject(bool bBHO); | 108 bool InitObject(bool bBHO); |
108 void CloseTheme(); | 109 void CloseTheme(); |
109 void UpdateTheme(); | 110 void UpdateTheme(); |
110 | 111 |
111 static HICON GetStatusBarIcon(const CString& url); | 112 static HICON GetStatusBarIcon(const CString& url); |
112 static CPluginClass* FindInstance(HWND hStatusBarWnd); | 113 static CPluginClass* FindInstance(HWND hStatusBarWnd); |
113 static LRESULT CALLBACK NewStatusProc(HWND hWnd, UINT message, WPARAM wParam,
LPARAM lParam); | 114 static LRESULT CALLBACK NewStatusProc(HWND hWnd, UINT message, WPARAM wParam,
LPARAM lParam); |
114 static LRESULT CALLBACK PaneWindowProc(HWND hWnd, UINT message, WPARAM wParam,
LPARAM lParam); | 115 static LRESULT CALLBACK PaneWindowProc(HWND hWnd, UINT message, WPARAM wParam,
LPARAM lParam); |
115 static void FirstRunThread(); | 116 static void FirstRunThread(); |
116 void BeforeNavigate2(DISPPARAMS* pDispParams); | |
117 | 117 |
118 void Unadvice(); | 118 void STDMETHODCALLTYPE OnBeforeNavigate2(/* [in] */ IDispatch* pDisp, |
| 119 /* [in] */ VARIANT* URL, |
| 120 /* [in] */ VARIANT* Flags, |
| 121 /* [in] */ VARIANT* TargetFrameName, |
| 122 /* [in] */ VARIANT* PostData, |
| 123 /* [in] */ VARIANT* Headers, |
| 124 /* [in, out] */ VARIANT_BOOL* Cancel); |
| 125 void STDMETHODCALLTYPE OnDownloadBegin(); |
| 126 void STDMETHODCALLTYPE OnDownloadComplete(); |
| 127 void STDMETHODCALLTYPE OnDocumentComplete(IDispatch* frameBrowserDisp, VARIANT
* /*urlOrPidl*/); |
| 128 void STDMETHODCALLTYPE OnWindowStateChanged(unsigned long flags, unsigned long
validFlagsMask); |
| 129 void STDMETHODCALLTYPE OnCommandStateChange(long command, VARIANT_BOOL enable)
; |
| 130 // OnOnQuit |
| 131 void STDMETHODCALLTYPE Unadvise(); |
119 | 132 |
120 void ShowStatusBar(); | 133 void ShowStatusBar(); |
121 bool IsStatusBarEnabled(); | 134 bool IsStatusBarEnabled(); |
122 | 135 |
123 public: | 136 public: |
124 CComQIPtr<IWebBrowser2> m_webBrowser2; | 137 CComQIPtr<IWebBrowser2> m_webBrowser2; |
125 private: | 138 private: |
126 DWORD m_nConnectionID; | |
127 HWND m_hBrowserWnd; | 139 HWND m_hBrowserWnd; |
128 HWND m_hTabWnd; | 140 HWND m_hTabWnd; |
129 HWND m_hStatusBarWnd; | 141 HWND m_hStatusBarWnd; |
130 HWND m_hPaneWnd; | 142 HWND m_hPaneWnd; |
131 | 143 |
132 WNDPROC m_pWndProcStatus; | 144 WNDPROC m_pWndProcStatus; |
133 int m_nPaneWidth; | 145 int m_nPaneWidth; |
134 HANDLE m_hTheme; | 146 HANDLE m_hTheme; |
135 | 147 |
136 CriticalSection m_csStatusBar; | 148 CriticalSection m_csStatusBar; |
137 | 149 |
138 NotificationMessage notificationMessage; | 150 NotificationMessage notificationMessage; |
139 | 151 |
140 bool m_isAdviced; | 152 bool m_isAdvised; |
141 bool m_isInitializedOk; | 153 bool m_isInitializedOk; |
142 | 154 |
143 // Atom pane class | 155 // Atom pane class |
144 static ATOM s_atomPaneClass; | 156 static ATOM s_atomPaneClass; |
145 | 157 |
146 static ATOM GetAtomPaneClass(); | 158 static ATOM GetAtomPaneClass(); |
147 | 159 |
148 // Icons | 160 // Icons |
149 static HICON s_hIcons[ICON_MAX]; | 161 static HICON s_hIcons[ICON_MAX]; |
150 static DWORD s_hIconTypes[ICON_MAX]; | 162 static DWORD s_hIconTypes[ICON_MAX]; |
(...skipping 16 matching lines...) Expand all Loading... |
167 | 179 |
168 // Async browser | 180 // Async browser |
169 static CComQIPtr<IWebBrowser2> s_asyncWebBrowser2; | 181 static CComQIPtr<IWebBrowser2> s_asyncWebBrowser2; |
170 static CComQIPtr<IWebBrowser2> GetAsyncBrowser(); | 182 static CComQIPtr<IWebBrowser2> GetAsyncBrowser(); |
171 }; | 183 }; |
172 | 184 |
173 OBJECT_ENTRY_AUTO(__uuidof(PluginClass), CPluginClass) | 185 OBJECT_ENTRY_AUTO(__uuidof(PluginClass), CPluginClass) |
174 | 186 |
175 | 187 |
176 #endif // _PLUGIN_CLASS_H_ | 188 #endif // _PLUGIN_CLASS_H_ |
OLD | NEW |