Ton*_*ark 4 c++ icons sdl visual-studio-2012
我已经将.rc文件添加到我的项目中,仅包含以下内容:
IDI_MAIN_ICON ICON "..\\..\\icon_artwork\\windows_icons\\project.ico"
Run Code Online (Sandbox Code Playgroud)
.ico文件包含分辨率为16x16、32x32、48x48和256x256的图标。
我在任务栏和资源管理器中看到了该图标(因此,毫无疑问.ico已成功嵌入到.exe中),但是我在该应用程序自己的标题栏中和alt-tab中看到了默认的Windows 7应用程序图标。
是否有办法让OS在所有情况下都能单独查看嵌入式图标,还是需要为此编写一些应用程序代码?我注意到有一个SDL2功能
void SDL_SetWindowIcon(SDL_Window* window, SDL_Surface* icon)
Run Code Online (Sandbox Code Playgroud)
但这需要SDL表面,而不是可执行文件中的嵌入式图标资源。
谢谢任何想法,
托尼
您应该能够使用以下方法从 .png 文件获取 SDL_Surface:
SDL_Surface *IMG_Load(const char *file)
Run Code Online (Sandbox Code Playgroud)
然后将其传递给您的SDL_SetWindowIcon(SDL_Window* window, SDL_Surface* icon)方法。我认为该IMG_Load(...)方法不需要 .ico 文件,但 32x32 .png 版本的图标应该可以工作。
就目前而言,没有。由于某种原因,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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4221 次 |
| 最近记录: |