Forum: PC-Programmierung Visual Studio 2013 C++ Radios Checked


von Holger K. (holgerkraehe)


Angehängte Dateien:

Lesenswert?

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

von Radiohörer (Gast)


Lesenswert?

Holger K. schrieb:
> 2 Radios einfügen.

Nur UKW oder auch Lang-, Mittel- und Kurzwelle?

von Andre (Gast)


Lesenswert?

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.

von Andre (Gast)


Lesenswert?

* dein gewünschtes Verhalten ;)

von tictactoe (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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
von Holger K. (holgerkraehe)


Lesenswert?

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

von Klaus (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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
von tictactoe (Gast)


Lesenswert?

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.

von Holger K. (holgerkraehe)


Lesenswert?

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

von tictactoe (Gast)


Lesenswert?

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.

von Reiner Rübendübel (Gast)


Lesenswert?

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.

von Rainer Hase (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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
von Hans-Georg L. (h-g-l)


Lesenswert?

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/

von Oliver S. (oliverso)


Lesenswert?

U++

Klein, modernes C++, effektiv.

Ist aber nicht weit verbreitet.

Oliver

von Hans-Georg L. (h-g-l)


Lesenswert?

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.

von Klaus (Gast)


Lesenswert?

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

von Markus (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.