Ich habe einen MFC-Dialog, in dem zwei Optionsfelder vorhanden sind. Ich habe sie in eine nette Gruppe gestellt, ihre IDCs sind nacheinander (RB_LEFT, RB_RIGHT
).MFC-Optionsfelder - Verhalten von DDX_Radio und DDX_Control
möchte ich DDX_Radio
verwenden, so kann auf die Schaltflächen zugreifen einen ganzzahligen Wert so in der Funktion unter Verwendung DoDataExchange Ich rufe:
DDX_Radio(pDX, RB_LEFT, mRBLeftRight);
wo mRBLeftRight eine Variable vom Typ Integer Mitglied ist. Ich brauche auch die Schaltflächen Eigenschaften zu bearbeiten, damit ich ein DDX_Control
kartieren sie auf Membervariablen mRBLeft und mRBRight (CButton) verwenden wollte:
DDX_Control(pDX, RB_LEFT, mRBLeft);
DDX_Control(pDX, RB_RIGHT, mRBRight);
jetzt, wenn ich den Anruf zu DDX_Control
tun, wann immer DoDataExchange genannt wird, die Anwendung stürzt ab, weil DDX_Control
zwingt RB_LEFT
, um eine Nachricht zu behandeln, die DDX_Radio
nicht verarbeiten kann. Dieser Teil verstehe ich.
Ich entschied mich, nicht DDX_Control
zu verwenden (entfernte die Aufrufe in DoDataExchange) und nur einen Zeiger auf meine Optionsfelder (CButton *) in meinen Klassen. Also in meiner Funktion OnInitDialog, mache ich die folgenden Aufrufe:
mRBLeft= ((CButton*)GetDlgItem(RB_LEFT));
mRBRight = ((CButton*)GetDlgItem(RB_RIGHT));
Nun, solange ich nicht mRBLeft verwenden Sie es in Ordnung sein wird, aber wenn ich es tue, bam, Absturz auf DoDataExchange. Die Sache, die mich wirklich verwirrt, ist, wenn ich meine linke Radio-Taste mit ((CButton*)GetDlgItem(RB_LEFT)->SetCheck(true)
ändern wird es funktionieren. Sooo, was ist der Unterschied?
(ich weiß, dass es für wenig eine Menge Ärger, aber ich verstehen möchte nur die Mechanik)
Ich habe irgendwo gelesen, dass ich nicht einen von GetDlgItem zurückgegebenen Zeiger speichern sollte, was wahrscheinlich richtig ist, vielleicht ist das die Ursache meines Problems? – levesque