我正在尝试创建一个顶部带有图标的对话框。
我正在使用资源文件来加载图标。
IDI_ICON1 ICON ".\\usb.ico"
我尝试使用以下代码设置窗口图标。
SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LPARAM)IDI_ICON1);
SendMessage(hwnd, WM_SETICON, ICON_BIG, (LPARAM)IDI_ICON1);
hwnd是窗口。结果,我得到一个蓝色圆圈,看起来就像是Windows 7和Vista的加载图标。我几乎肯定正在正确加载图标,因为当我查看任务栏时,我的程序有代表我程序的图标。如果你需要我用于对话窗口的代码,请告诉我我会发布它。我在Windows 7上使用mingw32 C ++编译器。谢谢!
答案 0 :(得分:5)
使用LoadIcon并将图标句柄传递给WM_SETICON。
HICON hicon = LoadImageW(GetModuleHandleW(NULL), MAKEINTRESOURCEW(IDI_ICONMAIN), IMAGE_ICON, 0, 0, LR_DEFAULTCOLOR | LR_DEFAULTSIZE);
SendMessageW(hwnd, WM_SETICON, ICON_BIG, hicon);
答案 1 :(得分:0)
我必须将LoadImageW()
的返回值转换为HICON
,以避免错误:
" 类型" HANDLE"无法分配给实体 类型" HICON" ...."
这对我有用:
....
//hDlg is the handle to my dialog window
case WM_INITDIALOG:
{
HICON hIcon;
hIcon = (HICON)LoadImageW(GetModuleHandleW(NULL),
MAKEINTRESOURCEW(IDI_ICON1),
IMAGE_ICON,
GetSystemMetrics(SM_CXSMICON),
GetSystemMetrics(SM_CYSMICON),
0);
if (hIcon)
{
SendMessage(hDlg, WM_SETICON, ICON_SMALL, (LPARAM)hIcon);
}
}
break;
这是结果
仅供参考:使用过的图标是从以下网址下载的:
http://www.iconsdb.com/orange-icons/stackoverflow-6-icon.html
希望有所帮助!
答案 2 :(得分:0)
即使已经三年了。我想为此添加另一种解决方案。我已经在Visual Studio 2017上尝试过这个。
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
SendMessage(WM_SETICON, ICON_BIG, (LPARAM)m_hIcon);