Mainframe-Icon zur Laufzeit ändern



  • Hallo Forenspezis,

    ich möchte das Haupticon meiner Anwendung gerne variabel halten.
    Soll bedeuten das Icon im Windowsexplorer, dass zu meiner Exe
    gehört soll aus dem Programm raus frei wählbar sein.

    Muss ich dazu selbst die Icons mitliefern, bzw. kann ich dem
    Nutzer die Freiheit lassen selbst Bilddateien wählen zu lassen?

    Noch viel wichtiger - und die eigentliche Frage:
    Wie mache ich das? Innerhalb der Anwendung bekomme ich das hin,
    aber eben nicht für die Anzeige im Windowsexplorer (z.B. für die
    Miniaturansicht etc.).

    Grüßle aus Stuttgart
    Eddy



  • Hilfe 😕 Ich google mir den Wolf und hab keine Idee
    wie ich jetzt auch nur einen Schritt weiter komme.



  • Ich vermute, das ist ein Registryeintrag. 🙂



  • Habe mal in diese Richtung gesucht, bin aber leider nicht fündig geworden.



  • Hmm... also mit mehreren Icons als Resource solltest de zumindest hinbekommen das der User mehrer Icons zur Auswahl hat... dann würde ich mir am ehesten mal kurz ne kleine App schreiben die mehrere Icons zur Auswahl hat... dann das Icon im Explorer ändern. So... [Win]+[r] => regedit => Suche: "ProgrammName..." und sehen was kommt 😉



  • Wo soll da in der Registry ein Eintrag für das zu verwendende Programmicon
    sein? Afaik soll das doch durch die Anwendung bereitgestellt werden und nicht
    durch irgendeinen Registrykey??! Wenn ich meine Exe irgendwo auf nem PC ablege
    wird auch nicht von Zauberhand ein Verweis auf ein urplötzlich anderes Icon
    gesetzt!

    Das muss schon programmtechnisch passieren. Soviel ist sicher. Aber hier war
    ja auch genau die Frage des "Wie?"



  • void C...Dlg::OnButton1() 
    {
      m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON1); // Neues Icon	
    //m_hIcon = AfxGetApp()->LoadStandardIcon(IDI_ERROR); // Neues Standard-Icon	
      SetIcon(m_hIcon, TRUE);  // Großes Symbol verwenden
      SetIcon(m_hIcon, FALSE); // Kleines Symbol verwenden
    }
    

    Damit sollte man das IDR_MAINFRAME zumindest zur Laufzeit ändern können.

    Ansonsten zu:

    ::SHGetFileInfo("C:\\WINDOWS\\NOTEPAD.EXE", 0UL, &FileInfo,sizeof(FileInfo),SHGFI_ICON);
    

    siehe: http://www.cpp-tutor.de/mfc/mfc/kap7/lektion2.htm


Anmelden zum Antworten