Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
cOleWindowless.h
Go to the documentation of this file.
1 //
4 //
5 #ifndef _INC_cOleWindowless_H
6 #define _INC_cOleWindowless_H
7 #ifndef NO_PRAGMA_ONCE
8 #pragma once
9 #endif
10 #include "cOleControl.h"
12 
13 #if defined(_WIN32) && defined(_MSC_VER)
14 #include <ocidl.h>
15 #include <docobj.h> // IOleDocumentSite
16 
17 namespace GrayLib
18 {
19  class cOleWindowless
20  : public cOleWindowBase
21  , public IServiceProvider
22  , public IOleDocumentSite
23  , public IOleClientSite
24  , public IOleInPlaceSiteWindowless // includes IOleInPlaceSiteEx, IOleInPlaceSite, IOleWindow
25  , public IOleControlSite
26  {
30 
31  typedef cOleWindowBase SUPER_t;
32 
33  public:
34  cIUnkPtr<IOleInPlaceObjectWindowless> m_pWindowlessObject; // i can control all the window stuff.
35  bool m_bHasFocus;
36 
37  public:
38  cOleWindowless(cOleControl* pComControl, IOleInPlaceObjectWindowless* pWindowlessObject);
39  virtual ~cOleWindowless();
40 
41  virtual HRESULT InitInstance() override;
42  virtual bool CheckRectDirty() override;
43  virtual HRESULT DrawControl(HDC hDC, DWORD dwDrawAspect) override;
44  virtual LRESULT OnWindowMessage1(MSG& sMsg) override;
45 
46  bool isDisposed() const
47  {
48  return m_pWindowlessObject == nullptr;
49  }
50  virtual void DisposeThis() override
51  {
53  m_pWindowlessObject = nullptr;
54  SUPER_t::DisposeThis();
55  }
56 
57  IUNKNOWN_DISAMBIG_R(cRefBase);
58 
59  STDMETHOD(QueryInterface)(const IID& riid, LPVOID* ppv) override;
60 
61  //*************************************
62  // IServiceProvider
63  STDMETHOD(QueryService)(
64  /* [in] */ const GUID& guidService,
65  /* [in] */ const IID& riid,
66  /* [out] */ void __RPC_FAR *__RPC_FAR *ppvObject) override;
67 
68  //*************************************
69  // IOleDocumentSite
70  STDMETHOD(ActivateMe)( /* [in] */ IOleDocumentView* pViewToActivate) override
71  {
72  // pViewToActivate
73  // pViewToActivate = nullptr for windowless.
74  UNREFERENCED_PARAMETER(pViewToActivate);
75  DEBUG_MSG(("cOleWindowless IOleDocumentSite ActivateMe pViewToActivate"));
76  return S_OK;
77  }
78 
79  //*************************************
80  // IOleClientSite
81 
82  STDMETHOD(SaveObject)(void) override
83  {
84  // IOleClientSite
85  DEBUG_MSG(("cOleWindowless IOleClientSite SaveObject"));
86  return S_OK;
87  }
88 
89  STDMETHOD(GetMoniker)(DWORD dwAssign, DWORD dwWhichMoniker, IMoniker** ppmk) override
90  {
91  // IOleClientSite
92  UNREFERENCED_PARAMETER(dwAssign);
93  UNREFERENCED_PARAMETER(dwWhichMoniker);
94  *ppmk = nullptr;
95  DEBUG_MSG(("cOleWindowless IOleClientSite GetMoniker"));
96  return E_NOTIMPL;
97  }
98 
99  STDMETHOD(GetContainer)(IOleContainer** theContainerP) override
100  {
101  // IOleClientSite
102  // Might be overloaded to add extra interfaces.
103  return QueryInterface(__uuidof(IOleContainer), (void**)theContainerP);
104  }
105 
106  STDMETHOD(ShowObject)(void) override
107  {
108  // IOleClientSite
109  DEBUG_MSG(("cOleWindowless IOleClientSite ShowObject"));
110  return S_OK; // E_NOTIMPL
111  }
112 
113  STDMETHOD(OnShowWindow)(BOOL) override
114  {
115  // IOleClientSite
116  return E_NOTIMPL;
117  }
118 
119  STDMETHOD(RequestNewObjectLayout)(void) override
120  {
121  // IOleClientSite
122  return E_NOTIMPL;
123  }
124 
125  //****************************************
126  // IOleWindow in IOleInPlaceSiteWindowless
127 
128  STDMETHOD(GetWindow)(/* [out] */ HWND __RPC_FAR* pHWND) override
129  {
130  // IOleWindow
131  // Windowless ideally should just fail this. E_FAIL?
132  // but i need this to get the EDIT BOX caret to show up.
133  if (isDisposed())
134  return OLE_E_BLANK;
135  if (pHWND == nullptr)
136  return E_POINTER;
137  *pHWND = m_pParentControl->get_WndParent();
138  // DEBUG_MSG(( "cOleWindowless IOleWindow GetWindow" ));
139  return S_OK;
140  }
141  STDMETHOD(ContextSensitiveHelp)(/* [in] */ BOOL fEnterMode) override
142  {
143  // IOleWindow
144  UNREFERENCED_PARAMETER(fEnterMode);
145  DEBUG_MSG(("cOleWindowless IOleWindow ContextSensitiveHelp"));
146  return S_OK;
147  }
148 
149  //****************************************
150  // IOleInPlaceSite in IOleInPlaceSiteWindowless
151 
152  STDMETHOD(CanInPlaceActivate)(void) override
153  {
154  // IOleInPlaceSite
155  return S_OK;
156  }
157 
158  STDMETHOD(OnInPlaceActivate)(void) override
159  {
160  // IOleInPlaceSite
161  DEBUG_MSG(("cOleWindowless IOleInPlaceSite OnInPlaceActivate"));
162  return S_OK;
163  }
164 
165  STDMETHOD(OnUIActivate)(void) override
166  {
167  // IOleInPlaceSite
168  DEBUG_MSG(("cOleWindowless IOleInPlaceSite OnUIActivate"));
169  return S_OK;
170  }
171 
172  STDMETHOD(GetWindowContext)(/* [out] */ IOleInPlaceFrame __RPC_FAR *__RPC_FAR *ppFrame, /* [out] */ IOleInPlaceUIWindow __RPC_FAR *__RPC_FAR *ppDoc, /* [out] */ LPRECT lprcPosRect, /* [out] */ LPRECT lprcClipRect, /* [out][in] */ LPOLEINPLACEFRAMEINFO lpFrameInfo) override;
173 
174  STDMETHOD(Scroll)(/* [in] */ SIZE scrollExtant) override
175  {
176  // IOleInPlaceSite
177  UNREFERENCED_PARAMETER(scrollExtant);
178  return S_OK;
179  }
180 
181  STDMETHOD(OnUIDeactivate)(/* [in] */ BOOL fUndoable) override
182  {
183  // IOleInPlaceSite
184  UNREFERENCED_PARAMETER(fUndoable);
185  return S_OK;
186  }
187 
188  STDMETHOD(OnInPlaceDeactivate)(void) override
189  {
190  // IOleInPlaceSite
191  return S_OK;
192  }
193 
194  STDMETHOD(DiscardUndoState)(void) override
195  {
196  // IOleInPlaceSite
197  return S_OK;
198  }
199 
200  STDMETHOD(DeactivateAndUndo)(void) override
201  {
202  // IOleInPlaceSite
203  return S_OK;
204  }
205 
206  STDMETHOD(OnPosRectChange)(/* [in] */ LPCRECT lprcPosRect) override
207  {
208  // IOleInPlaceSite
209  UNREFERENCED_PARAMETER(lprcPosRect);
210  return S_OK;
211  }
212 
213  //****************************************
214  // IOleInPlaceSiteEx in Windowless
215 
216  STDMETHOD(OnInPlaceActivateEx)(/* [out] */ BOOL __RPC_FAR *pfNoRedraw, /* [in] */ DWORD dwFlags) override
217  {
218  // IOleInPlaceSiteEx
219  // dwFlags = 1 = ACTIVATE_WINDOWLESS
220  UNREFERENCED_PARAMETER(pfNoRedraw);
221  UNREFERENCED_PARAMETER(dwFlags);
222  DEBUG_MSG(("cOleWindowless IOleInPlaceSiteEx OnInPlaceActivateEx"));
223  return S_OK;
224  }
225 
226  STDMETHOD(OnInPlaceDeactivateEx)(/* [in] */ BOOL fNoRedraw) override
227  {
228  // IOleInPlaceSiteEx
229  UNREFERENCED_PARAMETER(fNoRedraw);
230  return S_OK;
231  }
232 
233  STDMETHOD(RequestUIActivate)(void) override
234  {
235  // IOleInPlaceSiteEx
236  DEBUG_MSG(("cOleWindowless IOleInPlaceSiteEx RequestUIActivate"));
237  return S_FALSE; // no
238  }
239 
240  //*********************************************
241  // IOleInPlaceSiteWindowless
242 
243  STDMETHOD(CanWindowlessActivate)(void) override
244  {
245  // IOleInPlaceSiteWindowless
246  // Allow windowless activation?
247  DEBUG_MSG(("cOleWindowless IOleInPlaceSiteWindowless CanWindowlessActivate"));
248  return S_OK; // yes
249  }
250 
251  STDMETHOD(GetCapture)(void) override;
252  STDMETHOD(SetCapture)(/* [in] */ BOOL fCapture) override;
253  STDMETHOD(GetFocus)(void) override;
254  STDMETHOD(SetFocus)(/* [in] */ BOOL fFocus) override;
255  STDMETHOD(GetDC)(/* [in] */ LPCRECT pRect, /* [in] */ DWORD grfFlags, /* [out] */ HDC __RPC_FAR *phDC) override;
256  STDMETHOD(ReleaseDC)(/* [in] */ HDC hDC);
257 
258  STDMETHOD(InvalidateRect)(/* [in] */ LPCRECT pRect, /* [in] */ BOOL fErase) override
259  {
260  // IOleInPlaceSiteWindowless
261  // called when the flash player has changed something.
262  // pRect = client coords.
263  // DEBUG_MSG(( "cOleWindowless IOleInPlaceSiteWindowless InvalidateRect" ));
264  UNREFERENCED_PARAMETER(fErase);
265  if (isDisposed())
266  return OLE_E_BLANK;
267  addRectDirty(pRect);
268  return S_OK;
269  }
270 
271  STDMETHOD(InvalidateRgn)(/* [in] */ HRGN hRGN, /* [in] */ BOOL fErase) override
272  {
273  // IOleInPlaceSiteWindowless
274  // TODO Fix this to just use the region?
275  // DEBUG_MSG(( "cOleWindowless IOleInPlaceSiteWindowless InvalidateRgn" ));
277  UNREFERENCED_PARAMETER(fErase);
278  if (isDisposed())
279  return OLE_E_BLANK;
280  addRectDirty(nullptr); // all
281  return S_OK;
282  }
283 
284  STDMETHOD(ScrollRect)(/* [in] */ INT dx, /* [in] */ INT dy, /* [in] */ LPCRECT pRectScroll, /* [in] */ LPCRECT pRectClip) override
285  {
286  // IOleInPlaceSiteWindowless
289  UNREFERENCED_PARAMETER(pRectScroll);
290  UNREFERENCED_PARAMETER(pRectClip);
291  return S_OK;
292  }
293 
294  STDMETHOD(AdjustRect)(/* [out][in] */ LPRECT prc) override
295  {
296  // IOleInPlaceSiteWindowless
297  // Adjust for some frame.
298  if (prc == nullptr)
299  {
300  return E_INVALIDARG;
301  }
302  return S_OK;
303  }
304 
305  STDMETHOD(OnDefWindowMessage)(/* [in] */ UINT msg, /* [in] */ WPARAM wParam, /* [in] */ LPARAM lParam, /* [out] */ LRESULT __RPC_FAR *plResult) override;
306 
307  //*************************************
308  // IOleControlSite
309 
310  STDMETHOD(OnControlInfoChanged)(void) override
311  {
312  // IOleControlSite
313  return S_FALSE;
314  }
315 
316  STDMETHOD(LockInPlaceActive)(
317  /* [in] */ BOOL fLock) override
318  {
319  // IOleControlSite
320  UNREFERENCED_PARAMETER(fLock);
321  return S_FALSE;
322  }
323 
324  STDMETHOD(GetExtendedControl)(
325  /* [out] */ IDispatch **ppDisp) override
326  {
327  // IOleControlSite
328  UNREFERENCED_PARAMETER(ppDisp);
329  return E_FAIL;
330  }
331 
332  STDMETHOD(TransformCoords)(
333  /* [out][in] */ POINTL *pPtlHimetric,
334  /* [out][in] */ POINTF *pPtfContainer,
335  /* [in] */ DWORD dwFlags) override
336  {
337  // IOleControlSite
338  UNREFERENCED_PARAMETER(pPtlHimetric);
339  UNREFERENCED_PARAMETER(pPtfContainer);
340  UNREFERENCED_PARAMETER(dwFlags);
341  return E_FAIL;
342  }
343 
344  STDMETHOD(TranslateAccelerator)(
345  /* [in] */ MSG *pMsg,
346  /* [in] */ DWORD grfModifiers) override
347  {
348  // IOleControlSite
350  UNREFERENCED_PARAMETER(grfModifiers);
351  return E_FAIL;
352  }
353 
354  STDMETHOD(OnFocus)(
355  /* [in] */ BOOL fGotFocus) override
356  {
357  // IOleControlSite
358  UNREFERENCED_PARAMETER(fGotFocus);
359  DEBUG_MSG(("cOleWindowless IOleControlSite OnFocus"));
360  return S_FALSE;
361  }
362 
363  STDMETHOD(ShowPropertyFrame)(void) override
364  {
365  // IOleControlSite
366  return S_FALSE;
367  }
368  };
369 };
370 #endif
371 #endif
interface IServiceProvider IServiceProvider
Definition: Flash_h.h:87
#define IUNKNOWN_DISAMBIG_R(TYPE)
Definition: IUnknown.h:85
#define UNREFERENCED_PARAMETER(P)
< _WIN32 type thing. get rid of stupid warning.
Definition: SysTypes.h:299
INT32 HRESULT
_WIN32 style error codes. INT32
Definition: SysTypes.h:465
#define DEBUG_MSG(_x_)
Definition: cLogMgr.h:158
Definition: cMesh.h:22
Definition: IUnknown.h:34