viele Radiobuttenelemente zur Laufzeit deaktivieren/aktivieren
-
Derzeit schreibe ich an einer Bediensoftware, in der ein Messkarte angesprochen werden soll. An der Messkarte hängen verschiedene digitale Ein- und Ausgänge. Im Dialog soll der Benutzer auswählen können, welcher Ein- oder Ausgang auf welchem Port der Karte realisiert ist. Ingesamt hat die Karte 8 Ports. Jeder Port ist 8 Bit breit, somit habe ich also 8 Ein- oder Ausgänge pro Port (insges. 64).
Nun darf natürlich jeder Port nur einmal verwendet werden. Die Oberfläche enthält jetzt Radio-Buttons, die ich schon zu 8er Gruppen gruppiert habe. Nun möchte ich wenn der Benutzer für einen Eingang einen bestimmten Port wählt, die entsprechenden Portpositionen der anderen Eingänge deaktivieren. Nun ist das ein ziemlicher Auswand bei 64x64 theoretischen Möglichkeiten mit GetDlg(IDC_XXX)->EnableWindow() zu arbeiten. Gibt es da eine elegantere Lösung bzw. kann man mehrere Radiobuttonelemente auch zu einem Steuerelement verknüpfen (also ähnlich der Gruppierung zur Ermittlung des aktivierten Elements in der Gruppe)? das nächste Problem wäre, dass ich ja für jedes Steuerelement einen eigenen Handler (OnBnClickedXXX) bräuchte, oder sehr ich das falsch?
Für Anregungen wäre ich sehr dankbar...
-
Gib den Ctrls doch einfach passendes IDs
Starte mit ID_BASE (z.B.0x1000)
Eingang 0 startet auf ID_BASE
Eingang 1 auf ID_BASE+0x10 etc.
Jeder Port wieder um offset 1.Du kannst also jeden Button durch seine ID bestimmen:
#define ID_CHK_BOX(e,p) (ID_BASE+(e)*0x10+(p))
Weiterhin kannst Du einen ON_COMMAND_RANGE damit easy bauen...
... und entsprechende Schleifen auch verwenden.
-
Zunächst erst mal vielen Dank.
Martin Richter schrieb:
Gib den Ctrls doch einfach passendes IDs
Starte mit ID_BASE (z.B.0x1000)
Eingang 0 startet auf ID_BASE
Eingang 1 auf ID_BASE+0x10 etc.
Jeder Port wieder um offset 1.Du kannst also jeden Button durch seine ID bestimmen:
#define ID_CHK_BOX(e,p) (ID_BASE+(e)*0x10+(p))
Das hatte ich schon gemacht, indem ich den IDs in der ressource.h eine fortlaufende Nummerierung verpasst habe und dann in den entsprechenden Schleifen numerisch vorgehen kann.
Martin Richter schrieb:
Weiterhin kannst Du einen ON_COMMAND_RANGE damit easy bauen...
... und entsprechende Schleifen auch verwenden.Damit hab ich noch gar keine Erfahrungen. ON_COMMAND_RANGE packt man also in die Messagemap und verknüfpt damit eine Memberfunktion der Klasse, die dann das gewünschte ausführt?
-
Steht alles in der MSDN:
http://msdn.microsoft.com/de-de/library/9ab3z9tb(VS.80).aspx
-
Martin Richter schrieb:
Steht alles in der MSDN:
http://msdn.microsoft.com/de-de/library/9ab3z9tb(VS.80).aspxJa das hatte ich auch gefunden. Mein Fehler war zunächst, dass ich vergessen hatte der Funktion einen Übergabeparameter vom Typ UINT zu verpassen. Jetzt funktioniert das wie gewollt.