使用对话框窗口C++ Win32 API上的图标

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++编译器.谢谢!

K-b*_*llo 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);
Run Code Online (Sandbox Code Playgroud)

  • LoadIcon的第一个参数应该是当前实例句柄.通过调用GetModuleHandle(NULL)获取它. (2认同)

Nas*_*sim 5

我必须将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)

这是结果

win32 对话框图标

仅供参考:所使用的图标是从以下位置下载的:

http://www.iconsdb.com/orange-icons/stackoverflow-6-icon.html

希望有帮助!