Проблема с SHBrowseForFolder

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: Проблема с SHBrowseForFolder

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;
}

Проблема с SHBrowseForFolder

Romeo » 04 окт 2004, 19:29

Мне требуется чтобы я давал SHBrowseForFolder'у строчку, содержащуй путь, и при открытии диалога дерево каталогов раскрывалось и соответствующая директория выделялась. Почитал в MSDN: это можно сделать с помощью механизма callback. Функция которую я пихаю этому хитрому shell'у выглядит следующим образом:

Код: Выделить всё

int CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
	if (uMsg == BFFM_INITIALIZED)
	{
		LPCOLESTR strPath = (LPCOLESTR)lpData;
		::SendMessage(hwnd, BFFM_SETSELECTION, TRUE, (LPARAM)strPath);
	}
	return 0;
}
Но, как вы уже наверное догадались - ничего не работает. Может кто сталкивался с такой проблемой. Подскажите.

Вернуться к началу