1

I have a dialog with radio button with groups of 4 buttons. DDX_Radio(pDX, D_RADIO_GROUPLEAD, intToStore) in DoDataExchange is there for saving and loading. It works perfectly fine.

Selection changed, DoDataExchange called, stores and loads data no problem.

Problem occurs when I hide one of the radio button (hide it via ShowWindow(SW_HIDE). Let's just call it 3rd button for reference. And previously, the selection was this 3rd button.

I have logic that will automatically select the default one (one with Group flagged as true in the editor). I call the button's SetCheck(1).

Visually everything seems to be working.

However, when I click on 2nd button, then try to call DoDataExchange (hence DDX_Radio), it will causes debug assertion failure. (dlgdata.cpp Line 286)

AND

the data is not properly populated back in intToStore.

Why could this be and how can I avoid this issue?

Thank you.

Shintaro Takechi
  • 1,215
  • 1
  • 17
  • 39
  • Where is your code? How can we answer your question if you don't provide the offending code? And did you look nat the code at dlgdata.cpp Line 286? This may give you a hint of what's going on. – Jabberwocky Mar 11 '17 at 07:43

1 Answers1

1

The problem is, that the auto radio button stuff in Windows skips buttons that are disabled. In detail. You click on button 2 while button 3 is selected and disabled. Button 2 gets selected but button 3 is not unchecked.

The next problem occurs when DoDataExchange runs. It doesn't check if a button is enabled or disabled. DDX_Radio just loops over all radio buttons, and it find 2 buttons in the group are enabled. This causes the ASSERT. DDX_Radio don't care if a button is enabled or disabled.

My advice: Use a custom OnClick handle by yourself, and disable all other buttons manually.

xMRi
  • 14,982
  • 3
  • 26
  • 59