Article ID: 114980
Article Last Modified on 11/21/2006
// DDX_MyRadio(), which is a modified DDX_Radio().
//
void AFXAPI DDX_MyRadio(CDataExchange* pDX, int nIDC, int& value)
// must be first in a group of auto radio buttons
{
HWND hWndCtrl = pDX->PrepareCtrl(nIDC);
ASSERT(::GetWindowLong(hWndCtrl, GWL_STYLE) & WS_GROUP);
ASSERT(::SendMessage(hWndCtrl, WM_GETDLGCODE, 0, 0L) &
DLGC_RADIOBUTTON);
if( pDX->m_bSaveAndValidate )
value = -1; // value if none found
// walk all children in group
int iButton = 0;
do
{
if( ::SendMessage(hWndCtrl, WM_GETDLGCODE, 0, 0L) &
DLGC_RADIOBUTTON
)
{
// control in group is a radio button
if( pDX->m_bSaveAndValidate )
{
if( ::SendMessage(hWndCtrl, BM_GETCHECK, 0, 0L) != 0 )
{
ASSERT(value == -1); // only set once
value = iButton;
}
}
else
{
// select button
::SendMessage( hWndCtrl, BM_SETCHECK, (iButton == value), 0L
);
}
iButton++;
}
else
{
TRACE( "Warning: skipping non-radio button in group.\n" );
}
hWndCtrl = ::GetWindow( hWndCtrl, GW_HWNDNEXT );
} while(hWndCtrl!=NULL &&
!(GetWindowLong(hWndCtrl,GWL_STYLE)&WS_GROUP));
}
Remember to replace the following lines in your CDialog::DoDataExchange():
//{{AFX_DATA_MAP(CMyDialog)
DDX_Radio(pDX, IDC_RADIO1, m_iRadio);
//}}AFX_DATA_MAP
with:
//{{AFX_DATA_MAP(CMyDialog)
DDX_MyRadio(pDX, IDC_RADIO1, m_iRadio);
//}}AFX_DATA_MAP
Additional query words: 1.00 1.50 2.00 2.10 2.50 hang kbSweptVC600
Keywords: kbbug kbfix kbuidesign KB114980