我試圖在Windows中給出該文件的完整路徑的高分辨率圖標或縮略圖。不要需要是一個縮略圖 - 一個好看的圖標將是偉大的。我不在乎它是HICON
還是HBITMAP
:我將它放在GDI +對象中並將其呈現到設備上下文中。提取文件的高分辨率圖標或縮略圖
我試過使用SHGetFileInfo
(在標誌上有各種變化),但從來沒有超過〜32x32的圖標返回,這可怕地縮放到128像素或我需要的。
if (!SHGetFileInfoW(path, 0, &fi, sizeof(fi),
SHGFI_ICON | SHGFI_ICONLARGE | SHGFI_TYPENAME))
return GetLastError();
// fi.hIcon is a valid icon here, but it's horrible quality with
// a black mask on it. I want higher quality, and dare I dream of
// alpha channel? Mask is acceptable, i suppose.
SHGetFileInfo
返回時我與SHGFI_ICONLOCATION
調用(這似乎是一個已知的問題與該API)""
。
我也嘗試使用SHCreateItemFromParsingName
名稱與得到IThumbnailProvider
的意圖,但BindToHandler
總是返回E_NOTIMPL
爲BHID_ThumbnailHandler
...
IShellItem *psi;
hr = SHCreateItemFromParsingName(path, NULL, IID_PPV_ARGS(&psi));
if (SUCCEEDED(hr))
{
IThumbnailProvider *pThumbProvider;
hr = psi->BindToHandler(NULL, BHID_ThumbnailHandler,
IID_PPV_ARGS(&pThumbProvider));
if (SUCCEEDED(hr))
{
// never get here because hr == E_NOTIMPL !!!
其實我已經運行微軟Thumbnail Providers Sample,發現它患有與BindToInterface
相同的問題。
那麼,我還有什麼可以嘗試的建議嗎?我只是想要一些圖片-y,或多或少代表這個文件,比如至少100px的大小 - 只是比32x32更好...
如果自定義文件的開發人員只提供32x32圖標會怎麼樣?你從哪裏得到更大的圖像?想想這個。 – Apokal 2012-08-07 09:02:26
謝謝@Apokal,無論我能得到什麼,我都很開心。如果一個應用程序只有小圖標,我會採取的,但我知道有像文本文件,辦公文檔等東西非常大的圖標。我想盡我所能爲那些... – MarcWan 2012-08-09 04:36:05