Romeo » 04 окт 2004, 20:33
Всё, тревога отменяется. Проблему решил. Почему-то этот shell широкую строку не кушает (хотя в MSDN сказано обратное), а вот PIDL - за милую душу слопал
Код: Выделить всё
int CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
if (uMsg == BFFM_INITIALIZED)
{
LPCOLESTR strPath = (LPCOLESTR)lpData;
CComPtr<IShellFolder> spDesktopFolder;
::SHGetDesktopFolder(&spDesktopFolder);
LPITEMIDLIST lpItemIDList;
HRESULT hr = spDesktopFolder->ParseDisplayName(NULL, NULL, const_cast<LPOLESTR>(strPath), NULL, &lpItemIDList, NULL);
if (FAILED(hr))
{
return 0;
}
::SendMessage(hwnd, BFFM_SETEXPANDED, FALSE, (LPARAM)lpItemIDList);
::SendMessage(hwnd, BFFM_SETSELECTION, FALSE, (LPARAM)lpItemIDList);
IMallocPtr spMalloc;
::SHGetMalloc(&spMalloc);
spMalloc->Free(lpItemIDList);
}
return 0;
}
Всё, тревога отменяется. Проблему решил. Почему-то этот shell широкую строку не кушает (хотя в MSDN сказано обратное), а вот PIDL - за милую душу слопал :)
[code]
int CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
if (uMsg == BFFM_INITIALIZED)
{
LPCOLESTR strPath = (LPCOLESTR)lpData;
CComPtr<IShellFolder> spDesktopFolder;
::SHGetDesktopFolder(&spDesktopFolder);
LPITEMIDLIST lpItemIDList;
HRESULT hr = spDesktopFolder->ParseDisplayName(NULL, NULL, const_cast<LPOLESTR>(strPath), NULL, &lpItemIDList, NULL);
if (FAILED(hr))
{
return 0;
}
::SendMessage(hwnd, BFFM_SETEXPANDED, FALSE, (LPARAM)lpItemIDList);
::SendMessage(hwnd, BFFM_SETSELECTION, FALSE, (LPARAM)lpItemIDList);
IMallocPtr spMalloc;
::SHGetMalloc(&spMalloc);
spMalloc->Free(lpItemIDList);
}
return 0;
}
[/code]