ICONs fressen sich irgendwie fest


  • Mod

    Mir ist nicht klar ob Du das zur Laufzeit meinst oder grundsätzlich zwischen zwei Programm aufrufen.

    Zur Laufzeit nützt das nachträgliche ändern der DLL nichts mehr. Denn wenn LoadIcon/LoadImage ausgeführt wurde liegen die Icon Daten in interne Form vor. Die DLL wird dann nicht mehr benötigt.
    Dann müssen alle stellen in denen Icon Handles weitergegeben werden auch über die Änderung informiert werden.

    Da das Tray dynamisch ist, kann ich mir also nicht vorstellen, das dies über die Laufzeit hinweg gecached wird.

    Das der Explorer einen Icon Cache hat und der Desktop auch ist bekannt. Das die Änderung des Inhaltes eines Icons wohl selten ist, wird dies durch den Icon Cache nicht bemerkt. Das hat performance Gründe für den Explorer.

    PS: Ansonsten wenn es Windof ist, warum beschäftigst Du Dich damit. Arbeite doch mit Sachen die nicht doof sind. SCNR



  • Vielen Dank für deine Antwort.

    Hmm naja Windoof bleibt Windoof 🙂
    Ich muss mich damit beschäftigen, da ich es für dei Arbeit benötige. Wenn ich es kann macht es bestimmt spass damit was zu machen, doch aktuell habe ich noch große Probeme damit und tu mir echt richtig schwer.

    Ich mein grundsätlich zwischen den zwei Programm aufrufen.

    Also eigentlich wird von mir folgende Lösung verlangt:
    Es soll ein ICON im Installationsordner abgelegt werden und darauf soll das Programm dann zugreifen. Das ganze soll nicht mehr DLL abhängig sein.

    Ich kann mir aber nicht vorstellen wie das Funktionieren soll denn in der
    "Projekt.cpp" wird das Handle aus der DLL geladen und gesetzt.

    Später in der "ProjektDLG.cpp" wird dann das ICON ohne spezielle Handleübergabe gesetzt "LoadIcon(UINT)". Das UINT wird immer von der DLL die in der Projekt.cpp geladen wird genommen und gesetzt. Wie du schon sagtest wenn ich später dann die DLLs, ändert das nix am ICON obwohl ich zum Test in die anderen DLLs ein anderes ICON eingefügt habe.

    Wie kann ich denn die ICONS unabhängig von den DLLs setzen?

    Vielen lieben Dank für eure Hilfe



  • Vielleicht hilft das Löschen des Icon-Caches: %USERPROFILE%\AppData\Local\IconCache.db .


  • Mod

    @MFC_TRAINEE: Ich verstehe in keiner Weise was Du meinst mit "aus der CPP laden"?
    Ich lade x verschiedene Icons im TRay. Dynamisch. Da ist nichts in einem Cache...
    Das Icon, dass mit LoadIcon geladen wird und im Tray für die Anzeige vorgesehen wird, das wird auch angezeigt. Wenn das Programm es ändern will geschieht das.



  • Danke für eure Antworten.

    Sorry ich hab noch kaum Erfahrung und drücke mich vll etwas umständlich aus.

    Also Visual Studio und MFC erstellt ja eine projekt.cpp und eine projektDlg.cpp.

    Wenn das Programm gestartet wird werden erst alle Funktionen der projekt.cpp aufgerufen dann die der projektdlg.cpp.

    in der projekt.cpp wird ein handle mit daten der DLL in eine Variable gespeichert und dann mit einer Funktion gesetzt. Später in der projektDlg.cpp wird dann mit LoadIcon das Icon welches sich in der DLL ist gesetzt mit der Funktion "LoadIcon(UINT)" ohne Angabe eines Handles.

    Ich würde jetzt einfach gern ein ICON setzen welches sich z.b. beim Pfad C:\Benutzer\Desktop\einicon.ico befindet. Geht das irgendwie? Also damit da Icon nicht aus der DLL genommen wird?



  • LoadImage sollte dein Problem lösen mit dem laden des icon aus einer Datei



  • Vielen Dank für deinen Tip!

    Ich versuche das gerade zu verstehen. Auf MSDN verstehe ich es noch nicht so richtig wo ich da den Pfad angben muss.

    Beim googeln hab ich das gefunden:
    http://www.cpp-tutor.de/mfc/mfc/kap7/tut/tut3.htm

    Das werde ich morgen probieren.


  • Mod

    Entweder in LoadImage.
    Oder wenn die date in die EXE eingebeutet ist hast Du eine RC Datei.



  • Danke nochmal,

    aber in der .rc ist doch nur die ID und der Pfad zum Icon angeben?



  • Vielen Dank an alle!

    Ich hab das jetzt soweit hinbekommen.

    Jetzt hab ich nur noch 2 kleine Fragen auf die ich noch nicht richtig komme.

    In jeder DLL gibt es eine ABOUTBOX. Wie kann ich hier sagen, dass er das Icon immer aus der einen Datei laden soll?

    Wie wird denn im Code die Überschrift bzw. der Name des Dialogfensters gespeichtert.

    Danke vielmals!!! 🙂

    *HAPPY*


  • Mod

    Der name ist auch in der RC-Datei.

    Icons in einem Dialog kann man auch per WM_SETICON (kleines icon in der Caption) oder per STM_SETICON setzen (Icon im Diaogfeld.

    Wie wäre es mal mit etwas Grundlagen lesen?



  • Ich nehme deinen Appel an, doch:
    Ja ich lese Grundlagen und ich lese wirklich viel.
    Hab das Buch C++ in 21 Tagen durchgemacht doch so spezielle Sachen werden irgendwie nicht behandelt. Da steht zwar wie man ein ICON ändert aber halt nicht von solchen Funktionen.


  • Mod

    "C++ in 21 Tagen"?
    Das hört sich nach C++ lernen an, aber nicht nach Windows API...



  • Sorry, Visual C++ ist auf MFC abgestimmt...

    Aber das Programm an dem ich arbeite ist irgendwie anderst. Es greift auf .xmc Dateien zu usw. Das kann ich alles einfach noch nicht und weiß auch nicht wie ich mir das aneignen soll.

    Das der Name in der .rc Datei normal steht ist mir klar doch hier mit den DLL´s ist das irgendwie anderst gemacht. Denn in den Stringtabellen finde ich kein ToolName doch der das wird verwendet. Ich versuche gerade den Code zu analysieren doch das ist nicht so einfach.


Anmelden zum Antworten