[erledigt] Initialisierung von Kontrollvariablen: ONINIT Funktion oder ähnliches auch für selbst erstellte Dialoge?



  • Hallo allerseits!

    Mein Problem ist folgendes:

    In einem selbst erstelltem Dialog (Resource View -> Projektname -> Dialog -> rechtsklick -> Insert Dialog) habe ich keine ONINIT Funktion.

    Ist nicht weiter schlimm, dachte ich, es gibt ja den Konstruktor.
    Den wollte ich nutzen, um den wirksamen Bereich eines Sliders einzustellen, aber es geht nicht:

    CirgendeinDlg::CirgendeinlDlg(CWnd* pParent /*=NULL*/)
    	: CDialog(CirgendeinDlg::IDD, pParent)
    {
    	m_sl_xstart.SetRange(0, (sf->xBloecke - sf->xBloe3D));
    }
    

    (sf ist ein global definierter Zeiger)
    Führe ich dagegen

    m_sl_xstart.SetRange(0, (sf->xBloecke - sf->xBloe3D));
    

    in einer anderen Memberfunktion aus, klappt das einwandfrei!

    Daher meine Frage:

    Wie kann ich beim Start dieses Dialoges den Bereich des Sliders richtig fest legen?

    Habe ich etwas im Konstruktor falsch gemacht?
    Kann ich doch noch eine ONINIT Funktio einbauen? Wenn ja, wie wird sie aufgerufen?

    Danke und Gruß!



  • dong schrieb:

    Habe ich etwas im Konstruktor falsch gemacht?

    Das kannst du nicht im Konstruktor machen.

    Kann ich doch noch eine ONINIT Funktio einbauen?

    Ja.

    Wenn ja, wie wird sie aufgerufen?

    Wenn du's richtig machst, von ganz allein.



  • MFK schrieb:

    Kann ich doch noch eine ONINIT Funktio einbauen?

    Ja.

    - Gehe mal in den Klassenassistenten (Strg + w)
    - wähle dort die ID deines Dialoges (Registerseite "Nachrichtenzuordnungstabellen")
    - suche im Fenster rechts daneben den WM_INITDIALOG Eintrag
    - doppelklick darauf und schon hast du die OnInitDialog Fkt. hinzugefügt



  • Danke schön, das klingt ja schon ganz gut, leider hatte ich auch damit ein Problem:

    Chris++ schrieb:

    MFK schrieb:

    Kann ich doch noch eine ONINIT Funktio einbauen?

    Ja.

    - Gehe mal in den Klassenassistenten (Strg + w)

    [edit]
    CTRL + w ist bei mir nur "Bookmark window"
    Einen Klassenassistenten habe ich bisher nicht gefunden, ich beziehe mich im folgenden auf die Class - View, dort gab es zumindest etwas ähnliches:[/edit]

    Chris++ schrieb:

    - wähle dort die ID deines Dialoges (Registerseite "Nachrichtenzuordnungstabellen")

    Ich habe nur die englische Version von Visual Studio 2005, ich nehme an, dort heißt diese Karte "Messages". Jedenfalls gibt es in dieser Karte jede Menge WMs... ...allerdings nicht das passende:

    Chris++ schrieb:

    - suche im Fenster rechts daneben den WM_INITDIALOG Eintrag

    dieser fehlt bei mir:
    http://img228.imageshack.us/img228/9369/wm3fd.png

    dort gibt es mit init nur WM_INITMENU und WM_INITMENUPOPUP.
    WM_ONINIT oder so gibt es auch nicht.

    Habe ich etwas falsch gemacht oder gibt es etwas anderes passendes?

    Ich werde mich jedenfalls mal durch die Beschreibungen der restlichen WMs wühlen, vielleicht ist da ja was dabei...

    Danke und Gruß!



  • hm... ich arbeite mit VS 6.0. Hast du die Express Edition? Probier mal die Nachricht WM_MDIACTIVATE aus (die würde ich jetzt so aus dem Bauch heraus ausprobieren).



  • dong schrieb:

    DIch habe nur die englische Version von Visual Studio 2005, ich nehme an, dort heißt diese Karte "Messages".

    Nein, es gibt (schon ab VS2002) keinen Klassenassistenten mehr. Wähle die Klasse in der Klassenansicht aus, dann kannst du im Eigenschaftsfenster unter Nachrichten eine Nachrichtenbehandlungsfunktion für WM_INITDIALOG anlegen.



  • MFK schrieb:

    dong schrieb:

    DIch habe nur die englische Version von Visual Studio 2005, ich nehme an, dort heißt diese Karte "Messages".

    Nein, es gibt (schon ab VS2002) keinen Klassenassistenten mehr. Wähle die Klasse in der Klassenansicht aus, dann kannst du im Eigenschaftsfenster unter Nachrichten eine Nachrichtenbehandlungsfunktion für WM_INITDIALOG anlegen.

    tja:

    dong schrieb:

    Chris++ schrieb:

    - suche im Fenster rechts daneben den WM_INITDIALOG Eintrag

    dieser fehlt bei mir:
    http://img228.imageshack.us/img228/9369/wm3fd.png

    dort gibt es mit init nur WM_INITMENU und WM_INITMENUPOPUP.
    WM_ONINIT oder so gibt es auch nicht.

    Chriss++ Empfehlung gemäß probierte ich OnMDIActivate aus: Funktionierte nicht, setRange wurde beim Start des Fensters nicht ausgeführt. Mit OnCreate dasselbe Problem.

    Das Problem scheint ja wirklich hauptsächlich zu sein, dass mir WM_INITDIALOG nicht zur Verfügung steht, wie kann das nur passieren? 😕



  • Versuchs mal ganz dreist von Hand:

    virtual BOOL OnInitDialog();
    
    BOOL CDerDlg::OnInitDialog() 
    {
    	CDialog::OnInitDialog();
    
    	return TRUE;  // return TRUE unless you set the focus to a control
    	              // EXCEPTION: OCX-Eigenschaftenseiten sollten FALSE zurückgeben
    }
    

    💡 <- Geistesblitz, weil ich das in der MessageMap nicht finden konnte:
    Aaaaah, ich glaube ich habs... guck doch mal bei Overrides oder so ähnlich, ich glaube das ist blos ne virtuelle Funktion, kein Message-Handler. 🙂



  • estartu schrieb:

    💡 <- Geistesblitz, weil ich das in der MessageMap nicht finden konnte:
    Aaaaah, ich glaube ich habs... guck doch mal bei Overrides oder so ähnlich, ich glaube das ist blos ne virtuelle Funktion, kein Message-Handler. 🙂

    Volltreffer, das wars, Danke! 😃
    Danach hätte ich es aber auch von Hand versucht. 🙂


Anmelden zum Antworten