我已经在我的项目中添加了一个.rc文件,其中包含以下内容:
IDI_MAIN_ICON ICON "..\\..\\icon_artwork\\windows_icons\\project.ico"
.ico文件包含16x16,32x32,48x48和256x256分辨率的图标。
我在任务栏和资源管理器中看到了图标(因此毫无疑问.ico已成功嵌入到.exe中),但我在应用程序自己的标题栏中看到了默认的Windows 7应用程序图标,并在alt-标签
有没有办法让操作系统在所有情况下都能看到嵌入式图标,或者我是否需要为此编写一些应用程序代码?我注意到有SDL2功能
void SDL_SetWindowIcon(SDL_Window* window, SDL_Surface* icon)
但这需要SDL表面,而不是可执行文件中的嵌入式图标资源。
感激地收到任何想法,
贝
答案 0 :(得分:5)
现在看来,没有。 SDL出于某种原因吃掉了实际应用程序窗口的图标。但是,您可以使用WINDOWS特定代码来解决此问题。请记住,这不是便携式的。
#if defined(_WIN32) && defined(GCL_HICON)
void setWindowsIcon(SDL_Window *sdlWindow) {
HINSTANCE handle = ::GetModuleHandle(nullptr);
HICON icon = ::LoadIcon(handle, "IDI_MAIN_ICON");
if(icon != nullptr){
SDL_SysWMinfo wminfo;
SDL_VERSION(&wminfo.version);
if(SDL_GetWindowWMInfo(sdlWindow,&wminfo) == 1){
HWND hwnd = wminfo.info.win.window;
::SetClassLong(hwnd, GCL_HICON, reinterpret_cast<LONG>(icon));
}
}
}
#endif
答案 1 :(得分:3)
你应该可以使用
从.png文件中获取SDL_SurfaceSDL_Surface *IMG_Load(const char *file)
然后将其传递给您的SDL_SetWindowIcon(SDL_Window* window, SDL_Surface* icon)
方法。
我不认为IMG_Load(...)
方法会占用.ico文件,但是你的图标的32x32 .png版本将是一个很好的妥协......
不理想,但我能想到的最好的解决方法;)