名前空間拡張の仮想ファイルにアイコンを追加しようとしています。ファイルは.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。 –