C 如何获取带有预览的文件夹图标?
我想得到一个像这样的文件夹图标 但事实上我把它做成了这个样子 我的实施:C 如何获取带有预览的文件夹图标?,c,winapi,icons,C,Winapi,Icons,我想得到一个像这样的文件夹图标 但事实上我把它做成了这个样子 我的实施: HICON GetSystemIcon(IShellFolder* folder, PCIDLIST_ABSOLUTE idpl) { IExtractIcon* extract_icon; folder->GetUIObjectOf(NULL, 1, &idpl, IID_IExtractIcon, NULL, (void**)&extract_icon); wchar_t icon
HICON GetSystemIcon(IShellFolder* folder, PCIDLIST_ABSOLUTE idpl) {
IExtractIcon* extract_icon;
folder->GetUIObjectOf(NULL, 1, &idpl, IID_IExtractIcon, NULL, (void**)&extract_icon);
wchar_t icon_file[MAX_PATH] = {0};
int icon_index = 0;
UINT flag = GIL_SIMULATEDOC;
extract_icon->GetIconLocation(GIL_FORSHELL, icon_file, MAX_PATH, &icon_index, &flag);
HICON small_icon = NULL;
HICON large_icon = NULL;
UINT size = MAKELONG(32, 32);
extract_icon->Extract(icon_file, icon_index, &large_icon, &small_icon, size);
}
我应该如何更改它?这是一个官方示例,您可以使用或参考:“。它演示了如何使用IShellItemImageFactory接口为项目获取最佳图像 并确保您的文件夹与您在“文件资源管理器”中所期望的完全相同 这是我的目标文件夹: 这是我使用示例得到的结果: 核心相关代码行:
HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
if (SUCCEEDED(hr))
{
// Getting the IShellItemImageFactory interface pointer for the file.
IShellItemImageFactory *pImageFactory;
hr = SHCreateItemFromParsingName(argv[2], NULL, IID_PPV_ARGS(&pImageFactory));
if (SUCCEEDED(hr))
{
SIZE size = { nSize, nSize };
//sz - Size of the image, SIIGBF_BIGGERSIZEOK - GetImage will stretch down the bitmap (preserving aspect ratio)
HBITMAP hbmp;
hr = pImageFactory->GetImage(size, SIIGBF_BIGGERSIZEOK, &hbmp);
if (SUCCEEDED(hr))
{
DialogBoxParamW(NULL, MAKEINTRESOURCEW(IDD_DIALOG1), NULL, DialogProc, (LPARAM)hbmp);
DeleteObject(hbmp);
}
else
{
pwszError = L"IShellItemImageFactory::GetImage failed with error code %x";
}
pImageFactory->Release();
}
else
{
pwszError = L"SHCreateItemFromParsingName failed with error %x";
}
CoUninitialize();
}
您只提取图标。您要设置图标。看看你想要的界面。GIL_SIMULATEDOC是文件,不是文件夹。谢谢,我想这应该是我想要的效果。