2 * PROJECT: ReactOS API tests
3 * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
4 * PURPOSE: Test for IShellFolderViewCB
5 * COPYRIGHT: Copyright 2017 Mark Jansen (mark.jansen@reactos.org)
9 #include <atlsimpcoll.h>
13 #define DbgPrint(...) trace(__VA_ARGS__)
16 void DbgPrint(PCSTR
, ...);
18 #include <shellutils.h>
19 //#include <msgtrace.h>
21 static DWORD g_WinVersion
;
22 #define WINVER_VISTA 0x0600
24 #ifndef SFVM_SELECTIONCHANGED
25 #define SFVM_SELECTIONCHANGED 8 /* undocumented */
26 #define SFVM_DRAWMENUITEM 9 /* undocumented */
27 #define SFVM_MEASUREMENUITEM 10 /* undocumented */
28 #define SFVM_EXITMENULOOP 11 /* undocumented */
29 #define SFVM_VIEWRELEASE 12 /* undocumented */
30 #define SFVM_GETNAMELENGTH 13 /* undocumented */
31 #define SFVM_WINDOWCLOSING 16 /* undocumented */
32 #define SFVM_LISTREFRESHED 17 /* undocumented */
33 #define SFVM_WINDOWFOCUSED 18 /* undocumented */
34 #define SFVM_REGISTERCOPYHOOK 20 /* undocumented */
35 #define SFVM_COPYHOOKCALLBACK 21 /* undocumented */
36 #define SFVM_UNMERGEFROMMENU 28 /* undocumented */
37 #define SFVM_ADDINGOBJECT 29 /* undocumented */
38 #define SFVM_REMOVINGOBJECT 30 /* undocumented */
39 #define SFVM_GETCOMMANDDIR 33 /* undocumented */
40 #define SFVM_GETCOLUMNSTREAM 34 /* undocumented */
41 #define SFVM_CANSELECTALL 35 /* undocumented */
42 #define SFVM_ISSTRICTREFRESH 37 /* undocumented */
43 #define SFVM_ISCHILDOBJECT 38 /* undocumented */
44 #define SFVM_GETEXTVIEWS 40 /* undocumented */
45 #define SFVM_GET_CUSTOMVIEWINFO 77 /* undocumented */
46 #define SFVM_ENUMERATEDITEMS 79 /* undocumented */
47 #define SFVM_GET_VIEW_DATA 80 /* undocumented */
48 #define SFVM_GET_WEBVIEW_LAYOUT 82 /* undocumented */
49 #define SFVM_GET_WEBVIEW_CONTENT 83 /* undocumented */
50 #define SFVM_GET_WEBVIEW_TASKS 84 /* undocumented */
51 #define SFVM_GET_WEBVIEW_THEME 86 /* undocumented */
52 #define SFVM_GETDEFERREDVIEWSETTINGS 92 /* undocumented */
55 #define DUM_MSG_GetWindow 400
56 #define DUM_MSG_ContextSensitiveHelp 401
57 #define DUM_MSG_InsertMenusSB 402
58 #define DUM_MSG_SetMenuSB 403
59 #define DUM_MSG_RemoveMenusSB 404
60 #define DUM_MSG_SetStatusTextSB 405
61 #define DUM_MSG_EnableModelessSB 406
62 #define DUM_MSG_TranslateAcceleratorSB 407
63 #define DUM_MSG_BrowseObject 408
64 #define DUM_MSG_GetViewStateStream 409
65 #define DUM_MSG_GetControlWindow 410
66 #define DUM_MSG_SendControlMsg 411
67 #define DUM_MSG_QueryActiveShellView 412
68 #define DUM_MSG_OnViewWindowActive 413
69 #define DUM_MSG_SetToolbarItems 414
72 const char* msg2str(UINT uMsg
)
74 static char buf
[2][50];
80 case SFVM_MERGEMENU
: return "SFVM_MERGEMENU";
81 case SFVM_INVOKECOMMAND
: return "SFVM_INVOKECOMMAND";
82 case SFVM_GETHELPTEXT
: return "SFVM_GETHELPTEXT";
83 case SFVM_GETTOOLTIPTEXT
: return "SFVM_GETTOOLTIPTEXT";
84 case SFVM_GETBUTTONINFO
: return "SFVM_GETBUTTONINFO";
85 case SFVM_GETBUTTONS
: return "SFVM_GETBUTTONS";
86 case SFVM_INITMENUPOPUP
: return "SFVM_INITMENUPOPUP";
87 case SFVM_SELECTIONCHANGED
: return "SFVM_SELECTIONCHANGED";
88 case SFVM_DRAWMENUITEM
: return "SFVM_DRAWMENUITEM";
89 case SFVM_MEASUREMENUITEM
: return "SFVM_MEASUREMENUITEM";
90 case SFVM_EXITMENULOOP
: return "SFVM_EXITMENULOOP";
91 case SFVM_VIEWRELEASE
: return "SFVM_VIEWRELEASE";
92 case SFVM_GETNAMELENGTH
: return "SFVM_GETNAMELENGTH";
93 case SFVM_FSNOTIFY
: return "SFVM_FSNOTIFY";
94 case SFVM_WINDOWCREATED
: return "SFVM_WINDOWCREATED";
95 case SFVM_WINDOWCLOSING
: return "SFVM_WINDOWCLOSING";
96 case SFVM_LISTREFRESHED
: return "SFVM_LISTREFRESHED";
97 case SFVM_WINDOWFOCUSED
: return "SFVM_WINDOWFOCUSED";
98 case SFVM_REGISTERCOPYHOOK
: return "SFVM_REGISTERCOPYHOOK";
99 case SFVM_COPYHOOKCALLBACK
: return "SFVM_COPYHOOKCALLBACK";
100 case SFVM_GETDETAILSOF
: return "SFVM_GETDETAILSOF";
101 case SFVM_COLUMNCLICK
: return "SFVM_COLUMNCLICK";
102 case SFVM_QUERYFSNOTIFY
: return "SFVM_QUERYFSNOTIFY";
103 case SFVM_DEFITEMCOUNT
: return "SFVM_DEFITEMCOUNT";
104 case SFVM_DEFVIEWMODE
: return "SFVM_DEFVIEWMODE";
105 case SFVM_UNMERGEFROMMENU
: return "SFVM_UNMERGEFROMMENU";
106 case SFVM_ADDINGOBJECT
: return "SFVM_ADDINGOBJECT";
107 case SFVM_REMOVINGOBJECT
: return "SFVM_REMOVINGOBJECT";
108 case SFVM_UPDATESTATUSBAR
: return "SFVM_UPDATESTATUSBAR";
109 case SFVM_BACKGROUNDENUM
: return "SFVM_BACKGROUNDENUM";
110 case SFVM_GETCOMMANDDIR
: return "SFVM_GETCOMMANDDIR";
111 case SFVM_GETCOLUMNSTREAM
: return "SFVM_GETCOLUMNSTREAM";
112 case SFVM_CANSELECTALL
: return "SFVM_CANSELECTALL";
113 case SFVM_DIDDRAGDROP
: return "SFVM_DIDDRAGDROP";
114 case SFVM_ISSTRICTREFRESH
: return "SFVM_ISSTRICTREFRESH";
115 case SFVM_ISCHILDOBJECT
: return "SFVM_ISCHILDOBJECT";
116 case SFVM_SETISFV
: return "SFVM_SETISFV";
117 case SFVM_GETEXTVIEWS
: return "SFVM_GETEXTVIEWS";
118 case SFVM_THISIDLIST
: return "SFVM_THISIDLIST";
119 case SFVM_ADDPROPERTYPAGES
: return "SFVM_ADDPROPERTYPAGES";
120 case SFVM_BACKGROUNDENUMDONE
: return "SFVM_BACKGROUNDENUMDONE";
121 case SFVM_GETNOTIFY
: return "SFVM_GETNOTIFY";
122 case SFVM_GETSORTDEFAULTS
: return "SFVM_GETSORTDEFAULTS";
123 case SFVM_SIZE
: return "SFVM_SIZE";
124 case SFVM_GETZONE
: return "SFVM_GETZONE";
125 case SFVM_GETPANE
: return "SFVM_GETPANE";
126 case SFVM_GETHELPTOPIC
: return "SFVM_GETHELPTOPIC";
127 case SFVM_GETANIMATION
: return "SFVM_GETANIMATION";
128 case SFVM_GET_CUSTOMVIEWINFO
: return "SFVM_GET_CUSTOMVIEWINFO";
129 case SFVM_ENUMERATEDITEMS
: return "SFVM_ENUMERATEDITEMS";
130 case SFVM_GET_VIEW_DATA
: return "SFVM_GET_VIEW_DATA";
131 case SFVM_GET_WEBVIEW_LAYOUT
: return "SFVM_GET_WEBVIEW_LAYOUT";
132 case SFVM_GET_WEBVIEW_CONTENT
: return "SFVM_GET_WEBVIEW_CONTENT";
133 case SFVM_GET_WEBVIEW_TASKS
: return "SFVM_GET_WEBVIEW_TASKS";
134 case SFVM_GET_WEBVIEW_THEME
: return "SFVM_GET_WEBVIEW_THEME";
135 case SFVM_GETDEFERREDVIEWSETTINGS
: return "SFVM_GET_WEBVIEW_THEME";
137 case DUM_MSG_GetWindow
: return "|GetWindow|";
138 case DUM_MSG_ContextSensitiveHelp
: return "|ContextSensitiveHelp|";
139 case DUM_MSG_InsertMenusSB
: return "|InsertMenusSB|";
140 case DUM_MSG_SetMenuSB
: return "|SetMenuSB|";
141 case DUM_MSG_RemoveMenusSB
: return "|RemoveMenusSB|";
142 case DUM_MSG_SetStatusTextSB
: return "|SetStatusTextSB|";
143 case DUM_MSG_EnableModelessSB
: return "|EnableModelessSB|";
144 case DUM_MSG_TranslateAcceleratorSB
: return "|TranslateAcceleratorSB|";
145 case DUM_MSG_BrowseObject
: return "|BrowseObject|";
146 case DUM_MSG_GetViewStateStream
: return "|GetViewStateStream|";
147 case DUM_MSG_GetControlWindow
: return "|GetControlWindow|";
148 case DUM_MSG_SendControlMsg
: return "|SendControlMsg|";
149 case DUM_MSG_QueryActiveShellView
: return "|QueryActiveShellView|";
150 case DUM_MSG_OnViewWindowActive
: return "|OnViewWindowActive|";
151 case DUM_MSG_SetToolbarItems
: return "|SetToolbarItems|";
153 sprintf(buf
[index
], "[%u]", uMsg
);
159 #define PTR_VALUE 0xf7f7f7f7
163 message(UINT msg
, WPARAM wp
, LPARAM lp
) : uMsg(msg
), wParam(wp
), lParam(lp
) { ; }
170 CSimpleArray
<message
> g_Received
;
174 g_Received
.RemoveAll();
177 void add_msg(UINT uMsg
, WPARAM wParam
, LPARAM lParam
)
179 g_Received
.Add(message(uMsg
, wParam
, lParam
));
182 void print_list_(const CSimpleArray
<message
>& input
, const char* file
, int line
)
184 trace_(file
, line
)("Got list:\n");
185 for (int n
= 0; n
< input
.GetSize(); ++n
)
187 const message
& msg
= input
[n
];
188 trace_(file
, line
)("msg: %d(%s), wParam:0x%x, lParam:0x%lx\n", msg
.uMsg
, msg2str(msg
.uMsg
), msg
.wParam
, msg
.lParam
);
190 trace_(file
, line
)("End of list.\n");
193 void compare_list_(const CSimpleArray
<message
>& input
, const message
* compare
, const char* file
, int line
)
196 int compare_item
= 0;
197 LONG old_failures
= winetest_get_failures();
198 while (compare
[compare_item
].uMsg
&& input_item
< input
.GetSize())
200 const message
& inp
= input
[input_item
];
201 const message
& cmp
= compare
[compare_item
];
202 if (cmp
.uMsg
== inp
.uMsg
)
204 if (cmp
.lParam
!= (LPARAM
)PTR_VALUE
)
206 ok_(file
, line
)(cmp
.lParam
== inp
.lParam
, "Expected lParam to be 0x%lx, was 0x%lx for %i(%s)\n",
207 cmp
.lParam
, inp
.lParam
, compare_item
, msg2str(cmp
.uMsg
));
211 ok_(file
, line
)(inp
.lParam
!= 0, "Expected lParam to be a pointer, was 0 for %i(%s)\n",
212 compare_item
, msg2str(cmp
.uMsg
));
214 if (cmp
.wParam
!= PTR_VALUE
)
216 ok_(file
, line
)(cmp
.wParam
== inp
.wParam
, "Expected wParam to be 0x%x, was 0x%x for %i(%s)\n",
217 cmp
.wParam
, inp
.wParam
, compare_item
, msg2str(cmp
.uMsg
));
221 ok_(file
, line
)(inp
.wParam
!= 0, "Expected wParam to be a pointer, was 0 for %i(%s)\n",
222 compare_item
, msg2str(cmp
.uMsg
));
228 /* We skip unknown items for now */
234 while (compare
[compare_item
].uMsg
)
236 ok_(file
, line
)(0, "Message %i(%s) not found\n", compare_item
, msg2str(compare
[compare_item
].uMsg
));
239 if (old_failures
!= winetest_get_failures())
241 print_list_(input
, file
, line
);
245 #define compare_list(cmp) compare_list_(g_Received, cmp, __FILE__, __LINE__)
246 #define print_list() print_list_(g_Received, __FILE__, __LINE__)
252 class CFolderViewCB
:
253 public IShellFolderViewCB
256 virtual HRESULT STDMETHODCALLTYPE
QueryInterface(REFIID riid
, void **ppvObject
)
258 if (riid
== IID_IShellFolderViewCB
|| riid
== IID_IUnknown
)
264 return E_NOINTERFACE
;
266 virtual ULONG STDMETHODCALLTYPE
AddRef(void)
268 InterlockedIncrement(&g_AddRef
);
271 virtual ULONG STDMETHODCALLTYPE
Release(void)
273 InterlockedIncrement(&g_Release
);
276 virtual HRESULT STDMETHODCALLTYPE
MessageSFVCB(UINT uMsg
, WPARAM wParam
, LPARAM lParam
)
278 //DbgPrint("MessageSFVCB(uMsg:%s, wParam:%u, lParam:%u\n", msg2str(uMsg), wParam, lParam);
279 add_msg(uMsg
, wParam
, lParam
);
285 static LRESULT CALLBACK
WndProc(HWND hwnd
, UINT msg
, WPARAM wParam
, LPARAM lParam
)
287 if (msg
== WM_DESTROY
)
292 return DefWindowProc(hwnd
, msg
, wParam
, lParam
);
296 class CDummyShellBrowser
: public IShellBrowser
302 static const TCHAR
* class_name
= TEXT("DUMMY_TEST_CLASS");
304 wx
.cbSize
= sizeof(WNDCLASSEX
);
305 wx
.lpfnWndProc
= WndProc
;
306 wx
.hInstance
= GetModuleHandle(NULL
);
307 wx
.lpszClassName
= class_name
;
308 wx
.style
= CS_DBLCLKS
;
309 RegisterClassEx(&wx
);
310 m_hwnd
= CreateWindowEx(0, class_name
, TEXT("dummy_name"), WS_OVERLAPPEDWINDOW
, 0, 0, 0, 0, NULL
, NULL
, NULL
, NULL
);
311 ShowWindow(m_hwnd
, SW_SHOW
);
314 // *** IUnknown methods ***
315 virtual HRESULT STDMETHODCALLTYPE
QueryInterface(REFIID riid
, void **ppvObject
)
317 if (riid
== IID_IShellBrowser
|| riid
== IID_IUnknown
)
322 return E_NOINTERFACE
;
324 virtual ULONG STDMETHODCALLTYPE
AddRef(void)
328 virtual ULONG STDMETHODCALLTYPE
Release(void)
333 // *** IOleWindow methods ***
334 virtual HRESULT STDMETHODCALLTYPE
GetWindow(HWND
*phwnd
)
336 //DbgPrint("%s()\n", __FUNCTION__);
338 add_msg(DUM_MSG_GetWindow
, NULL
, NULL
);
341 virtual HRESULT STDMETHODCALLTYPE
ContextSensitiveHelp(BOOL fEnterMode
)
343 //DbgPrint("%s()\n", __FUNCTION__);
344 add_msg(DUM_MSG_ContextSensitiveHelp
, NULL
, NULL
);
348 // *** IShellBrowser methods ***
349 virtual HRESULT STDMETHODCALLTYPE
InsertMenusSB(HMENU hmenuShared
, LPOLEMENUGROUPWIDTHS lpMenuWidths
)
351 //DbgPrint("%s()\n", __FUNCTION__);
352 add_msg(DUM_MSG_InsertMenusSB
, NULL
, NULL
);
355 virtual HRESULT STDMETHODCALLTYPE
SetMenuSB(HMENU hmenuShared
, HOLEMENU holemenuRes
, HWND hwndActiveObject
)
357 //DbgPrint("%s()\n", __FUNCTION__);
358 add_msg(DUM_MSG_SetMenuSB
, NULL
, NULL
);
361 virtual HRESULT STDMETHODCALLTYPE
RemoveMenusSB(HMENU hmenuShared
)
363 //DbgPrint("%s()\n", __FUNCTION__);
364 add_msg(DUM_MSG_RemoveMenusSB
, NULL
, NULL
);
367 virtual HRESULT STDMETHODCALLTYPE
SetStatusTextSB(LPCWSTR pszStatusText
)
369 //DbgPrint("%s()\n", __FUNCTION__);
370 add_msg(DUM_MSG_SetStatusTextSB
, NULL
, NULL
);
373 virtual HRESULT STDMETHODCALLTYPE
EnableModelessSB(BOOL fEnable
)
375 //DbgPrint("%s()\n", __FUNCTION__);
376 add_msg(DUM_MSG_EnableModelessSB
, NULL
, NULL
);
379 virtual HRESULT STDMETHODCALLTYPE
TranslateAcceleratorSB(MSG
*pmsg
, WORD wID
)
381 //DbgPrint("%s()\n", __FUNCTION__);
382 add_msg(DUM_MSG_TranslateAcceleratorSB
, NULL
, NULL
);
385 virtual HRESULT STDMETHODCALLTYPE
BrowseObject(PCUIDLIST_RELATIVE pidl
,UINT wFlags
)
387 //DbgPrint("%s()\n", __FUNCTION__);
388 add_msg(DUM_MSG_BrowseObject
, NULL
, NULL
);
391 virtual HRESULT STDMETHODCALLTYPE
GetViewStateStream(DWORD grfMode
,IStream
**ppStrm
)
393 //DbgPrint("%s()\n", __FUNCTION__);
394 add_msg(DUM_MSG_GetViewStateStream
, NULL
, NULL
);
397 virtual HRESULT STDMETHODCALLTYPE
GetControlWindow(UINT id
,HWND
*phwnd
)
399 //DbgPrint("%s()\n", __FUNCTION__);
400 add_msg(DUM_MSG_GetControlWindow
, NULL
, NULL
);
403 virtual HRESULT STDMETHODCALLTYPE
SendControlMsg(UINT id
,UINT uMsg
,WPARAM wParam
,LPARAM lParam
,LRESULT
*pret
)
405 //DbgPrint("%s()\n", __FUNCTION__);
406 add_msg(DUM_MSG_SendControlMsg
, NULL
, NULL
);
409 virtual HRESULT STDMETHODCALLTYPE
QueryActiveShellView(IShellView
**ppshv
)
411 //DbgPrint("%s()\n", __FUNCTION__);
412 add_msg(DUM_MSG_QueryActiveShellView
, NULL
, NULL
);
415 virtual HRESULT STDMETHODCALLTYPE
OnViewWindowActive(IShellView
*pshv
)
417 //DbgPrint("%s()\n", __FUNCTION__);
418 add_msg(DUM_MSG_OnViewWindowActive
, NULL
, NULL
);
421 virtual HRESULT STDMETHODCALLTYPE
SetToolbarItems(LPTBBUTTONSB lpButtons
,UINT nButtons
,UINT uFlags
)
423 //DbgPrint("%s()\n", __FUNCTION__);
424 add_msg(DUM_MSG_SetToolbarItems
, NULL
, NULL
);
430 START_TEST(IShellFolderViewCB
)
432 RTL_OSVERSIONINFOEXW rtlinfo
= { sizeof(rtlinfo
) };
433 void (__stdcall
* pRtlGetVersion
)(RTL_OSVERSIONINFOEXW
*);
434 pRtlGetVersion
= (void (__stdcall
*)(RTL_OSVERSIONINFOEXW
*))GetProcAddress(GetModuleHandleA("ntdll"), "RtlGetVersion");
435 pRtlGetVersion(&rtlinfo
);
436 g_WinVersion
= (rtlinfo
.dwMajorVersion
<< 8) | rtlinfo
.dwMinorVersion
;
441 CComPtr
<IShellFolder
> desktop
;
443 HRESULT hr
= SHGetDesktopFolder(&desktop
);
448 SFV_CREATE sfvc
= { sizeof(sfvc
), desktop
};
450 IShellView
* psv
= NULL
;
455 hr
= SHCreateShellFolderView(&sfvc
, &psv
);
461 ok_int(g_Release
, 0);
467 FOLDERSETTINGS fs
= { FVM_DETAILS
, 0 };
468 CDummyShellBrowser dum
;
469 hr
= psv
->CreateViewWindow(NULL
, &fs
, &dum
, &rc
, &wnd
);
472 static message init_list
[] =
475 message(DUM_MSG_GetWindow
, 0, 0),
476 /* Some unknown messages here, and multiple SFVM_GET_WEBVIEW_THEME + SFVM_GETSORTDEFAULTS + SFVM_GETCOLUMNSTREAM */
477 message(SFVM_SIZE
, 0, 0),
479 message(DUM_MSG_InsertMenusSB
, 0, 0),
480 message(SFVM_MERGEMENU
, 0, PTR_VALUE
),
481 message(DUM_MSG_SetMenuSB
, 0, 0),
483 message(SFVM_WINDOWCREATED
, PTR_VALUE
, 0),
486 message(SFVM_GETBUTTONINFO
, 0, PTR_VALUE
),
487 message(SFVM_GETBUTTONS
, PTR_VALUE
, PTR_VALUE
),
488 message(DUM_MSG_SetToolbarItems
, 0, 0),
494 static message init_list_vista
[] =
496 /* Some unknown messages here */
497 message(DUM_MSG_GetWindow
, 0, 0),
498 /* Some unknown messages here, and multiple SFVM_GET_WEBVIEW_THEME + SFVM_GETSORTDEFAULTS + SFVM_GETCOLUMNSTREAM */
499 message(SFVM_SIZE
, 0, 0),
500 message(SFVM_WINDOWCREATED
, PTR_VALUE
, 0),
501 /* Some unknown messages here */
502 message(DUM_MSG_InsertMenusSB
, 0, 0),
503 message(SFVM_MERGEMENU
, 0, PTR_VALUE
),
504 message(DUM_MSG_SetMenuSB
, 0, 0),
509 if (g_WinVersion
< WINVER_VISTA
)
511 compare_list(init_list
);
515 compare_list(init_list_vista
);
520 //ok_hex(hr, S_FALSE);
522 static message refresh_list
[] =
524 message(SFVM_LISTREFRESHED
, 1, 0),
526 message(SFVM_UNMERGEFROMMENU
, 0, PTR_VALUE
),
527 message(DUM_MSG_SetMenuSB
, 0, 0),
528 message(DUM_MSG_RemoveMenusSB
, 0, 0),
529 message(DUM_MSG_InsertMenusSB
, 0, 0),
530 message(SFVM_MERGEMENU
, 0, PTR_VALUE
),
531 message(DUM_MSG_SetMenuSB
, 0, 0),
536 static message refresh_list_vista
[] =
538 message(SFVM_LISTREFRESHED
, 1, 0),
540 message(SFVM_UNMERGEFROMMENU
, 0, PTR_VALUE
),
541 message(DUM_MSG_SetMenuSB
, 0, 0),
542 message(DUM_MSG_RemoveMenusSB
, 0, 0),
543 message(DUM_MSG_InsertMenusSB
, 0, 0),
544 message(SFVM_MERGEMENU
, 0, PTR_VALUE
),
545 message(DUM_MSG_SetMenuSB
, 0, 0),
546 /* Some messages here, like SFVM_GET_WEBVIEW_THEME, SFVM_GETSORTDEFAULTS, SFVM_GETCOLUMNSTREAM */
547 message(SFVM_UNMERGEFROMMENU
, 0, PTR_VALUE
),
548 message(DUM_MSG_SetMenuSB
, 0, 0),
549 message(DUM_MSG_RemoveMenusSB
, 0, 0),
550 message(DUM_MSG_InsertMenusSB
, 0, 0),
551 message(SFVM_MERGEMENU
, 0, PTR_VALUE
),
552 message(DUM_MSG_SetMenuSB
, 0, 0),
557 if (g_WinVersion
< WINVER_VISTA
)
559 compare_list(refresh_list
);
563 compare_list(refresh_list_vista
);
567 hr
= psv
->DestroyViewWindow();
569 static message destroy_list
[] =
571 message(SFVM_UNMERGEFROMMENU
, 0, PTR_VALUE
),
572 message(DUM_MSG_SetMenuSB
, 0, 0),
573 message(DUM_MSG_RemoveMenusSB
, 0, 0),
574 message(SFVM_WINDOWCLOSING
, PTR_VALUE
, 0),
579 compare_list(destroy_list
);
582 CComPtr
<IShellFolderView
> folderView
;
583 hr
= psv
->QueryInterface(IID_PPV_ARG(IShellFolderView
, &folderView
));
587 IShellFolderViewCB
* oldPtr
;
592 hr
= folderView
->SetCallback(NULL
, &oldPtr
);
594 ok_int(g_Release
, 0);
599 /* Last pointer is not optional! */
600 IShellFolderViewCB
* oldPtr2
;
601 hr
= folderView
->SetCallback(oldPtr
, &oldPtr2
);
603 ok_int(g_Release
, 0);
607 ULONG refCount
= psv
->Release();
608 ok(refCount
== 0, "refCount = %lu\n", refCount
);
610 static message release_list
[] =
612 message(SFVM_VIEWRELEASE
, 0, 0),
617 /* Investigate why this fails */
620 compare_list(release_list
);