네임 스페이스 확장의 가상 파일에 아이콘을 추가하려고합니다. 파일은 .docx, .pdf 및 기타 Windows 이외의 기본 확장명이지만이 작업을 수행하는 방법은 분명하지 않습니다. IDefaultExtractIconInit::SetNormalIcon(LPCWSTR pszFile, int iIcon)은 아이콘 및 아이콘 ID에 대한 파일 경로를 허용합니다. SHGetFileInfo를 호출하여 아이콘 경로 및 인덱스를 가져 오지 못하면 경로를 반환하지 못하고 성공을 반환합니다. SHGetFileInfo는 올바른 아이콘 인덱스를 시스템 아이콘 캐시에 반환하고 사용하고 싶습니다. 그러나 해당 인덱스를 SetNormalIcon (NULL, idx)에 전달하면 올바른 아이콘을 설정할 수 없습니다. 파일 아이콘은 어떻게 설정합니까?네임 스페이스 확장에서 아이콘을 가상 파일로 설정하는 방법은 무엇입니까?
STDMETHODIMP CShellFolder::GetUIObjectOf(HWND hwndOwner, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, REFIID riid, UINT *rgfReserved, void **ppv) {
*ppv = NULL;
HRESULT hr = E_NOTIMPL;
if (IID_IExtractIcon == riid) {
IDefaultExtractIconInit *pdxi = NULL;
hr = SHCreateDefaultExtractIcon(IID_PPV_ARGS(&pdxi));
if (SUCCEEDED(hr)) {
BOOL isFolder = FALSE;
hr = m_pPidlMgr->IsFolder(apidl[0], &isFolder);
if(SUCCEEDED(hr)) {
pdxi->SetFlags(GIL_FORSHELL);
hr = pdxi->SetNormalIcon(L"Shell32.dll", isFolder ? 4 : 1);
if (SUCCEEDED(hr))
hr = pdxi->QueryInterface(riid, ppv);
}
pdxi->Release();
}
}
return hr;
}
쉽게 파일 시스템'IShellFolder' + 단순한 pidl에'IExtractIcon'을 위임하는 것이 더 쉽습니다. –
전문 지식을 공유해 주셔서 감사합니다, Raymond. –