Hallo Ich bin dran mit Visual Studio 2013 meine erste MFC Anwendung zu erstellen. Nun wollte ich 2 Radios einfügen. Diese sind in einer Group Box und funktionieren beim Klicken auch. Ich möchte aber das erste Radio per default eingeschalten (gecheckt) haben. So weit ich das verstanden habe, müsste es dazu eine Einstellung unter Properties haben. Im Properties Fenster finde ich jedoch keine passende Einstellung. (Siehe Bild) Habe ich da etwas übersehen oder muss man noch irgendetwas vorher einstellen? Vielen Dank schon mal. Eure Krähe
Ich sehe auch keine Einstellung dafür. Allerdings wenn Du sie abfragen kannst, dann kannst Du sie auch im Code setzen. .....radioButton1.checked = true (oder so ähnlich) Dafür bietet sich der Konstruktor an. Somit erhälst Du kein gewünschtes Verhalten.
Gibt es nicht, soviel ich weiß. Du musst eine Variable zuordnen, dann den Code ändern: Die Variable wird mit -1 initialisiert. Diese änderst du einfach ab auf 0. Dann ist die erste Option beim Öffnen des Dialogs aktiviert.
Holger K. schrieb: > Ich möchte aber das erste Radio per default eingeschalten (gecheckt) > haben. So weit ich das verstanden habe, müsste es dazu eine Einstellung > unter Properties haben. Das hast du dann falsch verstanden. In der MFC gibt es für die Werte, die ein Control aktuell anzeigt, niemals ein Property. Die MFC funktioniert anders. Du kannst dir für jedes Control vom Wizzard eine entsprechende Value-Variable definieren (auch für Radio-Buttons) lassen. Ein Aufruf von 'UpdateData' transferiert dann den jeweiligen Wert. Entweder von den Controls zu den Variablen
1 | UpdateData( TRUE ); |
oder von den Variablen in die Controls
1 | UpdataData( FALSE ); |
aber um an den aktuell in einem Control angezeigten Wert zu kommen, gibt es nur diese beiden Möglichkeiten * entweder man lässt sich entsprechende Value Variablen vom Wizzard erzeugen und benutzt UpdateData * oder man transferiert die Werte selber, indem man im Code selbst mit dem Control 'verhandelt' und die entsprechenden Methoden auf einer (ebenfalls vom Wizzard erzeugten) Control-Variablen anwendet. Über Properties hingegen funktioniert das nicht. Das Konzept der Properties wurde erst lange nach Beginn der MFC bei Microsoft entdeckt. Was du da oben siehst, das ist nichts anderes als eine etwas schönere Variante, wie man Dinge im Resource File angeben kann, ohne sich immer alle Möglichkeiten und Schlüsselwörter merken zu müssen. Mehr steckt da nicht dahinter. Die Prinzipien der MFC führen nun mal zurück an den Anfang der 90-er Jahre des letzten Jahrhunderts. Damals war man froh, überhaupt etwas programmieren zu können ohne sich 3 Millionen Syntax Dinge merken zu müssen. Komfort bedeutet hauptsächlich, dass man erst mal händisch einzutippendende Dinge durch entsprechende GUI Elemente in Konfigurations-Dialogen ersetzt hat. Alle die noch mit Petzolds Hilfe Resource Files händisch erstellt haben um sie durch den Resource Compiler zu jagen, wissen was ich meine.
:
Bearbeitet durch User
Wow, vielen dank für die vielen Antworten. Also wenn ich das richtig verstanden habe, erzeuge ich eine Variable für das eine Radio Element. (Mit dem "Add member Variable Wizard") Diese Setze ich bei der initialisierung auf 1 und rufe dann UpdateData(FALSE); auf. Ungefähr wie:
1 | m_LCap_On = true; |
2 | UpdateData(FALSE); |
Das macht bei 2 Radios noch irgendwie sinn. Da diese sich im grundegenommen wie eine Checkbox verhalten, entweder ein oder aus. Aber bei mehreren Radios müsste ja eine Variable erzeugt werden in welcher das aktive Radio z.B. als Zahl abgespeichert ist? Müsste ich also die member Variable für die Gruppe erstellen? LG
Holger K. schrieb: > Ich bin dran mit Visual Studio 2013 meine erste MFC Anwendung zu > erstellen. das ist eine ganz schlechte Idee! Die MFC wurde schon vor Jahren verschrottet. Wenns Denn etwas altes sein soll, dann bitte pure WIN32 API. Da lernt man auch was für später. Aber MFC? Ich weiss nicht ... Gruß Klaus
Holger K. schrieb: > Aber > bei mehreren Radios müsste ja eine Variable erzeugt werden in welcher > das aktive Radio z.B. als Zahl abgespeichert ist? Deswegen ist das ja auch eine int Variable
Karl H. schrieb: > Holger K. schrieb: > >> Aber >> bei mehreren Radios müsste ja eine Variable erzeugt werden in welcher >> das aktive Radio z.B. als Zahl abgespeichert ist? > > Deswegen ist das ja auch eine int Variable Das der Wizzard da einen BOOL einsetzt, brauchst du nicht so ernst zu nehmen. Tatsächlich ist das eine Zahl. Und PS: Du musst dem jeweils ersten Radio Button einer Gruppe jeweils ein 'Group' Attribut von TRUE verpassen. Und auf diesen Button setzt du die Value Variable an. Beim UpdateData machen das dann die Radio Buttons unter sich aus :-) Und ja: Man sollte tunlichst dafür sorgen, dass die Resource-Ids der zu einer Gruppe gehörenden Radio-Buttons aufsteigend sind und vor allen Dingen nicht durch andere Radio Buttons 'unterbrochen' sind.
:
Bearbeitet durch User
Karl H. schrieb: > Und ja: Man sollte tunlichst dafür sorgen, dass die Resource-Ids der zu > einer Gruppe gehörenden Radio-Buttons aufsteigend sind und vor allen > Dingen nicht durch andere Radio Buttons 'unterbrochen' sind. Das ist nicht nötig. Es ist nur wichtig, dass sie in der Tab-Order hintereinander liegen und der erste Radiobutton sowie das erste Control nach den Radiobuttons das Group-Flag gesetzt haben und der zweite bis letzte der Radiobuttons nicht gesetzt haben.
Yaay! Hat funktioniert. Vielen Dank für die Hilfe! Klaus schrieb: > das ist eine ganz schlechte Idee! Die MFC wurde schon vor Jahren > verschrottet. Hab mir mal QT heruntergeladen. Besser? Euch noch einen schönen Tag. Eure Krähe
Holger K. schrieb: > Klaus schrieb: >> das ist eine ganz schlechte Idee! Die MFC wurde schon vor Jahren >> verschrottet. Keine Panik. Diese Aussage ist Unsinn. Die MFC auslaufen zu lassen kann sich Microsoft derzeit noch nicht leisten. Holger K. schrieb: > Hab mir mal QT heruntergeladen. Besser? Das ist trotzdem keine schlechte Idee.
Holger K. schrieb: > Hab mir mal QT heruntergeladen. Besser? Ist natürlich nicht schlecht, aber man muss nicht gleich zu etwas "Dickem" greifen. Es gibt auch noch schlanke Wrapper wie z.B. Win32++. Da ist man auch näher an der OS-API und hat eher eine Chance, sie zu verstehen. Würde ich mir zumindest mal anschauen.
Reiner Rübendübel schrieb: > Holger K. schrieb: >> Hab mir mal QT heruntergeladen. Besser? > > Ist natürlich nicht schlecht, aber man muss nicht gleich zu etwas > "Dickem" greifen. Es gibt auch noch schlanke Wrapper wie z.B. Win32++. > Da ist man auch näher an der OS-API und hat eher eine Chance, sie zu > verstehen. Würde ich mir zumindest mal anschauen. Dem kann ich nur zustimmen. Ich benutze Win32++ seit Jahren und bin voll zufrieden. Ich habe aber auch nur kleinere Programme. Meistens ist das nur ein Dialogfenster, um über eine Schnittstelle (CAN, seriell) mit meiner angeschlossenen Hardware zu kommunizieren. Ich kann Win32++ nur empfehlen. Reiner Hase
tictactoe schrieb: > Holger K. schrieb: >> Klaus schrieb: >>> das ist eine ganz schlechte Idee! Die MFC wurde schon vor Jahren >>> verschrottet. > > Keine Panik. Diese Aussage ist Unsinn. Die MFC auslaufen zu lassen kann > sich Microsoft derzeit noch nicht leisten. Ich benutz die MFC eigentlich immer noch recht gerne für viele Dinge. Warum? Einfach: weil ich damit 'aufgewachsen' bin. Für meine privaten Sachen brauch ich vieles vom 'neumodischen' Schnickschnack nicht und so riesig sind die Programme auch wieder nicht, dass es eine grosse Rolle spielen würde. Ganz im Gegenteil: MFC Programme sind meistens erstaunlich klein. Selbst dann, wenn man die MFC statisch linkt, wodurch dann auch Setup Programme entfallen können. Das einzige was mir sauer aufstösst: mir kommt vor, dass die MFC Programmierung in den neueren Visual Studio Versionen immer schlechter unterstützt wird. Gerade bei Dialogsachen ärgere ich mich jedesmal krumm über dieses Property Fenster, in dem ich nie das finde, was ich suche. Mir war der alte Class-Wizzard lieber, aber das ist sicherlich auch Geschmackssache. An viele der Design-Probleme in der MFC hab ich mich wohl schon so gewöhnt, dass sie mir nicht mehr sauer aufstossen :-)
:
Bearbeitet durch User
Karl H. schrieb: > Ich benutz die MFC eigentlich immer noch recht gerne für viele Dinge. > Warum? > Einfach: weil ich damit 'aufgewachsen' bin. Das bin ich auch, aber ich habe dann irgendwann auf WTL umgestellt das ist viel eleganter. Die WTL ist in der zwischenzeit auch Open source nur die darunterliegende ATL (noch) nicht. http://sourceforge.net/projects/wtl/
U++ Klein, modernes C++, effektiv. Ist aber nicht weit verbreitet. Oliver
Oliver S. schrieb: > U++ > > Klein, modernes C++, effektiv. > > Ist aber nicht weit verbreitet. > > Oliver Aber das ist wieder etwas ganz anderes .. Die Wtl ist auf C++ templates aufgebaut, und die Klassen haben ähnliche Namen und funktionieren wie die der MFC. Da hat man sich sehr schnell eingearbeitet.
Karl H. schrieb: > Ich benutz die MFC eigentlich immer noch recht gerne für viele Dinge. > Warum? > Einfach: weil ich damit 'aufgewachsen' bin. Wenn der Threadersteller davon spricht, dass er seine erste MFC Anwendung programmiert, dann ist er eher nicht damit aufgewachsen. Nichts gegen die MFC. Aber nur, wenn man damit aufgewachsen ist. Karl H. schrieb: > Für meine privaten Sachen > brauch ich vieles vom 'neumodischen' Schnickschnack nicht und so riesig > sind die Programme auch wieder nicht, dass es eine grosse Rolle spielen > würde. Ich habe alternativ die WIN32 API vorgeschlagen. Da findest Du so ziemlich alles, aber sicher keinen neumodischen Schnickschnack. Karl H. schrieb: > Das einzige was mir sauer aufstösst: mir kommt vor, dass die MFC > Programmierung in den neueren Visual Studio Versionen immer schlechter > unterstützt wird. Das hab ich dann wohl mit 'verschrotten' gemeint. Karl H. schrieb: > An viele der Design-Probleme in der MFC hab ich mich wohl schon so > gewöhnt, dass sie mir nicht mehr sauer aufstossen :-) Dann bleibt für den Threadersteller noch Hoffnung. Er muss sich nur lange genug mit der MFC befassen. Ich brauche auch keinen neumodischen Schnickschnack, weshalb ich ihm ja auch die WIN32 API vorgeschlagen habe. Das wiederum liegt aber wahrscheinlich daran, dass ich mit der WIN32 API aufgewachsen bin.^^ Gruß Klaus
Holger K. schrieb: > Ich möchte aber das erste Radio per default eingeschalten (gecheckt) > haben. So weit ich das verstanden habe, müsste es dazu eine Einstellung > unter Properties haben. Im Properties Fenster finde ich jedoch keine > passende Einstellung. (Siehe Bild) > > Habe ich da etwas übersehen oder muss man noch irgendetwas vorher > einstellen? GUI-Elemente reflektieren den Zustand der Daten, den Deine Software verarbeitet. Also setzt Du die Radiobuttons in Deiner Software und nicht vorweg in einer Resource. Öffnest der User eine Dialogbox mit Radiobuttons, setzt Du die sie entsprechend. Ändert der User den Zustand, muß der Zustand bei erneutem Öffnen dieser Dialogbox aus denselben Daten wieder hergestellt werden. Also macht es keinen Sinn, den Zustand von Radiobuttuns vorweg zu spezifizieren.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.