Geeignete Methode für Initialisierungscode eines CView



  • Hiho,

    ich habe eine einfache SDI. Nun will ich dort mehrere Steuerelemente reinhauen. Diese sollen ihre Größe anhand der Größe des Views ausrechnen. Das geschieht nur beim Start, da sich die View danach in der Größe nicht ändern lässt.
    Meine Frage: wo mache ich das am besten?

    Wenn ich direkt nach dem Create arbeite, klappt das noch nicht. Zuerst wird das Fenster nämlich erstellt und dann mit Show maximiert. Das heißt in der Create ist das Fenster noch "0 groß". Dann wollte ich die WM_SHOWWINDOW nehmen, aber diese Nachricht wird noch vor dem Create abgearbeitet. das bringt mir also noch weniger



  • OnCreate bei einer Klasse, die von CView abgeleitet ist und OnInitDialog bei einer Klasse, die von CDialog abgeleitet ist.
    Aber das mit dem Maximieren verstehe ich nicht ganz. In der Create gibst du doch schon die Größe es Fensters an. Kannst du die nicht vorher abfragen?



  • Ich habe das Maximieren zwar als Style angegeben, aber das macht der nie. Ich muss immer noch nach dem Create per Hand mit ShowWindow das Maximieren erledigen.


  • Mod

    Musst Du nicht setzte einfach m_nCdmShow auf SW_MAXIMZE!
    Für das Frame gilt nur dieser Parameter!



  • Martin Richter schrieb:

    Musst Du nicht setzte einfach m_nCdmShow auf SW_MAXIMZE!
    Für das Frame gilt nur dieser Parameter!

    Meinst du SW_SHOWMAXIMIZED? Ich habe in der Create bei den Styles folgendes geschrieben: WS_OVERLAPPED | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_MAXIMIZE.

    Wenn ich das mache und dann pFrame->ShowWindow(SW_SHOW); dann wird das Fenster nicht maximiert. Ich habe mal einen Breakpoint in der OnSize gesetzt. Das Fenster ist erst normal, dann wirds maximiert und dann wieder normal gemacht und dann sehe ich es erst.
    Erst mit pFrame->ShowWindow(SW_SHOWMAXIMIZED); bekomme ich es vom Programm aus maximiert.

    Eigentlich wollte ich es vom Start weg maximiert und dann so, dass man das Programm nur Minimieren kann, sodass die Größe halt fest ist.
    "Interessant" ist auch irgendwie folgendes: Wenn ich

    pFrame->ModifyStyle(WS_CAPTION,0);

    vor dem ShowWindow(SW_SHOWMAXIMIZED) aufrufe, dann habe ich wirklich eine Vollbildanwendung, d.h. auch die Taskleiste ist weg. Ist das normal?. Am liebsten hätt ich Vollbild-Maximiert, aber die Taskleiste soll noch sichtbar sein.


  • Mod

    Ich meinte SW_MAXIMIZE! Nur zur Info:

    #define SW_SHOWMAXIMIZED    3
    #define SW_MAXIMIZE         3
    

    Bitte lies mal die Doku zu CWinApp::m_nCmdShow!!!

    Ich meinte nur, dass Du in Deinem InitInstance
    m_nCmdShow = SW_MAXIMIZE;

    Das ganze andere Gedöhns mit den Stilen kannst Du haken, wenn es um das Mainframe geht!



  • Ah ok, danke für deine Hilfe.

    Da ich den Rahmen und das Doc/View-Modell eh nicht wirklich benötige, habe ich das jetzt doch etwas anders gemacht. Ich nehm jetzt einfach eine Dialogfeldanwendung, maximiere die und verstecke das Caption und gut is. Die Taskleiste ist halt nicht sichtbar, müssen die Anwendern durch^^ alt-tab funzt ja trotzdem weiterhin.

    Das mit der Doku zu CWinApp::m_nCmdShow war ein guter Tipp! Ich weiß jetzt was du meintes. Merk ich mir fürs nächste mal. 👍

    MfG Pellaeon


Anmelden zum Antworten