【问题标题】:Using an icon on a dialog box window C++ Win32 API在对话框窗口上使用图标 C++ Win32 API
【发布时间】:2011-11-16 16:08:42
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ winapi api dialog icons


    【解决方案1】:

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

    【讨论】:

    • 我尝试过HICON t = LoadIcon(NULL, MAKEINTRESOURCE(IDI_ICON1)); SendMessage(hwnd, WM_SETICON, ICON_BIG, (LPARAM)t);,但运气不佳。我不知道我的代码离正确还有多远。
    • LoadIcon 的第一个参数应该是当前实例句柄。通过调用 GetModuleHandle( NULL ) 来获取它。
    【解决方案2】:

    我不得不将 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

    希望有帮助!

    【讨论】:

      【解决方案3】:

      虽然是三年。我想为此添加另一个解决方案。我在 Visual Studio 2017 上试过这个。

      m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); SendMessage(WM_SETICON, ICON_BIG, (LPARAM)m_hIcon);

      【讨论】:

        猜你喜欢
        • 2012-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多