
Hi Sujay,
It is likely too late for you but the solution I found might help somebody else. The following code allows you to make Windows Explorer on Windows 7 use the good old SysListView32 control rather than DirectUIHWND. This fixed my compatibility problem. In a nutshell, it uses the new Windows 7 interface IFolderViewOptions to enable the option FVO_VISTALAYOUT. You need to compile with version 7.0 of the SDK to do this.
void RevertExplorerToListView(
HWND explorerHandle)
{
IShellWindows *shellWindow;
if (SUCCEEDED(CoCreateInstance(CLSID_ShellWindows,
NULL,
CLSCTX_ALL,
IID_IShellWindows,
reinterpret_cast<void**>(&shellWindow))))
{
VARIANT v;
V_VT(&v) = VT_I4;
IDispatch *dispatch;
BOOL found = FALSE;
for (V_I4(&v) = 0 ; !found && shellWindow->Item(v, &dispatch) == S_OK ;
V_I4(&v)++)
{
IWebBrowserApp *browserApp;
if (SUCCEEDED(dispatch->QueryInterface(IID_IWebBrowserApp,
reinterpret_cast<void**>(&browserApp))))
{
HWND appHandle;
if (SUCCEEDED(browserApp->get_HWND(reinterpret_cast<LONG_PTR*>(&appHandle))) &&
appHandle == explorerHandle)
{
found = TRUE;
IServiceProvider *provider;
if (SUCCEEDED(browserApp->QueryInterface(IID_IServiceProvider,
reinterpret_cast<void**>(&provider))))
{
IShellBrowser *browser;
if (SUCCEEDED(provider->QueryService(SID_STopLevelBrowser,
IID_IShellBrowser,
reinterpret_cast<void**>(&browser))))
{
IFolderViewOptions *options;
if (SUCCEEDED(browser->QueryInterface(IID_IFolderViewOptions,
reinterpret_cast<void**>(&options))))
{
if (FAILED(options->SetFolderViewOptions(FVO_VISTALAYOUT,
FVO_VISTALAYOUT)))
{
TRACE("SetFolderViewOptions failed");
}
options->Release();
}
browser->Release();
}
provider->Release();
}
}
browserApp->Release();
}
}
shellWindow->Release();
}
}
Nathalie