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

时间:2011-09-14 03:07:50

标签: c++ winapi api dialog icons

我正在尝试创建一个顶部带有图标的对话框。

icon dialog

我正在使用资源文件来加载图标。

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

3 个答案:

答案 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;

这是结果

win32 Dialog icon

仅供参考:使用过的图标是从以下网址下载的:

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);