ReactOS  0.4.14-dev-337-gf981a68
window.c
Go to the documentation of this file.
1 /*
2  * Generic Implementation of strmbase window classes
3  *
4  * Copyright 2012 Aric Stewart, CodeWeavers
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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19  */
20 
21 #define COBJMACROS
22 
23 #include "dshow.h"
24 #include "wine/debug.h"
25 #include "wine/unicode.h"
26 #include "wine/strmbase.h"
27 #include "uuids.h"
28 #include "vfwmsgs.h"
29 #include <assert.h>
30 
32 
33 static inline BaseControlWindow *impl_from_IVideoWindow( IVideoWindow *iface)
34 {
35  return CONTAINING_RECORD(iface, BaseControlWindow, IVideoWindow_iface);
36 }
37 
38 static inline BaseControlWindow *impl_from_BaseWindow(BaseWindow *iface)
39 {
40  return CONTAINING_RECORD(iface, BaseControlWindow, baseWindow);
41 }
42 
44 {
46 
47  if (!This)
48  return DefWindowProcW(hwnd, uMsg, wParam, lParam);
49 
50  if (This->pFuncsTable->pfnOnReceiveMessage)
51  return This->pFuncsTable->pfnOnReceiveMessage(This, hwnd, uMsg, wParam, lParam);
52  else
54 }
55 
57 {
58  if (This->pFuncsTable->pfnPossiblyEatMessage && This->pFuncsTable->pfnPossiblyEatMessage(This, uMsg, wParam, lParam))
59  return 0;
60 
61  switch (uMsg)
62  {
63  case WM_SIZE:
64  if (This->pFuncsTable->pfnOnSize)
65  return This->pFuncsTable->pfnOnSize(This, LOWORD(lParam), HIWORD(lParam));
66  else
68  }
69 
70  return DefWindowProcW(hwnd, uMsg, wParam, lParam);
71 }
72 
74 {
75  This->Width = Width;
76  This->Height = Height;
77  return TRUE;
78 }
79 
80 HRESULT WINAPI BaseWindow_Init(BaseWindow *pBaseWindow, const BaseWindowFuncTable* pFuncsTable)
81 {
82  if (!pFuncsTable)
83  return E_INVALIDARG;
84 
85  ZeroMemory(pBaseWindow,sizeof(BaseWindow));
86  pBaseWindow->pFuncsTable = pFuncsTable;
87 
88  return S_OK;
89 }
90 
92 {
93  if (This->hWnd)
95 
97  return S_OK;
98 }
99 
101 {
102  WNDCLASSW winclass;
103  static const WCHAR windownameW[] = { 'A','c','t','i','v','e','M','o','v','i','e',' ','W','i','n','d','o','w',0 };
104 
105  This->pClassName = This->pFuncsTable->pfnGetClassWindowStyles(This, &This->ClassStyles, &This->WindowStyles, &This->WindowStylesEx);
106 
107  winclass.style = This->ClassStyles;
108  winclass.lpfnWndProc = WndProcW;
109  winclass.cbClsExtra = 0;
110  winclass.cbWndExtra = sizeof(BaseWindow*);
111  winclass.hInstance = This->hInstance;
112  winclass.hIcon = NULL;
113  winclass.hCursor = NULL;
115  winclass.lpszMenuName = NULL;
116  winclass.lpszClassName = This->pClassName;
118  {
119  ERR("Unable to register window class: %u\n", GetLastError());
120  return E_FAIL;
121  }
122 
123  This->hWnd = CreateWindowExW(This->WindowStylesEx,
124  This->pClassName, windownameW,
125  This->WindowStyles,
127  CW_USEDEFAULT, NULL, NULL, This->hInstance,
128  NULL);
129 
130  if (!This->hWnd)
131  {
132  ERR("Unable to create window\n");
133  return E_FAIL;
134  }
135 
136  SetWindowLongPtrW(This->hWnd, 0, (LONG_PTR)This);
137 
138  This->hDC = GetDC(This->hWnd);
139 
140  return S_OK;
141 }
142 
144 {
145  if (!This->hWnd)
146  return S_OK;
147 
148  if (This->hDC)
149  ReleaseDC(This->hWnd, This->hDC);
150  This->hDC = NULL;
151 
152  DestroyWindow(This->hWnd);
153  This->hWnd = NULL;
154 
155  return S_OK;
156 }
157 
159 {
160  static RECT defRect = {0, 0, 800, 600};
161  return defRect;
162 }
163 
165 {
166  BaseControlWindow* pControlWindow = impl_from_BaseWindow(This);
167 
168  if (pControlWindow->hwndDrain)
169  {
170  switch(uMsg)
171  {
172  case WM_KEYDOWN:
173  case WM_KEYUP:
174  case WM_LBUTTONDBLCLK:
175  case WM_LBUTTONDOWN:
176  case WM_LBUTTONUP:
177  case WM_MBUTTONDBLCLK:
178  case WM_MBUTTONDOWN:
179  case WM_MBUTTONUP:
180  case WM_MOUSEACTIVATE:
181  case WM_MOUSEMOVE:
182  case WM_NCLBUTTONDBLCLK:
183  case WM_NCLBUTTONDOWN:
184  case WM_NCLBUTTONUP:
185  case WM_NCMBUTTONDBLCLK:
186  case WM_NCMBUTTONDOWN:
187  case WM_NCMBUTTONUP:
188  case WM_NCMOUSEMOVE:
189  case WM_NCRBUTTONDBLCLK:
190  case WM_NCRBUTTONDOWN:
191  case WM_NCRBUTTONUP:
192  case WM_RBUTTONDBLCLK:
193  case WM_RBUTTONDOWN:
194  case WM_RBUTTONUP:
195  PostMessageW(pControlWindow->hwndDrain, uMsg, wParam, lParam);
196  return TRUE;
197  default:
198  break;
199  }
200  }
201  return FALSE;
202 }
203 
204 HRESULT WINAPI BaseControlWindow_Init(BaseControlWindow *pControlWindow, const IVideoWindowVtbl *lpVtbl, BaseFilter *owner, CRITICAL_SECTION *lock, BasePin* pPin,const BaseWindowFuncTable *pFuncsTable)
205 {
206  HRESULT hr;
207 
208  hr = BaseWindow_Init(&pControlWindow->baseWindow, pFuncsTable);
209  if (SUCCEEDED(hr))
210  {
211  BaseDispatch_Init(&pControlWindow->baseDispatch, &IID_IVideoWindow);
212  pControlWindow->IVideoWindow_iface.lpVtbl = lpVtbl;
213  pControlWindow->AutoShow = TRUE;
214  pControlWindow->hwndDrain = NULL;
215  pControlWindow->hwndOwner = NULL;
216  pControlWindow->pFilter = owner;
217  pControlWindow->pInterfaceLock = lock;
218  pControlWindow->pPin = pPin;
219  }
220  return hr;
221 }
222 
223 HRESULT WINAPI BaseControlWindow_Destroy(BaseControlWindow *pControlWindow)
224 {
225  BaseWindowImpl_DoneWithWindow(&pControlWindow->baseWindow);
226  return BaseDispatch_Destroy(&pControlWindow->baseDispatch);
227 }
228 
230 {
231  BaseControlWindow* This = impl_from_IVideoWindow(iface);
232 
233  return BaseDispatchImpl_GetTypeInfoCount(&This->baseDispatch, pctinfo);
234 }
235 
236 HRESULT WINAPI BaseControlWindowImpl_GetTypeInfo(IVideoWindow *iface, UINT iTInfo, LCID lcid, ITypeInfo**ppTInfo)
237 {
238  BaseControlWindow* This = impl_from_IVideoWindow(iface);
239 
240  return BaseDispatchImpl_GetTypeInfo(&This->baseDispatch, &IID_NULL, iTInfo, lcid, ppTInfo);
241 }
242 
243 HRESULT WINAPI BaseControlWindowImpl_GetIDsOfNames(IVideoWindow *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
244  {
245  BaseControlWindow* This = impl_from_IVideoWindow(iface);
246 
247  return BaseDispatchImpl_GetIDsOfNames(&This->baseDispatch, riid, rgszNames, cNames, lcid, rgDispId);
248 }
249 
250 HRESULT WINAPI BaseControlWindowImpl_Invoke(IVideoWindow *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExepInfo, UINT *puArgErr)
251 {
252  BaseControlWindow* This = impl_from_IVideoWindow(iface);
253  ITypeInfo *pTypeInfo;
254  HRESULT hr;
255 
256  hr = BaseDispatchImpl_GetTypeInfo(&This->baseDispatch, riid, 1, lcid, &pTypeInfo);
257  if (SUCCEEDED(hr))
258  {
259  hr = ITypeInfo_Invoke(pTypeInfo, &This->IVideoWindow_iface, dispIdMember, wFlags, pDispParams, pVarResult, pExepInfo, puArgErr);
260  ITypeInfo_Release(pTypeInfo);
261  }
262 
263  return hr;
264 }
265 
266 HRESULT WINAPI BaseControlWindowImpl_put_Caption(IVideoWindow *iface, BSTR strCaption)
267 {
268  BaseControlWindow* This = impl_from_IVideoWindow(iface);
269 
270  TRACE("(%p/%p)->(%s (%p))\n", This, iface, debugstr_w(strCaption), strCaption);
271 
272  if (!SetWindowTextW(This->baseWindow.hWnd, strCaption))
273  return E_FAIL;
274 
275  return S_OK;
276 }
277 
278 HRESULT WINAPI BaseControlWindowImpl_get_Caption(IVideoWindow *iface, BSTR *strCaption)
279 {
280  BaseControlWindow* This = impl_from_IVideoWindow(iface);
281 
282  TRACE("(%p/%p)->(%p)\n", This, iface, strCaption);
283 
284  GetWindowTextW(This->baseWindow.hWnd, (LPWSTR)strCaption, 100);
285 
286  return S_OK;
287 }
288 
289 HRESULT WINAPI BaseControlWindowImpl_put_WindowStyle(IVideoWindow *iface, LONG WindowStyle)
290 {
291  BaseControlWindow* This = impl_from_IVideoWindow(iface);
292  LONG old;
293 
294  old = GetWindowLongW(This->baseWindow.hWnd, GWL_STYLE);
295 
296  TRACE("(%p/%p)->(%x -> %x)\n", This, iface, old, WindowStyle);
297 
299  return E_INVALIDARG;
300 
301  SetWindowLongW(This->baseWindow.hWnd, GWL_STYLE, WindowStyle);
302  SetWindowPos(This->baseWindow.hWnd,0,0,0,0,0,SWP_FRAMECHANGED|SWP_NOSIZE|SWP_NOZORDER);
303  This->baseWindow.WindowStyles = WindowStyle;
304 
305  return S_OK;
306 }
307 
308 HRESULT WINAPI BaseControlWindowImpl_get_WindowStyle(IVideoWindow *iface, LONG *WindowStyle)
309 {
310  BaseControlWindow* This = impl_from_IVideoWindow(iface);
311 
312  TRACE("(%p/%p)->(%p)\n", This, iface, WindowStyle);
313 
314  *WindowStyle = This->baseWindow.WindowStyles;
315 
316  return S_OK;
317 }
318 
319 HRESULT WINAPI BaseControlWindowImpl_put_WindowStyleEx(IVideoWindow *iface, LONG WindowStyleEx)
320 {
321  BaseControlWindow* This = impl_from_IVideoWindow(iface);
322 
323  TRACE("(%p/%p)->(%d)\n", This, iface, WindowStyleEx);
324 
325  if (!SetWindowLongW(This->baseWindow.hWnd, GWL_EXSTYLE, WindowStyleEx))
326  return E_FAIL;
327 
328  return S_OK;
329 }
330 
331 HRESULT WINAPI BaseControlWindowImpl_get_WindowStyleEx(IVideoWindow *iface, LONG *WindowStyleEx)
332 {
333  BaseControlWindow* This = impl_from_IVideoWindow(iface);
334 
335  TRACE("(%p/%p)->(%p)\n", This, iface, WindowStyleEx);
336 
337  *WindowStyleEx = GetWindowLongW(This->baseWindow.hWnd, GWL_EXSTYLE);
338 
339  return S_OK;
340 }
341 
343 {
344  BaseControlWindow* This = impl_from_IVideoWindow(iface);
345 
346  TRACE("(%p/%p)->(%d)\n", This, iface, AutoShow);
347 
348  This->AutoShow = AutoShow;
349 
350  return S_OK;
351 }
352 
353 HRESULT WINAPI BaseControlWindowImpl_get_AutoShow(IVideoWindow *iface, LONG *AutoShow)
354 {
355  BaseControlWindow* This = impl_from_IVideoWindow(iface);
356 
357  TRACE("(%p/%p)->(%p)\n", This, iface, AutoShow);
358 
359  *AutoShow = This->AutoShow;
360 
361  return S_OK;
362 }
363 
364 HRESULT WINAPI BaseControlWindowImpl_put_WindowState(IVideoWindow *iface, LONG WindowState)
365 {
366  BaseControlWindow* This = impl_from_IVideoWindow(iface);
367 
368  TRACE("(%p/%p)->(%d)\n", This, iface, WindowState);
369  ShowWindow(This->baseWindow.hWnd, WindowState);
370  return S_OK;
371 }
372 
373 HRESULT WINAPI BaseControlWindowImpl_get_WindowState(IVideoWindow *iface, LONG *WindowState)
374 {
376  BaseControlWindow* This = impl_from_IVideoWindow(iface);
377 
378  place.length = sizeof(place);
379  GetWindowPlacement(This->baseWindow.hWnd, &place);
380  TRACE("(%p/%p)->(%p)\n", This, iface, WindowState);
381  *WindowState = place.showCmd;
382 
383  return S_OK;
384 }
385 
386 HRESULT WINAPI BaseControlWindowImpl_put_BackgroundPalette(IVideoWindow *iface, LONG BackgroundPalette)
387 {
388  BaseControlWindow* This = impl_from_IVideoWindow(iface);
389 
390  FIXME("(%p/%p)->(%d): stub !!!\n", This, iface, BackgroundPalette);
391 
392  return S_OK;
393 }
394 
395 HRESULT WINAPI BaseControlWindowImpl_get_BackgroundPalette(IVideoWindow *iface, LONG *pBackgroundPalette)
396 {
397  BaseControlWindow* This = impl_from_IVideoWindow(iface);
398 
399  FIXME("(%p/%p)->(%p): stub !!!\n", This, iface, pBackgroundPalette);
400 
401  return S_OK;
402 }
403 
405 {
406  BaseControlWindow* This = impl_from_IVideoWindow(iface);
407 
408  TRACE("(%p/%p)->(%d)\n", This, iface, Visible);
409 
410  ShowWindow(This->baseWindow.hWnd, Visible ? SW_SHOW : SW_HIDE);
411 
412  return S_OK;
413 }
414 
415 HRESULT WINAPI BaseControlWindowImpl_get_Visible(IVideoWindow *iface, LONG *pVisible)
416 {
417  BaseControlWindow* This = impl_from_IVideoWindow(iface);
418 
419  TRACE("(%p/%p)->(%p)\n", This, iface, pVisible);
420 
421  *pVisible = IsWindowVisible(This->baseWindow.hWnd);
422 
423  return S_OK;
424 }
425 
427 {
428  BaseControlWindow* This = impl_from_IVideoWindow(iface);
429  RECT WindowPos;
430 
431  TRACE("(%p/%p)->(%d)\n", This, iface, Left);
432 
433  GetWindowRect(This->baseWindow.hWnd, &WindowPos);
434  if (!SetWindowPos(This->baseWindow.hWnd, NULL, Left, WindowPos.top, 0, 0, SWP_NOZORDER|SWP_NOSIZE))
435  return E_FAIL;
436 
437  return S_OK;
438 }
439 
440 HRESULT WINAPI BaseControlWindowImpl_get_Left(IVideoWindow *iface, LONG *pLeft)
441 {
442  BaseControlWindow* This = impl_from_IVideoWindow(iface);
443  RECT WindowPos;
444 
445  TRACE("(%p/%p)->(%p)\n", This, iface, pLeft);
446  GetWindowRect(This->baseWindow.hWnd, &WindowPos);
447 
448  *pLeft = WindowPos.left;
449 
450  return S_OK;
451 }
452 
454 {
455  BaseControlWindow* This = impl_from_IVideoWindow(iface);
456 
457  TRACE("(%p/%p)->(%d)\n", This, iface, Width);
458 
459  if (!SetWindowPos(This->baseWindow.hWnd, NULL, 0, 0, Width, This->baseWindow.Height, SWP_NOZORDER|SWP_NOMOVE))
460  return E_FAIL;
461 
462  This->baseWindow.Width = Width;
463 
464  return S_OK;
465 }
466 
467 HRESULT WINAPI BaseControlWindowImpl_get_Width(IVideoWindow *iface, LONG *pWidth)
468 {
469  BaseControlWindow* This = impl_from_IVideoWindow(iface);
470 
471  TRACE("(%p/%p)->(%p)\n", This, iface, pWidth);
472 
473  *pWidth = This->baseWindow.Width;
474 
475  return S_OK;
476 }
477 
479 {
480  BaseControlWindow* This = impl_from_IVideoWindow(iface);
481  RECT WindowPos;
482 
483  TRACE("(%p/%p)->(%d)\n", This, iface, Top);
484  GetWindowRect(This->baseWindow.hWnd, &WindowPos);
485 
486  if (!SetWindowPos(This->baseWindow.hWnd, NULL, WindowPos.left, Top, 0, 0, SWP_NOZORDER|SWP_NOSIZE))
487  return E_FAIL;
488 
489  return S_OK;
490 }
491 
493 {
494  BaseControlWindow* This = impl_from_IVideoWindow(iface);
495  RECT WindowPos;
496 
497  TRACE("(%p/%p)->(%p)\n", This, iface, pTop);
498  GetWindowRect(This->baseWindow.hWnd, &WindowPos);
499 
500  *pTop = WindowPos.top;
501 
502  return S_OK;
503 }
504 
506 {
507  BaseControlWindow* This = impl_from_IVideoWindow(iface);
508 
509  TRACE("(%p/%p)->(%d)\n", This, iface, Height);
510 
511  if (!SetWindowPos(This->baseWindow.hWnd, NULL, 0, 0, This->baseWindow.Width, Height, SWP_NOZORDER|SWP_NOMOVE))
512  return E_FAIL;
513 
514  This->baseWindow.Height = Height;
515 
516  return S_OK;
517 }
518 
519 HRESULT WINAPI BaseControlWindowImpl_get_Height(IVideoWindow *iface, LONG *pHeight)
520 {
521  BaseControlWindow* This = impl_from_IVideoWindow(iface);
522 
523  TRACE("(%p/%p)->(%p)\n", This, iface, pHeight);
524 
525  *pHeight = This->baseWindow.Height;
526 
527  return S_OK;
528 }
529 
531 {
532  BaseControlWindow* This = impl_from_IVideoWindow(iface);
533 
534  TRACE("(%p/%p)->(%08x)\n", This, iface, (DWORD) Owner);
535 
536  This->hwndOwner = (HWND)Owner;
537  SetParent(This->baseWindow.hWnd, This->hwndOwner);
538  if (This->baseWindow.WindowStyles & WS_CHILD)
539  {
540  LONG old = GetWindowLongW(This->baseWindow.hWnd, GWL_STYLE);
541  if (old != This->baseWindow.WindowStyles)
542  {
543  SetWindowLongW(This->baseWindow.hWnd, GWL_STYLE, This->baseWindow.WindowStyles);
544  SetWindowPos(This->baseWindow.hWnd,0,0,0,0,0,SWP_FRAMECHANGED|SWP_NOSIZE|SWP_NOZORDER);
545  }
546  }
547 
548  return S_OK;
549 }
550 
552 {
553  BaseControlWindow* This = impl_from_IVideoWindow(iface);
554 
555  TRACE("(%p/%p)->(%p)\n", This, iface, Owner);
556 
557  *(HWND*)Owner = This->hwndOwner;
558 
559  return S_OK;
560 }
561 
563 {
564  BaseControlWindow* This = impl_from_IVideoWindow(iface);
565 
566  TRACE("(%p/%p)->(%08x)\n", This, iface, (DWORD) Drain);
567 
568  This->hwndDrain = (HWND)Drain;
569 
570  return S_OK;
571 }
572 
574 {
575  BaseControlWindow* This = impl_from_IVideoWindow(iface);
576 
577  TRACE("(%p/%p)->(%p)\n", This, iface, Drain);
578 
579  *Drain = (OAHWND)This->hwndDrain;
580 
581  return S_OK;
582 }
583 
585 {
586  BaseControlWindow* This = impl_from_IVideoWindow(iface);
587 
588  FIXME("(%p/%p)->(%p): stub !!!\n", This, iface, Color);
589 
590  return S_OK;
591 }
592 
594 {
595  BaseControlWindow* This = impl_from_IVideoWindow(iface);
596 
597  FIXME("(%p/%p)->(%d): stub !!!\n", This, iface, Color);
598 
599  return S_OK;
600 }
601 
602 HRESULT WINAPI BaseControlWindowImpl_get_FullScreenMode(IVideoWindow *iface, LONG *FullScreenMode)
603 {
604  TRACE("(%p)->(%p)\n", iface, FullScreenMode);
605 
606  return E_NOTIMPL;
607 }
608 
609 HRESULT WINAPI BaseControlWindowImpl_put_FullScreenMode(IVideoWindow *iface, LONG FullScreenMode)
610 {
611  TRACE("(%p)->(%d)\n", iface, FullScreenMode);
612  return E_NOTIMPL;
613 }
614 
616 {
617  BaseControlWindow* This = impl_from_IVideoWindow(iface);
618  BOOL ret;
619  IPin* pPin;
620  HRESULT hr;
621 
622  TRACE("(%p/%p)->(%d)\n", This, iface, Focus);
623 
624  if ((Focus != FALSE) && (Focus != TRUE))
625  return E_INVALIDARG;
626 
627  hr = IPin_ConnectedTo(&This->pPin->IPin_iface, &pPin);
628  if ((hr != S_OK) || !pPin)
629  return VFW_E_NOT_CONNECTED;
630 
631  if (Focus)
632  ret = SetForegroundWindow(This->baseWindow.hWnd);
633  else
634  ret = SetWindowPos(This->baseWindow.hWnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
635 
636  if (!ret)
637  return E_FAIL;
638 
639  return S_OK;
640 }
641 
642 HRESULT WINAPI BaseControlWindowImpl_SetWindowPosition(IVideoWindow *iface, LONG Left, LONG Top, LONG Width, LONG Height)
643 {
644  BaseControlWindow* This = impl_from_IVideoWindow(iface);
645 
646  TRACE("(%p/%p)->(%d, %d, %d, %d)\n", This, iface, Left, Top, Width, Height);
647 
648  if (!SetWindowPos(This->baseWindow.hWnd, NULL, Left, Top, Width, Height, SWP_NOZORDER))
649  return E_FAIL;
650 
651  This->baseWindow.Width = Width;
652  This->baseWindow.Height = Height;
653 
654  return S_OK;
655 }
656 
657 HRESULT WINAPI BaseControlWindowImpl_GetWindowPosition(IVideoWindow *iface, LONG *pLeft, LONG *pTop, LONG *pWidth, LONG *pHeight)
658 {
659  BaseControlWindow* This = impl_from_IVideoWindow(iface);
660  RECT WindowPos;
661 
662  TRACE("(%p/%p)->(%p, %p, %p, %p)\n", This, iface, pLeft, pTop, pWidth, pHeight);
663  GetWindowRect(This->baseWindow.hWnd, &WindowPos);
664 
665  *pLeft = WindowPos.left;
666  *pTop = WindowPos.top;
667  *pWidth = This->baseWindow.Width;
668  *pHeight = This->baseWindow.Height;
669 
670  return S_OK;
671 }
672 
674 {
675  BaseControlWindow* This = impl_from_IVideoWindow(iface);
676 
677  TRACE("(%p/%p)->(%08lx, %d, %08lx, %08lx)\n", This, iface, hwnd, uMsg, wParam, lParam);
678 
679  if (!PostMessageW(This->baseWindow.hWnd, uMsg, wParam, lParam))
680  return E_FAIL;
681 
682  return S_OK;
683 }
684 
685 HRESULT WINAPI BaseControlWindowImpl_GetMinIdealImageSize(IVideoWindow *iface, LONG *pWidth, LONG *pHeight)
686 {
687  BaseControlWindow* This = impl_from_IVideoWindow(iface);
688  RECT defaultRect;
689 
690  TRACE("(%p/%p)->(%p, %p)\n", This, iface, pWidth, pHeight);
691  defaultRect = This->baseWindow.pFuncsTable->pfnGetDefaultRect(&This->baseWindow);
692 
693  *pWidth = defaultRect.right - defaultRect.left;
694  *pHeight = defaultRect.bottom - defaultRect.top;
695 
696  return S_OK;
697 }
698 
699 HRESULT WINAPI BaseControlWindowImpl_GetMaxIdealImageSize(IVideoWindow *iface, LONG *pWidth, LONG *pHeight)
700 {
701  BaseControlWindow* This = impl_from_IVideoWindow(iface);
702  RECT defaultRect;
703 
704  TRACE("(%p/%p)->(%p, %p)\n", This, iface, pWidth, pHeight);
705  defaultRect = This->baseWindow.pFuncsTable->pfnGetDefaultRect(&This->baseWindow);
706 
707  *pWidth = defaultRect.right - defaultRect.left;
708  *pHeight = defaultRect.bottom - defaultRect.top;
709 
710  return S_OK;
711 }
712 
713 HRESULT WINAPI BaseControlWindowImpl_GetRestorePosition(IVideoWindow *iface, LONG *pLeft, LONG *pTop, LONG *pWidth, LONG *pHeight)
714 {
715  BaseControlWindow* This = impl_from_IVideoWindow(iface);
716 
717  FIXME("(%p/%p)->(%p, %p, %p, %p): stub !!!\n", This, iface, pLeft, pTop, pWidth, pHeight);
718 
719  return S_OK;
720 }
721 
723 {
724  BaseControlWindow* This = impl_from_IVideoWindow(iface);
725 
726  FIXME("(%p/%p)->(%d): stub !!!\n", This, iface, HideCursor);
727 
728  return S_OK;
729 }
730 
731 HRESULT WINAPI BaseControlWindowImpl_IsCursorHidden(IVideoWindow *iface, LONG *CursorHidden)
732 {
733  BaseControlWindow* This = impl_from_IVideoWindow(iface);
734 
735  FIXME("(%p/%p)->(%p): stub !!!\n", This, iface, CursorHidden);
736 
737  return S_OK;
738 }
static BaseControlWindow * impl_from_BaseWindow(BaseWindow *iface)
Definition: window.c:38
#define WM_MBUTTONUP
Definition: winuser.h:1765
HGDIOBJ WINAPI GetStockObject(_In_ int)
#define WM_NCLBUTTONDOWN
Definition: winuser.h:1674
HRESULT WINAPI BaseControlWindowImpl_NotifyOwnerMessage(IVideoWindow *iface, OAHWND hwnd, LONG uMsg, LONG_PTR wParam, LONG_PTR lParam)
Definition: window.c:673
#define WS_DISABLED
Definition: pedump.c:621
WINE_DEFAULT_DEBUG_CHANNEL(oleacc)
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
#define REFIID
Definition: guiddef.h:118
#define TRUE
Definition: types.h:120
HRESULT WINAPI BaseControlWindowImpl_Invoke(IVideoWindow *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExepInfo, UINT *puArgErr)
Definition: window.c:250
void HideCursor(void)
Definition: hardware.c:566
#define WM_NCMBUTTONDBLCLK
Definition: winuser.h:1682
HRESULT WINAPI BaseControlWindowImpl_HideCursor(IVideoWindow *iface, LONG HideCursor)
Definition: window.c:722
rwlock_t lock
Definition: tcpcore.h:1163
UINT style
Definition: winuser.h:3150
#define WM_LBUTTONDOWN
Definition: winuser.h:1758
HRESULT hr
Definition: shlfolder.c:183
LPCWSTR lpszMenuName
Definition: winuser.h:3158
HRESULT WINAPI BaseControlWindowImpl_get_Left(IVideoWindow *iface, LONG *pLeft)
Definition: window.c:440
HRESULT WINAPI BaseControlWindowImpl_get_Caption(IVideoWindow *iface, BSTR *strCaption)
Definition: window.c:278
HDC WINAPI GetDC(_In_opt_ HWND)
#define SW_HIDE
Definition: winuser.h:762
REFIID riid
Definition: precomp.h:44
HWND WINAPI SetParent(_In_ HWND, _In_opt_ HWND)
HRESULT WINAPI BaseControlWindowImpl_put_AutoShow(IVideoWindow *iface, LONG AutoShow)
Definition: window.c:342
#define CALLBACK
Definition: compat.h:27
HRESULT WINAPI BaseWindowImpl_DoneWithWindow(BaseWindow *This)
Definition: window.c:143
HRESULT WINAPI BaseDispatch_Init(BaseDispatch *This, REFIID riid)
Definition: dispatch.c:30
LONG top
Definition: windef.h:292
HANDLE HWND
Definition: compat.h:13
HRESULT WINAPI BaseControlWindowImpl_get_BackgroundPalette(IVideoWindow *iface, LONG *pBackgroundPalette)
Definition: window.c:395
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1059
#define ZeroMemory
Definition: winbase.h:1642
#define GWL_EXSTYLE
Definition: winuser.h:845
#define HWND_TOP
Definition: winuser.h:1193
HRESULT WINAPI BaseControlWindowImpl_GetMinIdealImageSize(IVideoWindow *iface, LONG *pWidth, LONG *pHeight)
Definition: window.c:685
#define WM_NCRBUTTONDOWN
Definition: winuser.h:1677
int cbClsExtra
Definition: winuser.h:3152
HRESULT WINAPI BaseControlWindowImpl_put_WindowState(IVideoWindow *iface, LONG WindowState)
Definition: window.c:364
DWORD LCID
Definition: nls.h:13
UINT_PTR WPARAM
Definition: windef.h:207
#define WS_CHILD
Definition: pedump.c:617
OLECHAR * BSTR
Definition: compat.h:1942
#define GetWindowLongPtrW
Definition: winuser.h:4730
LONG left
Definition: windef.h:291
#define SWP_NOZORDER
Definition: winuser.h:1232
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
HRESULT WINAPI BaseControlWindowImpl_GetTypeInfoCount(IVideoWindow *iface, UINT *pctinfo)
Definition: window.c:229
HRESULT WINAPI BaseControlWindowImpl_GetIDsOfNames(IVideoWindow *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
Definition: window.c:243
static LPOLESTR
Definition: stg_prop.c:27
LONG right
Definition: windef.h:293
#define E_FAIL
Definition: ddrawi.h:102
BOOL WINAPI DestroyWindow(_In_ HWND)
int32_t INT
Definition: typedefs.h:56
WPARAM wParam
Definition: combotst.c:138
HRESULT WINAPI BaseControlWindowImpl_put_FullScreenMode(IVideoWindow *iface, LONG FullScreenMode)
Definition: window.c:609
static BaseControlWindow * impl_from_IVideoWindow(IVideoWindow *iface)
Definition: window.c:33
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
HRESULT WINAPI BaseWindow_Init(BaseWindow *pBaseWindow, const BaseWindowFuncTable *pFuncsTable)
Definition: window.c:80
HRESULT WINAPI BaseControlWindowImpl_put_Width(IVideoWindow *iface, LONG Width)
Definition: window.c:453
ATOM WINAPI RegisterClassW(_In_ CONST WNDCLASSW *)
#define WM_NCRBUTTONDBLCLK
Definition: winuser.h:1679
HRESULT WINAPI BaseControlWindowImpl_get_WindowStyle(IVideoWindow *iface, LONG *WindowStyle)
Definition: window.c:308
#define WS_MINIMIZE
Definition: pedump.c:622
unsigned int BOOL
Definition: ntddk_ex.h:94
long LONG
Definition: pedump.c:60
#define WM_NCRBUTTONUP
Definition: winuser.h:1678
LONG WINAPI SetWindowLongW(_In_ HWND, _In_ int, _In_ LONG)
#define debugstr_w
Definition: kernel32.h:32
WNDPROC lpfnWndProc
Definition: winuser.h:3151
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
#define FIXME(fmt,...)
Definition: debug.h:110
HRESULT WINAPI BaseControlWindowImpl_get_FullScreenMode(IVideoWindow *iface, LONG *FullScreenMode)
Definition: window.c:602
HRESULT WINAPI BaseControlWindow_Destroy(BaseControlWindow *pControlWindow)
Definition: window.c:223
#define CW_USEDEFAULT
Definition: winuser.h:225
BOOL WINAPI IsWindowVisible(HWND hWnd)
Definition: window.c:1577
#define E_INVALIDARG
Definition: ddrawi.h:101
LONG_PTR OAHWND
Definition: control.idl:31
HRESULT WINAPI BaseControlWindowImpl_get_AutoShow(IVideoWindow *iface, LONG *AutoShow)
Definition: window.c:353
LONG WINAPI GetWindowLongW(_In_ HWND, _In_ int)
HRESULT WINAPI BaseControlWindowImpl_GetRestorePosition(IVideoWindow *iface, LONG *pLeft, LONG *pTop, LONG *pWidth, LONG *pHeight)
Definition: window.c:713
smooth NULL
Definition: ftsmooth.c:416
#define ERROR_CLASS_ALREADY_EXISTS
Definition: winerror.h:891
#define WM_KEYDOWN
Definition: winuser.h:1697
LPCWSTR lpszClassName
Definition: winuser.h:3159
HRESULT WINAPI BaseControlWindowImpl_get_Visible(IVideoWindow *iface, LONG *pVisible)
Definition: window.c:415
LONG_PTR LPARAM
Definition: windef.h:208
BOOL WINAPI GetWindowRect(HWND hWnd, LPRECT lpRect)
Definition: window.c:1300
#define WM_MOUSEACTIVATE
Definition: winuser.h:1619
#define VFW_E_NOT_CONNECTED
Definition: vfwmsgs.h:48
#define SW_SHOW
Definition: winuser.h:769
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560
BOOL WINAPI GetWindowPlacement(_In_ HWND, _Inout_ WINDOWPLACEMENT *)
HRESULT WINAPI BaseDispatchImpl_GetIDsOfNames(BaseDispatch *This, REFIID riid, OLECHAR **rgszNames, UINT cNames, LCID lcid, DISPID *rgdispid)
Definition: dispatch.c:52
HRESULT WINAPI BaseControlWindowImpl_put_WindowStyleEx(IVideoWindow *iface, LONG WindowStyleEx)
Definition: window.c:319
#define WM_RBUTTONDOWN
Definition: winuser.h:1761
#define BLACK_BRUSH
Definition: wingdi.h:895
BOOL WINAPI SetForegroundWindow(HWND hWnd)
Definition: window.c:1706
HRESULT WINAPI BaseControlWindowImpl_put_Caption(IVideoWindow *iface, BSTR strCaption)
Definition: window.c:266
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:403
HRESULT WINAPI BaseWindow_Destroy(BaseWindow *This)
Definition: window.c:91
int cbWndExtra
Definition: winuser.h:3153
__wchar_t WCHAR
Definition: xmlstorage.h:180
HRESULT WINAPI BaseControlWindowImpl_put_BackgroundPalette(IVideoWindow *iface, LONG BackgroundPalette)
Definition: window.c:386
static char * place
Definition: getopt.c:55
#define WM_SIZE
Definition: winuser.h:1593
LONG HRESULT
Definition: typedefs.h:77
LRESULT WINAPI BaseWindowImpl_OnReceiveMessage(BaseWindow *This, HWND hwnd, INT uMsg, WPARAM wParam, LPARAM lParam)
Definition: window.c:56
#define WINAPI
Definition: msvc.h:8
#define WM_KEYUP
Definition: winuser.h:1698
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned long DWORD
Definition: ntddk_ex.h:95
HICON hIcon
Definition: winuser.h:3155
HRESULT WINAPI BaseDispatchImpl_GetTypeInfo(BaseDispatch *This, REFIID riid, UINT itinfo, LCID lcid, ITypeInfo **pptinfo)
Definition: dispatch.c:59
HRESULT WINAPI BaseControlWindowImpl_GetMaxIdealImageSize(IVideoWindow *iface, LONG *pWidth, LONG *pHeight)
Definition: window.c:699
HRESULT WINAPI BaseControlWindowImpl_get_Width(IVideoWindow *iface, LONG *pWidth)
Definition: window.c:467
HRESULT WINAPI BaseControlWindowImpl_GetTypeInfo(IVideoWindow *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
Definition: window.c:236
#define WM_RBUTTONUP
Definition: winuser.h:1762
HRESULT WINAPI BaseControlWindowImpl_put_Owner(IVideoWindow *iface, OAHWND Owner)
Definition: window.c:530
#define WS_HSCROLL
Definition: pedump.c:628
HRESULT WINAPI BaseControlWindowImpl_get_BorderColor(IVideoWindow *iface, LONG *Color)
Definition: window.c:584
HRESULT WINAPI BaseControlWindowImpl_SetWindowForeground(IVideoWindow *iface, LONG Focus)
Definition: window.c:615
int ret
static LRESULT CALLBACK WndProcW(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: window.c:43
HRESULT WINAPI BaseDispatchImpl_GetTypeInfoCount(BaseDispatch *This, UINT *pctinfo)
Definition: dispatch.c:70
HRESULT WINAPI BaseControlWindowImpl_get_WindowState(IVideoWindow *iface, LONG *WindowState)
Definition: window.c:373
#define IID_NULL
Definition: guiddef.h:98
#define WM_NCMBUTTONUP
Definition: winuser.h:1681
HRESULT WINAPI BaseControlWindow_Init(BaseControlWindow *pControlWindow, const IVideoWindowVtbl *lpVtbl, BaseFilter *owner, CRITICAL_SECTION *lock, BasePin *pPin, const BaseWindowFuncTable *pFuncsTable)
Definition: window.c:204
#define WM_LBUTTONDBLCLK
Definition: winuser.h:1760
#define SWP_FRAMECHANGED
Definition: winuser.h:1225
#define WM_MBUTTONDBLCLK
Definition: winuser.h:1766
HRESULT WINAPI BaseControlWindowImpl_get_Owner(IVideoWindow *iface, OAHWND *Owner)
Definition: window.c:551
HRESULT WINAPI BaseControlWindowImpl_get_Height(IVideoWindow *iface, LONG *pHeight)
Definition: window.c:519
RECT WINAPI BaseWindowImpl_GetDefaultRect(BaseWindow *This)
Definition: window.c:158
#define SWP_NOSIZE
Definition: winuser.h:1230
HCURSOR hCursor
Definition: winuser.h:3156
_In_ DWORD _Out_ _In_ WORD wFlags
Definition: wincon.h:519
#define ERR(fmt,...)
Definition: debug.h:109
#define GWL_STYLE
Definition: winuser.h:846
#define WM_NCMBUTTONDOWN
Definition: winuser.h:1680
HWND WINAPI DECLSPEC_HOTPATCH CreateWindowExW(DWORD dwExStyle, LPCWSTR lpClassName, LPCWSTR lpWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam)
Definition: window.c:503
struct stdole::EXCEPINFO EXCEPINFO
HRESULT WINAPI BaseControlWindowImpl_get_WindowStyleEx(IVideoWindow *iface, LONG *WindowStyleEx)
Definition: window.c:331
static VARIANTARG static DISPID
Definition: ordinal.c:49
#define S_OK
Definition: intsafe.h:59
HRESULT WINAPI BaseControlWindowImpl_get_MessageDrain(IVideoWindow *iface, OAHWND *Drain)
Definition: window.c:573
int WINAPI GetWindowTextW(HWND hWnd, LPWSTR lpString, int nMaxCount)
Definition: window.c:1408
HRESULT WINAPI BaseControlWindowImpl_get_Top(IVideoWindow *iface, LONG *pTop)
Definition: window.c:492
Definition: axcore.idl:91
HBRUSH hbrBackground
Definition: winuser.h:3157
#define WM_LBUTTONUP
Definition: winuser.h:1759
#define WM_MBUTTONDOWN
Definition: winuser.h:1764
#define E_NOTIMPL
Definition: ddrawi.h:99
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
HRESULT WINAPI BaseDispatch_Destroy(BaseDispatch *This)
Definition: dispatch.c:45
_Out_writes_bytes_to_opt_ AbsoluteSecurityDescriptorSize PSECURITY_DESCRIPTOR _Inout_ PULONG _Out_writes_bytes_to_opt_ DaclSize PACL _Inout_ PULONG _Out_writes_bytes_to_opt_ SaclSize PACL _Inout_ PULONG _Out_writes_bytes_to_opt_ OwnerSize PSID Owner
Definition: rtlfuncs.h:1557
unsigned int UINT
Definition: ndis.h:50
#define WM_MOUSEMOVE
Definition: winuser.h:1757
#define WS_VSCROLL
Definition: pedump.c:627
HRESULT WINAPI BaseControlWindowImpl_put_Visible(IVideoWindow *iface, LONG Visible)
Definition: window.c:404
HINSTANCE hInstance
Definition: winuser.h:3154
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
HRESULT WINAPI BaseControlWindowImpl_put_Height(IVideoWindow *iface, LONG Height)
Definition: window.c:505
HRESULT WINAPI BaseControlWindowImpl_put_WindowStyle(IVideoWindow *iface, LONG WindowStyle)
Definition: window.c:289
#define WM_RBUTTONDBLCLK
Definition: winuser.h:1763
struct stdole::DISPPARAMS DISPPARAMS
#define WM_NCLBUTTONUP
Definition: winuser.h:1675
#define HIWORD(l)
Definition: typedefs.h:246
LONG bottom
Definition: windef.h:294
#define SWP_NOMOVE
Definition: winuser.h:1229
const struct BaseWindowFuncTable * pFuncsTable
Definition: strmbase.h:392
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
#define SetWindowLongPtrW
Definition: winuser.h:5247
HRESULT WINAPI BaseControlWindowImpl_put_BorderColor(IVideoWindow *iface, LONG Color)
Definition: window.c:593
HRESULT WINAPI BaseControlWindowImpl_SetWindowPosition(IVideoWindow *iface, LONG Left, LONG Top, LONG Width, LONG Height)
Definition: window.c:642
WCHAR * LPWSTR
Definition: xmlstorage.h:184
BOOL WINAPI BaseControlWindowImpl_PossiblyEatMessage(BaseWindow *This, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: window.c:164
LONG_PTR LRESULT
Definition: windef.h:209
HRESULT WINAPI BaseControlWindowImpl_put_MessageDrain(IVideoWindow *iface, OAHWND Drain)
Definition: window.c:562
BOOL WINAPI BaseWindowImpl_OnSize(BaseWindow *This, LONG Width, LONG Height)
Definition: window.c:73
HRESULT WINAPI BaseControlWindowImpl_GetWindowPosition(IVideoWindow *iface, LONG *pLeft, LONG *pTop, LONG *pWidth, LONG *pHeight)
Definition: window.c:657
HRESULT WINAPI BaseControlWindowImpl_put_Left(IVideoWindow *iface, LONG Left)
Definition: window.c:426
static LPHIST_ENTRY Top
Definition: history.c:53
LPARAM lParam
Definition: combotst.c:139
#define LOWORD(l)
Definition: pedump.c:82
#define HeapFree(x, y, z)
Definition: compat.h:402
HRESULT WINAPI BaseControlWindowImpl_put_Top(IVideoWindow *iface, LONG Top)
Definition: window.c:478
BOOL WINAPI DECLSPEC_HOTPATCH SetWindowTextW(HWND hWnd, LPCWSTR lpString)
Definition: window.c:1753
#define WM_NCMOUSEMOVE
Definition: winuser.h:1673
#define SUCCEEDED(hr)
Definition: intsafe.h:57
#define WM_NCLBUTTONDBLCLK
Definition: winuser.h:1676
HRESULT WINAPI BaseWindowImpl_PrepareWindow(BaseWindow *This)
Definition: window.c:100
#define WS_MAXIMIZE
Definition: pedump.c:623
HRESULT WINAPI BaseControlWindowImpl_IsCursorHidden(IVideoWindow *iface, LONG *CursorHidden)
Definition: window.c:731