ReactOS 0.4.15-dev-8131-g4988de4
CBaseBar.cpp
Go to the documentation of this file.
1/*
2 * ReactOS Explorer
3 *
4 * Copyright 2009 Andrew Hill <ash77 at domain reactos.org>
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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 */
20
21/*
22This class knows how to contain base bar site in a cabinet window.
23*/
24
25#include "shellbars.h"
26
27/*
28Base bar that contains a vertical or horizontal explorer band. It also
29provides resizing abilities.
30*/
31/*
32TODO:
33 **Make base bar support resizing -- almost done (need to support integral ?)
34 Add context menu for base bar
35 Fix base bar to correctly initialize fVertical field
36 Fix base bar to correctly reposition its base bar site when resized -- done ?
37*/
38
39class CBaseBar :
40 public CWindowImpl<CBaseBar, CWindow, CControlWinTraits>,
41 public CComObjectRootEx<CComMultiThreadModelNoCS>,
42 public IInputObjectSite,
43 public IOleCommandTarget,
44 public IServiceProvider,
45 public IInputObject,
46 public IDeskBar,
47 public IDockingWindow,
48 public IPersistStream,
49 public IPersistStreamInit,
51 public IObjectWithSite
52{
53private:
54 CComPtr<IUnknown> fSite;
55 CComPtr<IUnknown> fClient;
59 int fNeededSize; // width or height
60
61 // used by resize tracking loop
64public:
65 CBaseBar();
66 ~CBaseBar();
68
69public:
71
72 // *** IOleWindow methods ***
73 STDMETHOD(GetWindow)(HWND *lphwnd) override;
74 STDMETHOD(ContextSensitiveHelp)(BOOL fEnterMode) override;
75
76 // *** IInputObjectSite specific methods ***
77 STDMETHOD(OnFocusChangeIS)(IUnknown *punkObj, BOOL fSetFocus) override;
78
79 // *** IOleCommandTarget specific methods ***
80 STDMETHOD(QueryStatus)(const GUID *pguidCmdGroup, ULONG cCmds,
81 OLECMD prgCmds[ ], OLECMDTEXT *pCmdText) override;
82 STDMETHOD(Exec)(const GUID *pguidCmdGroup, DWORD nCmdID,
83 DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut) override;
84
85 // *** IServiceProvider methods ***
86 STDMETHOD(QueryService)(REFGUID guidService, REFIID riid, void **ppvObject) override;
87
88 // *** IInputObject methods ***
89 // forward the methods to the contained active bar
90 STDMETHOD(UIActivateIO)(BOOL fActivate, LPMSG lpMsg) override;
91 STDMETHOD(HasFocusIO)() override;
92 STDMETHOD(TranslateAcceleratorIO)(LPMSG lpMsg) override;
93
94 // *** IDeskBar methods ***
95 STDMETHOD(SetClient)(IUnknown *punkClient) override;
96 STDMETHOD(GetClient)(IUnknown **ppunkClient) override;
98
99 // *** IDockingWindow methods ***
100 STDMETHOD(ShowDW)(BOOL fShow) override;
102 STDMETHOD(ResizeBorderDW)(LPCRECT prcBorder, IUnknown *punkToolbarSite, BOOL fReserved) override;
103
104 // *** IObjectWithSite methods ***
105 STDMETHOD(SetSite)(IUnknown *pUnkSite) override;
106 STDMETHOD(GetSite)(REFIID riid, void **ppvSite) override;
107
108 // *** IPersist methods ***
109 STDMETHOD(GetClassID)(CLSID *pClassID) override;
110
111 // *** IPersistStream methods ***
112 STDMETHOD(IsDirty)() override;
113 STDMETHOD(Load)(IStream *pStm) override;
114 STDMETHOD(Save)(IStream *pStm, BOOL fClearDirty) override;
115 STDMETHOD(GetSizeMax)(ULARGE_INTEGER *pcbSize) override;
116
117 // *** IPersistStreamInit methods ***
118 STDMETHOD(InitNew)() override;
119
120 // *** IPersistPropertyBag methods ***
121 STDMETHOD(Load)(IPropertyBag *pPropBag, IErrorLog *pErrorLog) override;
122 STDMETHOD(Save)(IPropertyBag *pPropBag, BOOL fClearDirty, BOOL fSaveAllProperties) override;
123
124 // message handlers
125 LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
127 LRESULT OnNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
133
135
146
149 COM_INTERFACE_ENTRY_IID(IID_IInputObjectSite, IInputObjectSite)
150 COM_INTERFACE_ENTRY_IID(IID_IOleCommandTarget, IOleCommandTarget)
151 COM_INTERFACE_ENTRY_IID(IID_IServiceProvider, IServiceProvider)
152 COM_INTERFACE_ENTRY_IID(IID_IInputObject, IInputObject)
153 COM_INTERFACE_ENTRY_IID(IID_IDeskBar, IDeskBar)
154 COM_INTERFACE_ENTRY_IID(IID_IDockingWindow, IDockingWindow)
161};
162
164{
166 fVertical = true;
167 fVisible = false;
168 fNeededSize = 200;
169 fTracking = false;
170}
171
173{
174}
175
177{
178 fVertical = (vert == TRUE);
179 return S_OK;
180}
181
183{
184 CComPtr<IDockingWindowSite> dockingWindowSite;
185 RECT availableBorderSpace;
186 RECT neededBorderSpace;
187 HRESULT hResult;
188
189 hResult = fSite->QueryInterface(IID_PPV_ARG(IDockingWindowSite, &dockingWindowSite));
190 if (FAILED_UNEXPECTEDLY(hResult))
191 return hResult;
192 hResult = dockingWindowSite->GetBorderDW(static_cast<IDeskBar *>(this), &availableBorderSpace);
193 if (FAILED_UNEXPECTEDLY(hResult))
194 return hResult;
195 memset(&neededBorderSpace, 0, sizeof(neededBorderSpace));
196 if (fVisible)
197 {
198 if (fVertical)
199 neededBorderSpace.left = fNeededSize + GetSystemMetrics(SM_CXFRAME);
200 else
201 neededBorderSpace.bottom = fNeededSize + GetSystemMetrics(SM_CXFRAME);
202 }
203 hResult = dockingWindowSite->SetBorderSpaceDW(static_cast<IDeskBar *>(this), &neededBorderSpace);
204 if (FAILED_UNEXPECTEDLY(hResult))
205 return hResult;
206 return S_OK;
207}
208
209// current bar size is stored in the registry under
210// key=HKCU\Software\Microsoft\Internet Explorer\Explorer Bars
211// value=current bar GUID
212// result is 8 bytes of binary data, 2 longs. First is the size, second is reserved and will always be 0
213/*HRESULT CBaseBar::StopCurrentBar()
214{
215 CComPtr<IOleCommandTarget> commandTarget;
216 HRESULT hResult;
217
218 if (fCurrentBar.p != NULL)
219 {
220 hResult = fCurrentBar->QueryInterface(IID_IOleCommandTarget, (void **)&commandTarget);
221 hResult = commandTarget->Exec(NULL, 0x17, 0, NULL, NULL);
222 }
223 // hide the current bar
224 memcpy(&fCurrentActiveClass, &GUID_NULL, sizeof(fCurrentActiveClass));
225 return S_OK;
226}*/
227
229{
230 if (lphwnd == NULL)
231 return E_POINTER;
232 *lphwnd = m_hWnd;
233 return S_OK;
234}
235
237{
238 return E_NOTIMPL;
239}
240
242{
243 return IUnknown_OnFocusChangeIS(fSite, punkObj, fSetFocus);
244}
245
247 OLECMD prgCmds[ ], OLECMDTEXT *pCmdText)
248{
249 return E_NOTIMPL;
250}
251
252HRESULT STDMETHODCALLTYPE CBaseBar::Exec(const GUID *pguidCmdGroup, DWORD nCmdID,
253 DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
254{
255 if (IsEqualIID(*pguidCmdGroup, CGID_Explorer))
256 {
257 // pass through to the explorer ?
258 }
259 else if (IsEqualIID(*pguidCmdGroup, IID_IDeskBarClient))
260 {
261 switch (nCmdID)
262 {
263 case 0:
264 {
265 // hide current band
266 ShowDW(0);
267
268 // Inform our site that we closed
269 VARIANT var;
270 V_VT(&var) = VT_UNKNOWN;
271 V_UNKNOWN(&var) = static_cast<IDeskBar *>(this);
272 IUnknown_Exec(fSite, CGID_Explorer, 0x22, 0, &var, NULL);
273 break;
274 }
275 case 2:
276 // switch bands
277 break;
278 case 3:
279 break;
280 }
281 }
282 return E_NOTIMPL;
283}
284
286{
287 CComPtr<IServiceProvider> serviceProvider;
288 HRESULT hResult;
289
290 if (fSite == NULL)
291 return E_FAIL;
292 hResult = fSite->QueryInterface(IID_PPV_ARG(IServiceProvider, &serviceProvider));
293 if (FAILED_UNEXPECTEDLY(hResult))
294 return hResult;
295 // called for SID_STopLevelBrowser, IID_IBrowserService to find top level browser
296 // called for SID_IWebBrowserApp, IID_IConnectionPointContainer
297 // connection point called for DIID_DWebBrowserEvents2 to establish connection
298 return serviceProvider->QueryService(guidService, riid, ppvObject);
299}
300
302{
303 return IUnknown_UIActivateIO(fClient, fActivate, lpMsg);
304}
305
307{
309}
310
312{
314}
315
317{
318 CComPtr<IOleWindow> oleWindow;
319 HWND ownerWindow;
320 HRESULT hResult;
321
322 /* Clean up old client */
323 fClient = NULL;
324
325 if (punkClient)
326 {
327 hResult = punkClient->QueryInterface(IID_PPV_ARG(IUnknown, &fClient));
328 if (FAILED_UNEXPECTEDLY(hResult))
329 return hResult;
330 hResult = fSite->QueryInterface(IID_PPV_ARG(IOleWindow, &oleWindow));
331 if (FAILED_UNEXPECTEDLY(hResult))
332 return hResult;
333 hResult = oleWindow->GetWindow(&ownerWindow);
334 if (FAILED_UNEXPECTEDLY(hResult))
335 return hResult;
336 Create(ownerWindow, 0, NULL,
339 }
340 else
341 {
343 }
344 return S_OK;
345}
346
348{
349 if (ppunkClient == NULL)
350 return E_POINTER;
351 *ppunkClient = fClient;
352 if (fClient.p != NULL)
353 fClient.p->AddRef();
354 return S_OK;
355}
356
358{
359 if (prc == NULL)
360 return E_POINTER;
361 if (fVertical)
363 else
366 return S_OK;
367}
368
370{
371 fVisible = fShow ? true : false;
372 ShowWindow(fShow);
374 return S_OK;
375}
376
378{
379 ShowDW(0);
380 // Detach from our client
382 // Destroy our site
383 SetSite(NULL);
384 return S_OK;
385}
386
388{
390 return S_OK;
391}
392
394{
395 fSite = pUnkSite;
396 return S_OK;
397}
398
400{
401 if (ppvSite == NULL)
402 return E_POINTER;
403 *ppvSite = fSite;
404 if (fSite.p != NULL)
405 fSite.p->AddRef();
406 return S_OK;
407}
408
410{
411 if (pClassID == NULL)
412 return E_POINTER;
413 // TODO: what class to return here?
414 return E_NOTIMPL;
415}
416
418{
419 return E_NOTIMPL;
420}
421
423{
424 return E_NOTIMPL;
425}
426
428{
429 return E_NOTIMPL;
430}
431
433{
434 if (pcbSize == NULL)
435 return E_POINTER;
436 return E_NOTIMPL;
437}
438
440{
441 return E_NOTIMPL;
442}
443
445{
446 return E_NOTIMPL;
447}
448
449HRESULT STDMETHODCALLTYPE CBaseBar::Save(IPropertyBag *pPropBag, BOOL fClearDirty, BOOL fSaveAllProperties)
450{
451 return E_NOTIMPL;
452}
453
455{
458 CComPtr<IOleWindow> pClient;
459 HWND clientHwnd;
460 HRESULT hr;
461
462 if (fVisible)
463 {
466
467 // substract resizing grips to child's window size
468 if (fVertical)
470 else
472 hr = fClient->QueryInterface(IID_PPV_ARG(IOleWindow, &pClient));
474 return 0;
475 hr = pClient->GetWindow(&clientHwnd);
477 return 0;
479 bHandled = TRUE;
480 }
481 return 0;
482}
483
485{
486 if ((short)lParam != HTCLIENT || (HWND)wParam != m_hWnd)
487 {
488 bHandled = FALSE;
489 return 0;
490 }
491 if (fVertical)
493 else
495 return 1;
496}
497
499{
500 CComPtr<IWinEventHandler> winEventHandler;
502 HRESULT hResult;
503
504 result = 0;
505 if (fClient.p != NULL)
506 {
507 hResult = fClient->QueryInterface(IID_PPV_ARG(IWinEventHandler, &winEventHandler));
508 if (SUCCEEDED(hResult) && winEventHandler.p != NULL)
509 hResult = winEventHandler->OnWinEvent(NULL, uMsg, wParam, lParam, &result);
510 }
511 return result;
512}
513
515{
516 SetCapture();
517 fTracking = true;
520 return 0;
521}
522
524{
526 fTracking = false;
527 return 0;
528}
529
531{
532 POINT newLocation;
533 int delta;
534
535 if (fTracking)
536 {
537 newLocation.x = (short)LOWORD(lParam);
538 newLocation.y = (short)HIWORD(lParam);
539 if (fVertical)
540 delta = newLocation.x - fLastLocation.x;
541 else
542 delta = fLastLocation.y - newLocation.y;
543 if (fNeededSize + delta < 0)
544 return 0;
545 fNeededSize += delta;
546 fLastLocation = newLocation;
548 }
549 return 0;
550}
551
553{
554 fTracking = false;
555 return 0;
556}
557
559{
560 fTracking = false;
561 return 0;
562}
563
565{
566 return ShellObjectCreatorInit<CBaseBar, BOOL>(vertical, riid, ppv);
567}
HRESULT CBaseBar_CreateInstance(REFIID riid, void **ppv, BOOL vertical)
Definition: CBaseBar.cpp:564
@ Create
Definition: registry.c:563
#define STDMETHOD(m)
Definition: basetyps.h:62
#define STDMETHODCALLTYPE
Definition: bdasup.h:9
STDMETHOD() GetWindow(HWND *lphwnd) override
Definition: CBaseBar.cpp:228
LRESULT OnSetCursor(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CBaseBar.cpp:484
LRESULT OnCancelMode(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CBaseBar.cpp:552
LRESULT OnNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CBaseBar.cpp:498
STDMETHOD() IsDirty() override
Definition: CBaseBar.cpp:417
STDMETHOD() SetSite(IUnknown *pUnkSite) override
Definition: CBaseBar.cpp:393
STDMETHOD() QueryService(REFGUID guidService, REFIID riid, void **ppvObject) override
Definition: CBaseBar.cpp:285
STDMETHOD() OnPosRectChangeDB(LPRECT prc) override
Definition: CBaseBar.cpp:357
STDMETHOD() Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut) override
Definition: CBaseBar.cpp:252
LRESULT OnLButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CBaseBar.cpp:514
STDMETHOD() SetClient(IUnknown *punkClient) override
Definition: CBaseBar.cpp:316
STDMETHOD() GetClassID(CLSID *pClassID) override
Definition: CBaseBar.cpp:409
STDMETHOD() CloseDW(DWORD dwReserved) override
Definition: CBaseBar.cpp:377
STDMETHOD() InitNew() override
Definition: CBaseBar.cpp:439
LRESULT OnMouseMove(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CBaseBar.cpp:530
STDMETHOD() Load(IStream *pStm) override
Definition: CBaseBar.cpp:422
STDMETHOD() OnFocusChangeIS(IUnknown *punkObj, BOOL fSetFocus) override
Definition: CBaseBar.cpp:241
STDMETHOD() TranslateAcceleratorIO(LPMSG lpMsg) override
Definition: CBaseBar.cpp:311
STDMETHOD() QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText) override
Definition: CBaseBar.cpp:246
STDMETHOD() GetSizeMax(ULARGE_INTEGER *pcbSize) override
Definition: CBaseBar.cpp:432
bool fTracking
Definition: CBaseBar.cpp:62
LRESULT OnLButtonUp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CBaseBar.cpp:523
STDMETHOD() GetClient(IUnknown **ppunkClient) override
Definition: CBaseBar.cpp:347
bool fVertical
Definition: CBaseBar.cpp:57
STDMETHOD() Save(IStream *pStm, BOOL fClearDirty) override
Definition: CBaseBar.cpp:427
CComPtr< IUnknown > fSite
Definition: CBaseBar.cpp:54
HRESULT Initialize(BOOL)
Definition: CBaseBar.cpp:176
STDMETHOD() GetSite(REFIID riid, void **ppvSite) override
Definition: CBaseBar.cpp:399
STDMETHOD() HasFocusIO() override
Definition: CBaseBar.cpp:306
int fNeededSize
Definition: CBaseBar.cpp:59
bool fVisible
Definition: CBaseBar.cpp:58
STDMETHOD() ShowDW(BOOL fShow) override
Definition: CBaseBar.cpp:369
STDMETHOD() ResizeBorderDW(LPCRECT prcBorder, IUnknown *punkToolbarSite, BOOL fReserved) override
Definition: CBaseBar.cpp:387
LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CBaseBar.cpp:454
CComPtr< IUnknown > fClient
Definition: CBaseBar.cpp:55
POINT fLastLocation
Definition: CBaseBar.cpp:63
HWND fClientWindow
Definition: CBaseBar.cpp:56
HRESULT ReserveBorderSpace()
Definition: CBaseBar.cpp:182
STDMETHOD() ContextSensitiveHelp(BOOL fEnterMode) override
Definition: CBaseBar.cpp:236
STDMETHOD() UIActivateIO(BOOL fActivate, LPMSG lpMsg) override
Definition: CBaseBar.cpp:301
LRESULT OnCaptureChanged(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CBaseBar.cpp:558
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
#define E_NOTIMPL
Definition: ddrawi.h:99
#define E_FAIL
Definition: ddrawi.h:102
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
static const WCHAR dwWidth[]
Definition: provider.c:62
static const WCHAR dwHeight[]
Definition: provider.c:63
@ VT_UNKNOWN
Definition: compat.h:2308
#define FAILED_UNEXPECTEDLY(hr)
Definition: precomp.h:121
HRESULT WINAPI IUnknown_UIActivateIO(IUnknown *unknown, BOOL activate, LPMSG msg)
Definition: ordinal.c:1629
HRESULT WINAPI IUnknown_TranslateAcceleratorIO(IUnknown *lpUnknown, LPMSG lpMsg)
Definition: ordinal.c:4263
HRESULT WINAPI IUnknown_HasFocusIO(IUnknown *lpUnknown)
Definition: ordinal.c:4295
HRESULT WINAPI IUnknown_Exec(IUnknown *lpUnknown, REFGUID pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
Definition: ordinal.c:1083
HRESULT WINAPI IUnknown_OnFocusChangeIS(LPUNKNOWN lpUnknown, LPUNKNOWN pFocusObject, BOOL bFocus)
Definition: ordinal.c:4767
unsigned short(__cdecl typeof(TIFFCurrentDirectory))(struct tiff *)
Definition: typeof.h:94
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLuint64EXT * result
Definition: glext.h:11304
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
ULONG AddRef()
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define COM_INTERFACE_ENTRY2_IID(iid, x, x2)
Definition: atlcom.h:609
#define BEGIN_COM_MAP(x)
Definition: atlcom.h:581
#define COM_INTERFACE_ENTRY_IID(iid, x)
Definition: atlcom.h:601
#define END_COM_MAP()
Definition: atlcom.h:592
#define MESSAGE_HANDLER(msg, func)
Definition: atlwin.h:1926
#define BEGIN_MSG_MAP(theClass)
Definition: atlwin.h:1898
#define END_MSG_MAP()
Definition: atlwin.h:1917
#define DECLARE_WND_CLASS_EX(WndClassName, style, bkgnd)
Definition: atlwin.h:2004
const IID IID_IObjectWithSite
const char * var
Definition: shader.c:5666
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED _In_opt_ LPTRANSMIT_FILE_BUFFERS _In_ DWORD dwReserved
Definition: mswsock.h:95
unsigned int UINT
Definition: ndis.h:50
_Out_ LPRECT prc
Definition: ntgdi.h:1658
#define V_UNKNOWN(A)
Definition: oleauto.h:281
#define V_VT(A)
Definition: oleauto.h:211
const GUID IID_IOleWindow
const GUID IID_IPersistStreamInit
#define LOWORD(l)
Definition: pedump.c:82
#define WS_VISIBLE
Definition: pedump.c:620
#define WS_CHILDWINDOW
Definition: pedump.c:639
#define WS_CLIPSIBLINGS
Definition: pedump.c:618
#define WS_CLIPCHILDREN
Definition: pedump.c:619
const GUID IID_IPersist
Definition: proxy.cpp:14
const GUID IID_IPersistStream
Definition: proxy.cpp:13
const GUID IID_IPersistPropertyBag
Definition: proxy.cpp:11
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define REFIID
Definition: guiddef.h:118
#define WM_NOTIFY
Definition: richedit.h:61
#define memset(x, y, z)
Definition: compat.h:39
HRESULT hr
Definition: shlfolder.c:183
#define true
Definition: stdbool.h:36
Definition: scsiwmi.h:51
long y
Definition: polytest.cpp:48
long x
Definition: polytest.cpp:48
LONG right
Definition: windef.h:308
LONG bottom
Definition: windef.h:309
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
uint32_t ULONG
Definition: typedefs.h:59
#define HIWORD(l)
Definition: typedefs.h:247
#define _T(x)
Definition: vfdio.h:22
_In_ void _In_ PCCERT_CONTEXT _In_opt_ LPFILETIME _In_ DWORD _In_ DWORD _Outptr_opt_ void ** ppvObject
Definition: wincrypt.h:6082
LONG_PTR LPARAM
Definition: windef.h:208
LONG_PTR LRESULT
Definition: windef.h:209
UINT_PTR WPARAM
Definition: windef.h:207
#define E_POINTER
Definition: winerror.h:2365
HWND WINAPI SetCapture(_In_ HWND hWnd)
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
BOOL WINAPI ReleaseCapture(void)
Definition: message.c:2890
#define WM_CAPTURECHANGED
Definition: winuser.h:1808
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
#define WM_SIZE
Definition: winuser.h:1611
#define WM_CANCELMODE
Definition: winuser.h:1635
#define SM_CXFRAME
Definition: winuser.h:994
#define WS_EX_TOOLWINDOW
Definition: winuser.h:404
HCURSOR WINAPI SetCursor(_In_opt_ HCURSOR)
#define WM_MOUSEMOVE
Definition: winuser.h:1775
#define WM_LBUTTONDOWN
Definition: winuser.h:1776
#define IDC_SIZENS
Definition: winuser.h:695
#define HTCLIENT
Definition: winuser.h:2475
#define LoadCursor
Definition: winuser.h:5812
#define WM_LBUTTONUP
Definition: winuser.h:1777
#define WM_SETCURSOR
Definition: winuser.h:1636
#define IDC_SIZEWE
Definition: winuser.h:694
BOOL WINAPI DestroyWindow(_In_ HWND)
int WINAPI GetSystemMetrics(_In_ int)
#define COLOR_3DFACE
Definition: winuser.h:929
static void Initialize()
Definition: xlate.c:212
#define IID_PPV_ARG(Itype, ppType)