Aric Stewart : shell32: Implement SHCreateShellFolderView (ordinal 256).
Alexandre Julliard
julliard at winehq.org
Fri Jun 26 09:47:11 CDT 2009
Module: wine
Branch: master
Commit: a6c81e07548aec5777a2a53fbd4c7dca4cec4ba5
URL: http://source.winehq.org/git/wine.git/?a=commit;h=a6c81e07548aec5777a2a53fbd4c7dca4cec4ba5
Author: Aric Stewart <aric at codeweavers.com>
Date: Fri Jun 26 17:01:29 2009 +0900
shell32: Implement SHCreateShellFolderView (ordinal 256).
Used by IE7's Add On management dialog.
---
dlls/shell32/shell32.spec | 2 +-
dlls/shell32/shellord.c | 60 ++++++++++++++++++++++++--------------------
include/shlobj.h | 35 ++++++++++++++++++++++++++
3 files changed, 69 insertions(+), 28 deletions(-)
diff --git a/dlls/shell32/shell32.spec b/dlls/shell32/shell32.spec
index b50890b..433ed3a 100644
--- a/dlls/shell32/shell32.spec
+++ b/dlls/shell32/shell32.spec
@@ -210,7 +210,7 @@
249 stdcall -noname PathParseIconLocation(ptr) PathParseIconLocationAW
250 stdcall -noname PathRemoveExtension(ptr) PathRemoveExtensionAW
251 stdcall -noname PathRemoveArgs(ptr) PathRemoveArgsAW
- 256 stdcall @(ptr ptr) SHELL32_256
+ 256 stdcall SHCreateShellFolderView(ptr ptr)
258 stdcall -noname LinkWindow_RegisterClass()
259 stdcall -noname LinkWindow_UnregisterClass()
#299 stub Shl1632_ThunkData32
diff --git a/dlls/shell32/shellord.c b/dlls/shell32/shellord.c
index 2fef940..44c9c7e 100644
--- a/dlls/shell32/shellord.c
+++ b/dlls/shell32/shellord.c
@@ -1893,33 +1893,6 @@ HRESULT WINAPI SHCreateStdEnumFmtEtc(
return hRes;
}
-
-/*************************************************************************
- * SHELL32_256 (SHELL32.256)
- */
-HRESULT WINAPI SHELL32_256(LPDWORD lpdw0, LPDWORD lpdw1)
-{
- HRESULT ret = S_OK;
-
- FIXME("stub %p 0x%08x %p\n", lpdw0, lpdw0 ? *lpdw0 : 0, lpdw1);
-
- if (!lpdw0 || *lpdw0 != 0x10)
- ret = E_INVALIDARG;
- else
- {
- LPVOID lpdata = 0;/*LocalAlloc(LMEM_ZEROINIT, 0x4E4);*/
-
- if (!lpdata)
- ret = E_OUTOFMEMORY;
- else
- {
- /* Initialize and return unknown lpdata structure */
- }
- }
-
- return ret;
-}
-
/*************************************************************************
* SHFindFiles (SHELL32.90)
*/
@@ -2140,3 +2113,36 @@ HRESULT WINAPI SHGetImageList(int iImageList, REFIID riid, void **ppv)
FIXME("STUB: %i %s\n",iImageList,debugstr_guid(riid));
return E_NOINTERFACE;
}
+
+/*************************************************************************
+ * SHCreateShellFolderView [SHELL32.256]
+ *
+ * Create a new instance of the default Shell folder view object.
+ *
+ * RETURNS
+ * Success: S_OK
+ * Failure: error value
+ *
+ * NOTES
+ * see IShellFolder::CreateViewObject
+ */
+HRESULT WINAPI SHCreateShellFolderView(const SFV_CREATE *pcsfv,
+ IShellView **ppsv)
+{
+ IShellView * psf;
+ HRESULT hRes;
+
+ TRACE("sf=%p outer=%p callback=%p\n",
+ pcsfv->pshf, pcsfv->psvOuter, pcsfv->psfvcb);
+
+ psf = IShellView_Constructor(pcsfv->pshf);
+
+ if (!psf)
+ return E_OUTOFMEMORY;
+
+ IShellView_AddRef(psf);
+ hRes = IShellView_QueryInterface(psf, &IID_IShellView, (LPVOID *)ppsv);
+ IShellView_Release(psf);
+
+ return hRes;
+}
diff --git a/include/shlobj.h b/include/shlobj.h
index 01f8368..c24c29c 100644
--- a/include/shlobj.h
+++ b/include/shlobj.h
@@ -514,6 +514,31 @@ DECLARE_INTERFACE_(IACList2,IACList)
#define IACList2_SetOptions(p,a) (p)->lpVtbl->SetOptions(p,a)
#endif
+/****************************************************************************
+ * IShellFolderViewCB interface
+ */
+
+#define INTERFACE IShellFolderViewCB
+DECLARE_INTERFACE_(IShellFolderViewCB,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IShellFolderViewCB methods ***/
+ STDMETHOD(MessageSFVCB)(THIS_ UINT uMsg, WPARAM wParam, LPARAM lParam) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IShellFolderViewCB_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IShellFolderViewCB_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IShellFolderViewCB_Release(p) (p)->lpVtbl->Release(p)
+/*** IShellFolderViewCB methods ***/
+#define IShellFolderViewCB_MessageSFVCB(p,a,b,c) (p)->lpVtbl->MessageSFVCB(p,a,b,c)
+#endif
+
/* IProgressDialog interface */
#define PROGDLG_NORMAL 0x00000000
#define PROGDLG_MODAL 0x00000001
@@ -737,6 +762,16 @@ HRESULT WINAPI SHCreateShellFolderViewEx(LPCSFV pshfvi, IShellView **ppshv);
#define SFVM_GET_WEBVIEW_THEME 86 /* undocumented */
#define SFVM_GETDEFERREDVIEWSETTINGS 92 /* undocumented */
+typedef struct _SFV_CREATE
+{
+ UINT cbSize;
+ IShellFolder *pshf;
+ IShellView *psvOuter;
+ IShellFolderViewCB *psfvcb;
+} SFV_CREATE;
+
+HRESULT WINAPI SHCreateShellFolderView(const SFV_CREATE *pscfv, IShellView **ppsv);
+
/* Types and definitions for the SFM_* parameters */
#include <pshpack8.h>
More information about the wine-cvs
mailing list