Dialogfeldkomponenten dynamisch kreieren
-
Hallo,
habe folgendes Problem:
muss zur Laufzeit entscheiden, wie viele Radiobuttons ich auf einem Dialog ausgebe und welche Caption sie haben sollen. (Immer so zwischen 5 und 10 Stück).
Das ganze mitif (.....) ... else
erscheint mir total unpraktisch.
Wie kann ichs besser machen?danke tho.
-
Da du nicht sagst, nach welcher Logik das entschieden wird, kann man da nicht viel zu sagen.
Ich würde es erstmal doch mit ifs machen und dann gucken, ob und wo sich ein Muster erkennen lässt.
-
Die Logik ist einfach:
es werden vorhande CORBA Clients gescannt. Je nachdem wie viele gerade existieren, sollen deren Namen gezeigt werden. Das kann immer variieren.
-
Da bietet sich doch eine Schleife an.
-
estartu schrieb:
Da bietet sich doch eine Schleife an.
... und genau da liegt mein Problem.
Angenommen ich habe 5 Elemente.
Ich setze auf meinen Dialog max. 20 Radiobuttons, von denen dann 5 enabled mit der korrecten Caption sein sollen, 15 disabled mit Caption "--".
Nun hat jeder Radiobutton eine Feste ID (bsp. ID_RADIO_0 bis ID_RADIO_19).
Wenn ich das per Schleife lösen soll, wie kann das aussehen?for (int i=0; i < VorhandeneElemente; i++) { // und hier kommt das Problem (nur im Prinzip dargestellt) //EnableWindow oder SetWindowText() in Abhängigkeit von ID_RADIO_xy, //wobei ID_RADIO_xy wieder fest sind und sich nicht mit VorhandeneElemente in //der Schleife verbinden lassen
-
Um eine Schleife über die Radiobuttons zu machen gibt es zwei Möglichkeiten:
1. Du änderst die Nummern in der Resource.h so, dass die Radiobuttons aufsteigend hintereinander liegen.
Pass auf, dass keine Nummer doppelt ist.Dann kannst du die Schleife so machen:
int nRadio = IDC_RADIO_0; CWnd pRadio = NULL; for (int i = 0; nRadio <= IDC_RADIO_20; i++, nRadio++) { pRadio = GetDlgItem(nRadio); if (i < VorhandeneElemente) { pRadio->SetWindowText(strDasWasAngezeigtWerdenSoll); pRadio->EnableWindow(TRUE); } else { pRadio->SetWindowText("--"); pRadio->EnableWindow(FALSE); } }
Das ist ungetestet, aber müsste gehen.
2. Du packst die IDs in ein Array und legst die Schleife da drüber.
Okay?
-
Prima - das iss es!
Vielen Dank!
Klar - hinter den IDC_... stecken ja nix anderes als #defines.
Die Idee mit dem Array ist auch super!