Icon in SDI Anwendung



  • Hier noch ne Frage bezüglich SDI

    In meiner SDI Anwendung wird in der Titelleiste kein Icon angezeigt. Nur in der Windowstaskleiste. Bei einer Dialogbasierenden Applikation musste man da gar nichts zusätlich implementieren. Wieso dass den? Und wie löse ich das?



  • Ist das Absicht dass das ICON und die Toolbar die selbe ID haben: IDR_MAINFRAME.



  • Kann keiner helfen:

    Also bisher habe ich in der Titelleiste nur so ein weißes mit Icon mit blauem Balken. Also Miniatur eines Fensters. Also keines. Denke mal das ist das default Icon.

    pFrame->LoadFrame(IDR_MAINFRAME,
    		WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE, NULL,
    		NULL);
    

    Dieser Code ist doch dafür verantwortlich dass die Titeleiste gesetzt wird samt Icon oder nicht?


  • Mod

    Jein! Aber durch diesen Code wird automatisch eine Icon mit der Ressource ID IDR_MAINFRAME gesucht und diesem Frame zugewiesen.

    Das kann man jedoch auch ändern indem man die Fensterklasse manipuliert (z.B. in PreCreateWindow)...

    Der häufigste Fehler ist, dass Du Deinem Icon keine passende Auflösung gegeben hast oder das Bild in dieser Auflösung des Icons faösch ist.
    Ein Icon enthält eben mehrere Bilder und nicht nur eines...



  • Jein! Aber durch diesen Code wird automatisch eine Icon mit der Ressource ID IDR_MAINFRAME gesucht und diesem Frame zugewiesen.

    Ja so habe ich das gemeint. Bei IDR_MAINFRAME ist ja auch das Menü und der Titel hinterlegt.

    Das kann man jedoch auch ändern indem man die Fensterklasse manipuliert (z.B. in PreCreateWindow)...

    Ja kann man. Aber da habe ich nichts gemacht. Habe nur mit dem Wizard eine SDI Applikation erstellt, und gestartet.

    Standardmässig ist ja das MFC Icon hinterlegt. Und das ist ja in den verschiedensten Auflösungen vorhanden.

    Habe aber nun auch schon versucht mein eigenes Icon zu laden. Das hat alle Auflösungen. Also 6 Stück mit 24bit von 26*16 bis 256*256.



  • Also 6 Stück mit 24bit von 26*16 bis 256*256.

    Ähm was habe ich den da geschrieben, nochmal: 32bit von 16X16 bis 512x512


  • Mod

    Und mit SetIcon spielst Du auch nicht herum?

    Ansonsten schau Dir doch im Spy++ an welche Fensterklassebenutzt wurde. Dort ist auch ein Icon-Handle hinterlegt.



  • Und mit SetIcon spielst Du auch nicht herum?
    

    Wie gesagt ich habe noch gar nichts programmiert. Habe lediglich den Assistenten ausgeführt.

    SetIcon wird nur für das Andockbare Ausgabefenster verwendet. Aber da wird im übrigen auch kein Symbol angezeigt.

    Spy++:

    Klassenname: Afx:00400000:0
    Symbolhandle: keine.

    "keine" steht auch im übrigen beim Rest.



  • Hm und nun?


  • Mod

    Manifester schrieb:

    Hm und nun?

    Keine Ahnung. Ich muss ja nicht auf alle Probleme was wissen. Oder? 🕶

    Zudem die Ganze Sache bei mir in keinster Weise nachvollziehbar ist.

    Könnte es sein, dass Dein Icon falsch/defekt ist?
    Welche Datei wirdin der rc Datei denn benutzt? welche bearbeitest Du oder meinst Du sollte eingefügt werden?



  • Keine Ahnung. Ich muss ja nicht auf alle Probleme was wissen. Oder?

    Nö. Aber vieleicht zu dem hier 🙂

    Zudem die Ganze Sache bei mir in keinster Weise nachvollziehbar ist.

    Also das heißt wenn du bei dir ein ein neues SDI Projekt anlegst, erscheint bei dir ohne etwas zusätzlich programmiert oder irgendwas geändert zu haben ein ICON in der Titelleiste?

    Habe bei mir also nochmals ein SDI Projekt angelegt ohne Doc/View (hatte ich das schon erwähnt und ist das überhaupt von belang?). Es erscheint auch hier kein ICON in der Titelleiste, bzw. nur das weiße mit blauem Balken (je nach Anwendungsdarstellung z.B. bei "Office 2007" kommt gar keins.)

    Welche Datei wird in der rc Datei denn benutzt?

    Die Datei heißt ApplikationsName.ico und die ist ja Standardmässig das MFC Icon.
    Diese ist ja auch in allen Auflösungen vorhanden.


  • Mod

    Ich arbeite immer mit dem Doc/View Modell. Ich wüsste kaum einen Grund es nicht zu machen.

    Aber ich kann es nachvollziehen, wenn ich das Doc/View Modell ausschalte.

    Das Problem ist PreCreateWindow und die Klasse die dort registriert wird (BTW darauf habe ich Dich bereits hingewiesen).
    Entferne die folgende Zeile:

    cs.lpszClass = AfxRegisterWndClass(0);
    


  • Super vielen Dank es funktioniert. Ja stimmt da hast du mich darauf hingewiesen. Irgendwie habe ich das überlesen oder nicht richtig verstanden.



  • Wollte nochmal bezug nehmen auf den Satz:

    Ich arbeite immer mit dem Doc/View Modell. Ich wüsste kaum einen Grund es nicht zu machen.

    Wenn ich doch ein Programm habe das nur Daten anzeigt wie und keine Daten irgendwo ablegt - bestes Beispiel ist da der Windows Taschenrechner - da brauch ich doch keine Doc/View Unterstützung.

    Oder etwa doch?

    Da nervt doch das Zeug was da zusätzlich angelegt wird. Zum Beispiel das Unbenannt bzw. Untitled im Fenstertitel vor dem eigentlichen Programmnamen um nur einen Punkt zu nennen?


  • Mod

    Das mag sein...
    Ich habe jedoch immer Programme die Daten visualisieren... 😉



  • Das mag sein...

    Also gibt es doch Gründe keine Doc/View zu verwenden

    Ich habe jedoch immer Programme die Daten visualisieren... 😉

    Visualisieren ja aber wie gesagt nicht speichern 🙂


  • Mod

    Manifester schrieb:

    Ich habe jedoch immer Programme die Daten visualisieren... 😉

    Visualisieren ja aber wie gesagt nicht speichern 🙂

    Das hat gar nichts mit Speichern zu tun, warum auch.
    Wenn ich alleine schon die Notwendigkeit habe Daten in zwei Darstellungsformen anzuzeigen bin ich schon bei Doc/View.



  • Ja ok dann auch. Nichts desto trotz gibt es Anwendungen in denen man kein Doc/View braucht.

    Das ist für mich z.B. auch der Fall bei einem einfachen Testprogramm für eine DLL. Hier rufe ich nur über Buttons Exportfunktionen auf.

    Klar man könnte hier auch eine Dialogbasierte Anwendung verwenden. Aber ich habe mal in einem Blog gelesen ;), dass man eigentlich die SDI Applikation der Dialogbasierten vorziehen sollte. Selbst bei Testprogrammen 🙂


Anmelden zum Antworten