У меня есть диалог с переключателем с группами из 4 кнопок.
DDX_Radio(pDX, D_RADIO_GROUPLEAD, intToStore)
в DoDataExchange есть для сохранения и загрузки.
Работает отлично.
Выбор изменен, DoDataExchange вызван, сохраняет и загружает данные без проблем.
Проблема возникает, когда я скрываю один из переключателей (скрыть через ShowWindow(SW_HIDE)
, Давайте просто назовем это 3-й кнопкой для справки. И ранее выбор был этой 3-й кнопкой.
У меня есть логика, которая будет автоматически выбирать по умолчанию (тот, с группой помечены как истинные в редакторе). Я вызываю кнопку SetCheck (1).
Визуально все вроде бы работает.
Однако, когда я нажимаю 2-ю кнопку, а затем пытаюсь вызвать DoDataExchange (отсюда DDX_Radio), это приведет к ошибке отладочного подтверждения. (dlgdata.cpp Строка 286)
А ТАКЖЕ
данные не правильно заполнены обратно в intToStore
,
Почему это может быть и как я могу избежать этой проблемы?
Спасибо.
Проблема в том, что в Windows функция автоматического переключателя пропускает отключенные кнопки. В деталях. Вы нажимаете кнопку 2, когда кнопка 3 выбрана и отключена. Кнопка 2 выбирается, но кнопка 3 не проверяется.
Следующая проблема возникает при запуске DoDataExchange. Он не проверяет, включена ли кнопка или отключена. DDX_Radio просто перебирает все переключатели и обнаруживает, что 2 группы в группе включены. Это вызывает ASSERT. DDX_Radio не волнует, включена кнопка или отключена.
Мой совет: используйте свой собственный дескриптор OnClick и отключите все остальные кнопки вручную.
Других решений пока нет …