Ein paar einfache GUI Fragen...



  • Ich fange ja gerade an, die GUI mit VC++6.0 zu gestalten und werde da sicher jede Menge Fragen haben, und ich will nicht jedesmal einen neuen Thread dazu eröffnen, dafür sind die Fragen zu simpel 😉 Daher kommt alles in diesen Thread.

    Also, Frage Nummer 1: Ich habe ein Edit-Feld und dem Feld eine Member-Variable m_Edit1 vom Typ CString zugewiesen. Dann habe ich ein OnChange Event erstellt und dort soll der Wert aus dem Edit-Feld in eine globale Variable m_Port geschrieben werden. Ein einfaches m_Port=m_Edit1 funktioniert nicht, ein m_Port=(int) m_Edit1 auch nicht. Was ist den Rätsels Lösung?



  • UpdateData 🙂



  • Neeeee 😃 Das habe ich ja, ich bekomme einen Syntaxfehler wegen des "=", weil er mit CString nicht zurechtkommt.



  • Ah ich sollte dabei erwähnen, dass m_Port ein int ist und er den CString nicht über das "=" an den int übergeben will.



  • JPSelter schrieb:

    Ah ich sollte dabei erwähnen, dass m_Port ein int ist und er den CString nicht über das "=" an den int übergeben will.

    Wenn m_Port eine int Variable ist dann musst du es so machen

    CString mein_String;
    mein_String.Format("%d",m_Port);
    

    Wenn du aber einen CString in einen int konvertieren willst, dann schau mal unter http://www.c-plusplus.net/forum/viewtopic-var-t-is-39102.html nach.



  • OK, das klappt, habe auch was mit _atoi() gefunden.

    Frage 2: Wie beende ich eine Anwendung per Befehl? Gibts ein Close() wie bei Delphi?



  • JPSelter schrieb:

    Wie beende ich eine Anwendung per Befehl? Gibts ein Close() wie bei Delphi?

    Du kannst eine WM_CLOSE Message senden, die die Anwendung schließt.
    Siehe SendMessage



  • OnCancel();

    Nur für das eigene Fenster



  • Nächste Frage: Kann ich im Dialog Editor auch irgendwo die exakte Grösse z.B. von Buttons festlegen? Zur Zeit muss ich alles per Augenmaß skalieren und hoffen, dass alles gleichgross ist.



  • Du könntest dir eventuell ein Raster einblenden lassen und die Button etc daran ausrichten (das reicht imho schon aus, um ein vernünftiges Design hinzubekommen). Alternativ öffnest du die Ressourcen-Datei als Text und schraubst von Hand an den Werten herum.



  • JPSelter schrieb:

    Nächste Frage: Kann ich im Dialog Editor auch irgendwo die exakte Grösse z.B. von Buttons festlegen? Zur Zeit muss ich alles per Augenmaß skalieren und hoffen, dass alles gleichgross ist.

    Schau dir die Toolbar genau an, da sind einige Schaltflächen für das Ausrichten und Größe anpassen von Dialogelementen.



  • Oha, man muss mehrere Objekte markieren damit die anderen Tools dort auswählbar sind. Danke für den Tip!



  • Neue Frage: Ich habe hier ja gelernt, dass ich GUI-Komponenten über eine Member-Variable ansprechen kann, also so, dass ich z.B. bei einem StaticText einfach "m_Static1='test'" sagen kann. Mein Prof macht aber immer "GetDlgItem(IDC_STATIC1)->SetIrgendwas('test')". Was ist denn nun komfortabler bzw. schöner? Die Member-Variablen-Version ist immerhin kürzer zu schreiben.



  • *bump* 🙂



  • Beides hat seine Vor- und Nachteile.
    Du kannst dir ja auch eine Controlvariable anlegen, dann schreibt sich das genauso einfach. Schau dich dazu im Klassenassistenten mal unter der Lasche "Membervariablen" um.

    Denn manchmal brauchst du ja mehr als nur den Wert eines Controls, z.B. wenn du es de-/aktivieren willst.
    Das merkst du aber mit der Zeit von alleine.

    Nur die Zeiger, wie dein Prof (und viele andere) das macht, müsste man eigentlich noch prüfen, ob die auch gültig sind. Nur tuts irgendwie keiner. 😉
    Und SetDlgItemText gibt es dann auch noch, das ist der dritte Weg.



  • Wieso stimmen eigentlich die Pixel-Werte beim GUI-Bau nicht mit der Wirklichkeit überein? Laut VC6++ ist mein Dialog 500x360 Pixel gross, aber es sind mindestens 800x700 (habs nicht nachgemessen). Auch der Button ist in der rc-Datei mit 15px Höhe angegeben, aber es sind weit mehr...


Log in to reply