Optionsfelder Dynamisch

DJneu

Mitglied
Hallo zusammen,

nachdem ich die MSDN mal wieder nicht versteh :confused: oder dort nix find, muss ich euch mal fragen ob ihr da weiter wisst?

So viel hab ich schon zusammengebracht:

CButton *tempControl = new CButton ;
tempControl -> Create ("Text", BS_RADIOBUTTON | WS_VISIBLE | WS_TABSTOP, CRect (x1, y1, x2, y2), this, ID) ;

Wenn ich Optionsfelder dynamisch Erzeugen möchte muss ich ja auch die "Gruppen"-Option und die int Variable für diese Gruppe setzen! Wie mache ich das?

Gruß Dirk
 
Mit WS_GROUP. Ist der Style enthalten, ist der erzeugte Button der erste einer neuen Gruppe. Alle, die zu der Gruppe dazugehören sollen, erhalten den Style nicht.
Das erzwingt unter anderem, dass du Gruppen für Gruppe erzeugen musst.
 
Hab ich gemacht, anlegen funtz..!

Wie schaut das aber mit dem setzen und auswerten aus?
Wenn ich nun draufklick passiert nix!?
Und wie werte ich die Gruppen aus!?
Wenn ich diese mit dem Assistenten erstelle kann ich mir hier ja eine
Membervariablen anlegen welche mir sagt was ausgewählt ist, aber hier

Gruß
 
Du mußt in der OnNotify-Funktion auf Nachrichten von Deinen dynamischen Buttons hören und diese dort auswerten. Da kannst du dann selbstdefinierte Funktionen aufrufen, die die Button-Funktionalität enthalten.
 
Hmmm

also so ganz hab ich s noch nicht verstanden!
Anlegen mach ich jetzt mal so:


for (index = 0 ; index < aicMaxAnza ; index ++)
{
CButton *tempControl1 = new CButton ;
CButton *tempControl2 = new CButton ;
CButton *tempControl3 = new CButton ;
tempControl1 -> Create ("Adjust", WS_TABSTOP | WS_CHILD | WS_VISIBLE | BS_RADIOBUTTON| WS_GROUP, CRect (245, 26 + (25 * index), 260, 46 + (25 * index)), this, abglAllgemeinSelAdjust + index + (0 * aicMaxAnza)) ;
tempControl2 -> Create ("Adjust", WS_TABSTOP | WS_CHILD | WS_VISIBLE | BS_RADIOBUTTON, CRect (265, 26 + (25 * index), 280, 46 + (25 * index)), this, abglAllgemeinSelAdjust + index + (1 * aicMaxAnza)) ;
tempControl3 -> Create ("Adjust", WS_TABSTOP | WS_CHILD | WS_VISIBLE | BS_RADIOBUTTON, CRect (285, 26 + (25 * index), 300, 46 + (25 * index)), this, abglAllgemeinSelAdjust + index + (2 * aicMaxAnza)) ;
}


Dann hab ich immer 3er Gruppen.

Auswerten würd ich in OnCommand machen!

Hier bekomm ich dann die Meldung über die ID des Control's.
Ich möchte aber über RadioButton's auswählen und dann wenn ein anderer "Fertig Button" Geklickt wurde schauen, wie die RadioButtons gesetzt sind.
Hier zu muss ich doch die Gruppe erkennen und auswerten Wie mach ich das
 
Das wird so nicht klappen, da die ID's der Controls in einer Gruppe innerhalb eines Bereichs liegen müssen: ID_FIRST_GROUP_CONTROL < weitere ID's < ID_LAST_GROUP_CONTROL. Also alle Controls mit den ID's von ID_FIRST_GROUP_CONTROL bis ID_LAST_GROUP_CONTROL gehören zu dieser Gruppe. Du könntest es so machen:
Code:
int iButtonID = abglAllgemeinSelAdjust;
for (index = 0 ; index < aicMaxAnza ; index ++)
{
  CButton *tempControl1 = new CButton ;
  CButton *tempControl2 = new CButton ;
  CButton *tempControl3 = new CButton ;
  tempControl1 -> Create ("Adjust", WS_TABSTOP | WS_CHILD | WS_VISIBLE | BS_RADIOBUTTON| WS_GROUP, CRect (245, 26 + (25 * index), 260, 46 + (25 * index)), this, iButtonID++) ;
  tempControl2 -> Create ("Adjust", WS_TABSTOP | WS_CHILD | WS_VISIBLE | BS_RADIOBUTTON, CRect (265, 26 + (25 * index), 280, 46 + (25 * index)), this, iButtonID++) ;
  tempControl3 -> Create ("Adjust", WS_TABSTOP | WS_CHILD | WS_VISIBLE | BS_RADIOBUTTON, CRect (285, 26 + (25 * index), 300, 46 + (25 * index)), this, iButtonID++) ;
}
Die Nachricht kannst Du natürlich auch in OnCommand abfangen, OnNotify ist da nach meiner Meinung etwas bequemer. Aber das kannst Du machen wie Du willst.

Um herauszufinden, zu welcher Gruppe das Control gehört, wäre es wohl am einfachsten, wenn du Dir die ID's der ersten Gruppen-Controls in einem Array merkst. oder Du rechnest sie einfach aus, ausgehend von abglAllgemeinSelAdjust.
 
Hallo zusammen,

bin nun ein wenig weiter, hab noch was anderes gefunden!


int iButtonID = abglAllgemeinSelAdjust;
for (index = 0 ; index < aicMaxAnza ; index ++)
{
CButton *tempControl1 = new CButton ;
CButton *tempControl2 = new CButton ;
CButton *tempControl3 = new CButton ;
tempControl1 -> Create ("Adjust", WS_TABSTOP | WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON | WS_GROUP, CRect (245, 26 + (25 * index), 260, 46 + (25 * index)), this, iButtonID++) ;
tempControl2 -> Create ("Adjust", WS_TABSTOP | WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON, CRect (265, 26 + (25 * index), 280, 46 + (25 * index)), this, iButtonID++) ;
tempControl3 -> Create ("Adjust", WS_TABSTOP | WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON, CRect (285, 26 + (25 * index), 300, 46 + (25 * index)), this, iButtonID++) ;
}


Durch das AUTO lassen sich nun die Gruppierten RadioButtons auswählen!

AAAber jetzt, nu setzte ich alle Gruppen je nach Belieben und drücke einen normalen Button als "Fertig" den Button fange ich in OnCommand ab!
Gibt es wirklich keine Möglichkeit erst jetzt abzufragen wie die Radio's stehen,
muss ich wirklich bei jedem Klick auf diese Merkervariablen setzen?

Gruß
 
Natürlich geht das. Siehe MSDN:
CWnd::GetCheckedRadioButton

int GetCheckedRadioButton( int nIDFirstButton, int nIDLastButton );
Return Value
ID of the checked radio button, or 0 if none is selected.
Parameters
nIDFirstButton
Specifies the integer identifier of the first radio button in the group.
nIDLastButton
Specifies the integer identifier of the last radio button in the group.
Remarks
Retrieves the ID of the currently checked radio button in the specified group.
 
Danke, haut jetzt super hin......

und das Aufrufen der Funktionsmembers hab ich dann so gemacht:

CButton *tempButton = (CButton*) GetDlgItem (ButtonID) ;
tempButton -> SetCheck (0) ; // Löschen
tempButton -> ..............


Gruß
 
Ich hätte noch eine Frage:
Elemente (Buttons, usw.) kann man ja dynamisch zur Laufzeit erzeugen.

Kann man auch ein Dialogfeld erzeugen, ohne dass die Resource vorher angelegt wird ?

Danke im Voraus.

Peter
 
Zurück