5

次のように .rc ファイルをプロジェクトに追加しました。

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

.ico ファイルには、16x16、32x32、48x48、および 256x256 の解像度のアイコンが含まれています。

タスクバーとエクスプローラーにアイコンが表示されます (したがって、.ico が .exe に正常に埋め込まれていることは間違いありません) が、アプリケーション自体のタイトル バーと alt-tab に既定の Windows 7 アプリケーション アイコンが表示されます。

すべての場合に埋め込まれたアイコンを OS に表示させる方法はありますか、それともアプリケーション コードを記述する必要がありますか? SDL2関数があることに気づきました

void SDL_SetWindowIcon(SDL_Window*  window, SDL_Surface* icon)  

ただし、実行可能ファイルから埋め込まれたアイコン リソースではなく、SDL サーフェスを使用します。

喜んで受け取ったアイデア、
トニー

4

2 に答える 2

7

現状では、いいえ。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
于 2014-11-14T05:04:40.537 に答える
4

を使用して.pngファイルからSDL_Surfaceを取得できるはずです

SDL_Surface *IMG_Load(const char *file)

次に、それをメソッドに渡しますSDL_SetWindowIcon(SDL_Window* window, SDL_Surface* icon)。ただし、この方法で .ico ファイルが必要になるとは思いませんIMG_Load(...)が、アイコンの 32x32 .png バージョンは適切な妥協点です...理想的ではありませんが、私が考えることができる最善の回避策です ;)

于 2013-10-12T15:51:11.257 に答える