5

我正在使用 Visual Studio 的快速版本。因此,使用函数调用 MAKEINTRESOURCE 是不可能的。我正在尝试通过覆盖 getAdditionalClassInfo 函数来设置应用程序图标。

WNDCLASSW *Robot::getAdditionalClassInfo(void) const {
    WNDCLASSW *wc = Window::getAdditionalClassInfo();
    HANDLE hIcon = LoadImage(NULL, L"imagepath/image.png", 32, 32, LR_LOADFROMFILE);

    wc->hIcon = .....;
    return wc;
}

有谁知道我如何在不使用资源的情况下设置此图标?

4

1 回答 1

3

我的建议是,如果您想使用 PNG 并能够更改图标,请使用 FreeImage 来加载它。然后,您可以使用 FreeImage 相当轻松地将其转换为标准 HBITMAP。

如果您可以使用实际的图标文件,则可以在创建窗口后执行以下操作:

HANDLE hIcon = LoadImage(0, _T("imagepath/image.ico"), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_LOADFROMFILE);
if (hIcon) {
    //Change both icons to the same icon handle.
    SendMessage(hwnd, WM_SETICON, ICON_SMALL, hIcon);
    SendMessage(hwnd, WM_SETICON, ICON_BIG, hIcon);

    //This will ensure that the application icon gets changed too.
    SendMessage(GetWindow(hwnd, GW_OWNER), WM_SETICON, ICON_SMALL, hIcon);
    SendMessage(GetWindow(hwnd, GW_OWNER), WM_SETICON, ICON_BIG, hIcon);
}

您可能会从您的内部调用类似的函数getAdditionalClassInfo并将其设置为hIcon.

于 2013-08-19T14:00:24.600 回答