簡體   English   中英

如何在SDL2 / C ++ / Visual Studio 2012 Express程序中設置窗口標題欄圖標和alt-tab圖標?

[英]How do I set window titlebar icon and alt-tab icon in SDL2 / C++ / Visual Studio 2012 express program?

我已經在我的項目中添加了一個.rc文件,其中包含以下內容:

IDI_MAIN_ICON          ICON          "..\\..\\icon_artwork\\windows_icons\\project.ico"  

.ico文件包含16x16,32x32,48x48和256x256分辨率的圖標。

我在任務欄和資源管理器中看到了圖標(因此毫無疑問.ico已成功嵌入到.exe中),但我在應用程序自己的標題欄和alt-tab中看到了默認的Windows 7應用程序圖標。

有沒有辦法讓操作系統在所有情況下都能看到嵌入式圖標,或者我是否需要為此編寫一些應用程序代碼? 我注意到有一個SDL2功能

void SDL_SetWindowIcon(SDL_Window*  window, SDL_Surface* icon)  

但這需要SDL表面,而不是可執行文件中的嵌入式圖標資源。

任何想法都感激不盡,
托尼

就目前而言,沒有。 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

您應該能夠使用.png文件獲取SDL_Surface

SDL_Surface *IMG_Load(const char *file)

然后將其傳遞給SDL_SetWindowIcon(SDL_Window* window, SDL_Surface* icon)方法。 我不認為IMG_Load(...)方法會占用.ico文件,但是你的圖標的32x32 .png版本將是一個很好的折衷...不理想,但我能想到的最好的解決方法;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM