如何在VC++中将HICON转成HBITMAP?
我知道这是一个常见问题解答,但我在 Google 上找到的所有解决方案都不起作用。我需要的是一个接受参数 HICON 并返回 HBITMAP 的函数。
即使图标是 24 位、16 位或 8 位,也尽可能转换为 32 位位图。
这是代码,我不知道哪里错了:
HBITMAP icon_to_bitmap(HICON Icon_Handle) {
HDC Screen_Handle = GetDC(NULL);
HDC Device_Handle = CreateCompatibleDC(Screen_Handle);
HBITMAP Bitmap_Handle =
CreateCompatibleBitmap(Device_Handle,GetSystemMetrics(SM_CXICON),
GetSystemMetrics(SM_CYICON));
HBITMAP Old_Bitmap = (HBITMAP)SelectObject(Device_Handle,Bitmap_Handle);
DrawIcon(Device_Handle, 0,0, Icon_Handle);
SelectObject(Device_Handle,Old_Bitmap);
DeleteDC(Device_Handle);
ReleaseDC(NULL,Screen_Handle);
return Bitmap_Handle;
}
最佳答案
这段代码做到了:
HICON hIcon = (HICON)LoadImage(instance, MAKEINTRESOURCEW(IDI_ICON), IMAGE_ICON, width, height, 0);
ICONINFO iconinfo;
GetIconInfo(hIcon, &iconinfo);
HBITMAP hBitmap = iconinfo.hbmColor;
这是 *.rc 文件中的代码:
IDI_ICON ICON "example.ico"
这是 *.h 文件中的代码:
#define IDI_ICON 4000
关于c++ - 如何在 VC++ 中将 HICON 转换为 HBITMAP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7375003/