У меня есть диалог MFC, в котором есть два переключателя. Я положил их в хорошую группу, их IDC один за другим (RB_LEFT, RB_RIGHT
).Переключатели MFC - поведение DDX_Radio и DDX_Control
Я хочу использовать DDX_Radio
таким образом я могу получить доступ к кнопкам, используя целочисленное значение, так в функции DoDataExchange я называю:
DDX_Radio(pDX, RB_LEFT, mRBLeftRight);
где mRBLeftRight является переменным членом целого типа. Также нужно отредактировать пуговицы свойства, так что я хотел использовать DDX_Control
чтобы отобразить их на переменные членов mRBLeft и mRBRight (CButton):
DDX_Control(pDX, RB_LEFT, mRBLeft);
DDX_Control(pDX, RB_RIGHT, mRBRight);
теперь, если я делаю вызов DDX_Control
всякий раз, когда DoDataExchange называется, то сбои приложений, потому что DDX_Control
заставляет RB_LEFT
обрабатывать сообщение, которое не может обрабатывать DDX_Radio
. Эта часть я понимаю.
Я решил не использовать DDX_Control
(удалить вызовы в DoDataExchange) и просто держать указатель на мои переключатели (CButton *) в моих классах. Так что в моей OnInitDialog функции, я делаю следующие вызовы:
mRBLeft= ((CButton*)GetDlgItem(RB_LEFT));
mRBRight = ((CButton*)GetDlgItem(RB_RIGHT));
Теперь, пока я не использую mRBLeft это будет хорошо, но если я делаю, бам, авария на DoDataExchange. То, что меня действительно озадачивает, если я изменю свой левый переключатель, используя ((CButton*)GetDlgItem(RB_LEFT)->SetCheck(true)
он будет работать. Ооо какая разница?
(я знаю, что это много хлопот для немного, но я просто хочу понять механику)
Я где-то читал, что не должен хранить указатель, возвращенный из GetDlgItem, что, вероятно, правильно, возможно, это причина моей проблемы? – levesque