从图标处理程序 shell 扩展中的资源加载位图图标
Loading a bitmap icon from resources in an icon handler shell extension
我需要从 IExtractIcon::Extract
中的资源加载 .bmp
图标,但我不知道为什么它不起作用。我总是在图标应该出现的位置出现黑色或白色矩形。
我在项目资源 .rc
文件中声明了两个图标:ICON_16_BITMAP
和 ICON_BITMAP
。绝对应该加载图标,因为它们在 LoadImageW
.
之后不为空
// IExtractIcon
HRESULT icon_handler::GetIconLocation(UINT u_flags, PWSTR psz_icon_file, UINT cch_max, int* pi_index, UINT* pw_flags)
{
*pw_flags = GIL_NOTFILENAME | GIL_DONTCACHE;
return S_OK;
}
extern HINSTANCE global_h_instance;
HRESULT icon_handler::Extract(PCWSTR psz_file, UINT n_icon_index, HICON* phicon_large, HICON* phicon_small, UINT n_icon_size)
{
const int small_size = HIWORD(n_icon_size);
const int large_size = LOWORD(n_icon_size);
if (phicon_large != nullptr)
{
OutputDebugStringW((L"Extract large icon: " + std::to_wstring(large_size)).c_str());
*phicon_large = HICON(LoadImageW(global_h_instance, MAKEINTRESOURCE(ICON_BITMAP), IMAGE_BITMAP, large_size, large_size,
LR_SHARED));
}
if (phicon_small != nullptr)
{
OutputDebugStringW((L"Extract small icon: " + std::to_wstring(small_size)).c_str());
*phicon_small = HICON(LoadImageW(global_h_instance, MAKEINTRESOURCE(ICON_16_BITMAP), IMAGE_BITMAP, small_size, small_size,
LR_SHARED));
}
return S_OK;
}
我试过很多教程,但这看起来很简单,但到目前为止还没有成功。有什么突出的地方可能是图标不起作用的原因吗?
BMP 与图标格式不同。
It cannot be forced to convert with HICON.
最简单的方法是通过图片转换工具将BMP文件转换成图标文件,然后加载到资源中。
我需要从 IExtractIcon::Extract
中的资源加载 .bmp
图标,但我不知道为什么它不起作用。我总是在图标应该出现的位置出现黑色或白色矩形。
我在项目资源 .rc
文件中声明了两个图标:ICON_16_BITMAP
和 ICON_BITMAP
。绝对应该加载图标,因为它们在 LoadImageW
.
// IExtractIcon
HRESULT icon_handler::GetIconLocation(UINT u_flags, PWSTR psz_icon_file, UINT cch_max, int* pi_index, UINT* pw_flags)
{
*pw_flags = GIL_NOTFILENAME | GIL_DONTCACHE;
return S_OK;
}
extern HINSTANCE global_h_instance;
HRESULT icon_handler::Extract(PCWSTR psz_file, UINT n_icon_index, HICON* phicon_large, HICON* phicon_small, UINT n_icon_size)
{
const int small_size = HIWORD(n_icon_size);
const int large_size = LOWORD(n_icon_size);
if (phicon_large != nullptr)
{
OutputDebugStringW((L"Extract large icon: " + std::to_wstring(large_size)).c_str());
*phicon_large = HICON(LoadImageW(global_h_instance, MAKEINTRESOURCE(ICON_BITMAP), IMAGE_BITMAP, large_size, large_size,
LR_SHARED));
}
if (phicon_small != nullptr)
{
OutputDebugStringW((L"Extract small icon: " + std::to_wstring(small_size)).c_str());
*phicon_small = HICON(LoadImageW(global_h_instance, MAKEINTRESOURCE(ICON_16_BITMAP), IMAGE_BITMAP, small_size, small_size,
LR_SHARED));
}
return S_OK;
}
我试过很多教程,但这看起来很简单,但到目前为止还没有成功。有什么突出的地方可能是图标不起作用的原因吗?
BMP 与图标格式不同。
It cannot be forced to convert with HICON.
最简单的方法是通过图片转换工具将BMP文件转换成图标文件,然后加载到资源中。