Radiobutton SetCheck-Problem
-
Hallo,
ich habe da ein Problem mit einer Gruppe Radiobutton.
IDC_RADIO3 aktiviert ein neues Fenster, welches, wenn
es geschlossen wird, in WindowProc SetCheck aufruft,
um RADIO1 zu aktivieren und RADIO3 zu deaktivieren:((CButton*)GetDlgItem(IDC_RADIO3))->SetCheck(0); ((CButton*)GetDlgItem(IDC_RADIO1))->SetCheck(1);
Funktioniert so auch, aber mit ungewünschtem Nebeneffekt.
Denn sobaldGetDlgItem(IDC_RADIO3))->SetCheck(0);
gerufen wird, scheint wieder
void MyProg::OnBnClickedRadio3()
gerufen zu werden. Und voila, ist das soeben geschlossene Fenster
wieder offen :pKann ich irgendwie anders, ohne OnBnClickedRadio3 versehentlich wieder
zu aktivieren, den Checkedstatus von Radio3 entfernen und auf Radio1 setzen?Hinweis: Ich behandle das momentan in WindowProc, da dort auf eine
WM für das Schließen des Fensters reagiert wird, welches über Radio3 geöffnet wurde.
-
Ich teste es gleich, aber ist es nicht so, dass gar nicht
void MyProg::OnBnClickedRadio3()
gerufen wird, sondern sowas wie
der Fokus auf OnBnClickedRadio3
-
Du hast 2 Radiaobuttons.
Wenn du auf einen Klickst willst du den anderen deaktivieren?
Wozu?
Das macht MFC automatisch.
-
Genau das passiert scheinbar nicht. Ich habe Radio3 angeklickt.
Nach dem Schließen des Dialoges, der dadurch aufging, kehre ich
in das Fenster der Radiobutton zurück.Nun ist noch immer Radio3 aktiv, was nicht sein soll.
Daher habe ich beim Beenden des vorherigen Fensters eine
WM an das Fenster mit den Radios geschickt. Wenn diese WM
also gerufen wird passiert das hier:((CButton*)GetDlgItem(IDC_RADIO3))->SetCheck(0); ((CButton*)GetDlgItem(IDC_RADIO1))->SetCheck(1);
Würde ich nur Radio1 auf SetCheck(true) setzen, hätte ich
plötzlich zwei Radiobutton aktiv!! Daher muss ich einen
checked setzen und den anderen unchecked.Dann sieht zwar alles toll aus, aber aus irgendwelchen Gründen
scheint er den Code aus void MyProg::OnBnClickedRadio3() wieder abzuarbeiten.
Zumindest ruft er mir plötzlich wieder das Fenster auf, das zu Radio3
gehört.
-
Kann ich nicht nachvollziehen.
Bei mir wird durch SetCheck/BM_SETCHECK keine WM_COMMAND Nachricht ausgelöst.Setze mal bitte einen Breakpoint und schau Dir mal an, wer diese Nachricht auslöst (Callstack ansehen).
-
Hallo,
ich habe jetzt eben kurz nachvollzogen, dass alles wie gewollt
funktioniert, aber nur, wenn ich in WindowProc im Case für
meine selbst definierte WM eine MessageBox einbaue..wtf
ich verstehe nicht wie das abgearbeitet wirdLRESULT MyDia::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case UPDAVX: //WM_APP + 118 //mach was teil1.... break; case ACTBTN: //WM_APP + 119 GetDlgItem(IDC_BUTTON4)->EnableWindow(true); ((CButton*)GetDlgItem(IDC_RADIO3))->SetCheck(0); //uncheck ((CButton*)GetDlgItem(IDC_RADIO1))->SetCheck(1); //check OnBnClickedRadio1(); //tatsächlich aufrufen... MessageBox("Frickeltest"); //nur wenn diese MB drin ist, läuft alles sauber durch //ansonsten wird plötzlich OnBnClickedRadio3() gerufen... break; } return CDialog::WindowProc(message, wParam, lParam); }
-
Ich verstehe den Sinn und Zweck Deiner WndProc nicht.
Warum baust Du das nicht normal überdie Messagemap mit ON_MESSGE ein?
Nochmal: Grundsätzlich wird durch SetCheck kein WM_COMMAND Handler ausgelöst.
Wenn da ein Handler ausgelöst wird, dann wird dies an Deiner etwas merkwürdigen Art leigen Nachrichten zu senden und weiterzuleiten.Schau einfach in Deinen Callstack rein wer die Nachricht auslöst. Du wirst sehen, Du bist es selbst.