OnCreate wird nicht aufgerufen



  • Hallo zusammen,
    ich habe eine von CStatic abgeleitet Klasse geschrieben, die 5 von CEdit abgeleitet Objekte erstellen und anordnen soll. Beim debuggen ist mir aufgefallen das die Methode OnCreate() (WN_CREATE) gar nicht aufgerufen wird obwohl die MessageMap angepasst wurde.

    Ich habe einfach ein Static zum Dialog hinzugefügt und einen Membervariable von meiner Klasse im Hauptdialog erzeugt.

    Kann mir vielleicht jemand sagen was da falsch laufen kann oder ein Howto posten.
    Hab noch nicht sehr viele Erfahrungen mit selbstgebauten Controls.

    mfg Oliver



  • Die Verbindung zwischen Deiner abgeleiteten Klasse und dem Fenster im Dialog wird erst hergestellt, nachdem das Fenster erstellt wurde. Dies geschieht automatisch im CDialog::OnInitDialog durch den Aufruf von UpdateData(FALSE). Deine abgeleitete Klasse kann damit keine WM_CREATE bekommen.

    Das einfachste ist es, die Initialisierungen aus WM_CREATE in eine Objektfunktion zu packen und diese dann von CMyDialog::OnInitDialog aufzurufen.


  • Mod

    Wenn man eine solche Initialisierung hat, kann man die auch in virtuelle Ableger von PreSubclassWindow und direkt in SubclassWindow reinpacken.

    Dann vergisst auch niemand die aufzurufen.



  • Vielen Dank jetzt läufts 🙂
    Hab das Initialisieren der 5 Edits in PreSubclassWindow gepackt.


  • Mod

    Aber Achtung: PreSubclassWindow wird ach aufgreufen wenn CWnd::Create aufgerufen wird.



  • Hmm dann sollte ich wohl mal ne Membervariable einbauen in der ich mir speicher ob das Ganze bereits initialisiert wurde.


  • Mod

    oliver83 schrieb:

    Hmm dann sollte ich wohl mal ne Membervariable einbauen in der ich mir speicher ob das Ganze bereits initialisiert wurde.

    Oder Du nutzt eben eine Ableitung der virtuelle Funktion SubclassWindow...



  • Ich hätte da noch ein Problem 😕
    Die 5 Edits werden nebeneinander positioniert. Auf der Breite des Statics.

    Jetzt hab ich das Problem das ich in den Edits nur den sichtbaren Bereich beschreiben kann. Der Text wird nicht nach rechts verschoben und ausgeblendet.

    Die Edits werden mit folgenden Styles erstellt:

    WS_CHILD | WS_VISIBLE | ES_CENTER | ES_MULTILINE

    mfg Oliver



  • Hallo,

    willst du wirklich ein mehrzeiliges (ES_MULTILINE) Editcontrol? (Wenn das Edit dann nicht hoch genug ist (z.B. nur eine Zeile), verschwindet der Text scheinbar). Beachte auch, dass es noch ES_AUTOHSCROLL gibt, für automatisches Scrollen des Textes.

    MfG,

    Probe-Nutzer



  • Juhu es geht. Thx nochmal 🙂


Anmelden zum Antworten