llk*_*llk 5 c++ api winapi icons dialog
我正在尝试创建一个顶部带有图标的对话框.

我正在使用资源文件来加载图标.
IDI_ICON1 ICON ".\\usb.ico"
Run Code Online (Sandbox Code Playgroud)
我尝试使用以下代码设置窗口图标.
SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LPARAM)IDI_ICON1);
SendMessage(hwnd, WM_SETICON, ICON_BIG, (LPARAM)IDI_ICON1);
Run Code Online (Sandbox Code Playgroud)
hwnd是窗口.结果,我得到一个蓝色圆圈,看起来就像是Windows 7和Vista的加载图标.我几乎肯定正在正确加载图标,因为当我查看任务栏时,我的程序有代表我程序的图标.如果你需要我用于对话窗口的代码,请告诉我我会发布它.我在Windows 7上使用mingw32 C++编译器.谢谢!
使用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);
Run Code Online (Sandbox Code Playgroud)
我必须将LoadImageW()to的返回值转换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;
Run Code Online (Sandbox Code Playgroud)
这是结果
仅供参考:所使用的图标是从以下位置下载的:
http://www.iconsdb.com/orange-icons/stackoverflow-6-icon.html
希望有帮助!