void AFXAPI DDX_Radio(CDataExchange* pDX, int nIDC, int& value) // must be first in a group of auto radio buttons { pDX->PrepareCtrl(nIDC); HWND hWndCtrl; pDX->m_pDlgWnd->GetDlgItem(nIDC, &hWndCtrl); 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); } //第三个变量1为BST_CHECKED,0为BST_UNCHECHKED iButton++; } else { TRACE(traceAppMsg, 0, "Warning: skipping non-radio button in group.\n"); } hWndCtrl = ::GetWindow(hWndCtrl, GW_HWNDNEXT); } while (hWndCtrl != NULL && !(GetWindowLong(hWndCtrl, GWL_STYLE) & WS_GROUP)); }由上可知,一个组内的radio button是可以通过一个int变量存值的.哈哈正确方法: DDX_Radio(pDX, IDC_RADIO3, m_nTextRadio); int m_nTextRadio; //就可以了. //bool m_nTextRadio; //或者是这个,只能保存最多二个radio的值...具体方法:选中一组radio button的"头",右键添加value控件变量的时候,里面下拉框只会出现BOOL类型的选项. 不过可以那个编辑框可以手动输入为int
void AFXAPI DDX_Radio(CDataExchange* pDX, int nIDC, int& value) // must be first in a group of auto radio buttons { pDX->PrepareCtrl(nIDC); HWND hWndCtrl; pDX->m_pDlgWnd->GetDlgItem(nIDC, &hWndCtrl);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); } //第三个变量1为BST_CHECKED,0为BST_UNCHECHKED iButton++; } else { TRACE(traceAppMsg, 0, "Warning: skipping non-radio button in group.\n"); } hWndCtrl = ::GetWindow(hWndCtrl, GW_HWNDNEXT);} while (hWndCtrl != NULL && !(GetWindowLong(hWndCtrl, GWL_STYLE) & WS_GROUP)); }
是控件变量吗?类别为value的时候没有int选项啊.只有bool类型的控件变量!
说来惭愧
一直不知道用向导怎么添加成组Radio的整型控制变量
都是手动添加的
类似
DDX_Radio(pDX, IDC_RADIO_FOLDER, m_nType);
在消息响应函数中判断,具体代码: if (m_radio1==0)//选择第一个radio
{
fun1(); //选择第一个radio时的操作
}
else if(m_radio1==1)//选择第二个radio
{
fun2();//选择第二个radio时的操作
}
//....依次类推,直到
else if(m_radio1==19) //选择第20个radio
fun20(); //选择第20个radio时的操作
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAdvEditDemoDlg)
DDX_Control(pDX, IDC_EDIT2, m_edt2);
DDX_Control(pDX, IDC_EDIT1, m_edt);
//}}AFX_DATA_MAP
for(int i = 0; i < 7; i ++)
DDX_Control(pDX, IDC_EDIT3 + i, m_AdvEdit[i]);
}
参照上面的方法,处理一下了。那个是处理EDIT控件的,共有7个。m_AdvEdit[i]是7个CEdit对象了。
afx_msg void OnBtnClicked(UINT nCmdID); ON_CONTROL_RANGE(BN_CLICKED, IDC_.., IDC_.., ...); //注意ID号连续这20个控件的ID必须为连续的就行
// must be first in a group of auto radio buttons
{
pDX->PrepareCtrl(nIDC);
HWND hWndCtrl;
pDX->m_pDlgWnd->GetDlgItem(nIDC, &hWndCtrl); 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);
} //第三个变量1为BST_CHECKED,0为BST_UNCHECHKED
iButton++;
}
else
{
TRACE(traceAppMsg, 0, "Warning: skipping non-radio button in group.\n");
}
hWndCtrl = ::GetWindow(hWndCtrl, GW_HWNDNEXT); } while (hWndCtrl != NULL &&
!(GetWindowLong(hWndCtrl, GWL_STYLE) & WS_GROUP));
}由上可知,一个组内的radio button是可以通过一个int变量存值的.哈哈正确方法:
DDX_Radio(pDX, IDC_RADIO3, m_nTextRadio);
int m_nTextRadio; //就可以了.
//bool m_nTextRadio; //或者是这个,只能保存最多二个radio的值...具体方法:选中一组radio button的"头",右键添加value控件变量的时候,里面下拉框只会出现BOOL类型的选项.
不过可以那个编辑框可以手动输入为int
void AFXAPI DDX_Radio(CDataExchange* pDX, int nIDC, int& value)
// must be first in a group of auto radio buttons
{
pDX->PrepareCtrl(nIDC);
HWND hWndCtrl;
pDX->m_pDlgWnd->GetDlgItem(nIDC, &hWndCtrl);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);
} //第三个变量1为BST_CHECKED,0为BST_UNCHECHKED
iButton++;
}
else
{
TRACE(traceAppMsg, 0, "Warning: skipping non-radio button in group.\n");
}
hWndCtrl = ::GetWindow(hWndCtrl, GW_HWNDNEXT);} while (hWndCtrl != NULL &&
!(GetWindowLong(hWndCtrl, GWL_STYLE) & WS_GROUP));
}