要把20个按钮的情况保存到一个变量中.
难道要我添加20个单击事件?
高手帮忙化简之.
21 个解决方案
#1
这个按钮可以将第一个设置为group类型的,然后就可以用类向导添加一个整形变量,当你点击第一个按钮的时候,这个变量值为0,第二个为1……以此类推,直到遇见下一个类型为group的radio button
#2
将第一个radio button的group属性设为true,再添加一个变量,这个变量就和20个radio button关联了
#3
afx_msg void OnBtnClicked(UINT nCmdID);
ON_CONTROL_RANGE(BN_CLICKED, IDC_.., IDC_.., ...); //注意ID号连续
ON_CONTROL_RANGE(BN_CLICKED, IDC_.., IDC_.., ...); //注意ID号连续
#4
是控件变量吗?
类别为value的时候没有int选项啊.
只有bool类型的控件变量!
#5
你把你的第一个radio button的Group属性选中,然后,对这个radio button关联一个int类型的变量,就行了,
#6
大哥,请把你的代码发出来.
DDX怎么写的.
DDX怎么写的.
#7
用的2005吧
说来惭愧
一直不知道用向导怎么添加成组Radio的整型控制变量
都是手动添加的
类似
说来惭愧
一直不知道用向导怎么添加成组Radio的整型控制变量
都是手动添加的
类似
DDX_Radio(pDX, IDC_RADIO_FOLDER, m_nType);
#8
给第一个添加变量
#9
设为一个GROUP
#10
应该可以手动输入变量类型的吧~
#11
选择第一个radio,选择属性里的“组”,然后进入类向导,给这个radio添加一个变量,如:m_radio1.
在消息响应函数中判断,具体代码:
在消息响应函数中判断,具体代码:
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时的操作
#12
那么多的IF,ELSE IF,用switch不好么?
#13
void CAdvEditDemoDlg::DoDataExchange(CDataExchange* pDX)
{
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对象了。
{
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对象了。
#14
哈哈 还可以这么用 顶楼上
#15
无需20个,
afx_msg void OnBtnClicked(UINT nCmdID);
ON_CONTROL_RANGE(BN_CLICKED, IDC_.., IDC_.., ...); //注意ID号连续
这20个控件的ID必须为连续的就行
afx_msg void OnBtnClicked(UINT nCmdID);
ON_CONTROL_RANGE(BN_CLICKED, IDC_.., IDC_.., ...); //注意ID号连续
这20个控件的ID必须为连续的就行
#16
设为一个GROUP
#17
在要获取 变量值时前增加 函数UpdateData(TRUE);不然获取的不是最新的值.
#18
学习 好强大
#19
这个我也不知道 很抱歉 我也是一个个添加的 我当是来学习了
#20
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
// 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
#21
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));
}
#1
这个按钮可以将第一个设置为group类型的,然后就可以用类向导添加一个整形变量,当你点击第一个按钮的时候,这个变量值为0,第二个为1……以此类推,直到遇见下一个类型为group的radio button
#2
将第一个radio button的group属性设为true,再添加一个变量,这个变量就和20个radio button关联了
#3
afx_msg void OnBtnClicked(UINT nCmdID);
ON_CONTROL_RANGE(BN_CLICKED, IDC_.., IDC_.., ...); //注意ID号连续
ON_CONTROL_RANGE(BN_CLICKED, IDC_.., IDC_.., ...); //注意ID号连续
#4
是控件变量吗?
类别为value的时候没有int选项啊.
只有bool类型的控件变量!
#5
你把你的第一个radio button的Group属性选中,然后,对这个radio button关联一个int类型的变量,就行了,
#6
大哥,请把你的代码发出来.
DDX怎么写的.
DDX怎么写的.
#7
用的2005吧
说来惭愧
一直不知道用向导怎么添加成组Radio的整型控制变量
都是手动添加的
类似
说来惭愧
一直不知道用向导怎么添加成组Radio的整型控制变量
都是手动添加的
类似
DDX_Radio(pDX, IDC_RADIO_FOLDER, m_nType);
#8
给第一个添加变量
#9
设为一个GROUP
#10
应该可以手动输入变量类型的吧~
#11
选择第一个radio,选择属性里的“组”,然后进入类向导,给这个radio添加一个变量,如:m_radio1.
在消息响应函数中判断,具体代码:
在消息响应函数中判断,具体代码:
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时的操作
#12
那么多的IF,ELSE IF,用switch不好么?
#13
void CAdvEditDemoDlg::DoDataExchange(CDataExchange* pDX)
{
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对象了。
{
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对象了。
#14
哈哈 还可以这么用 顶楼上
#15
无需20个,
afx_msg void OnBtnClicked(UINT nCmdID);
ON_CONTROL_RANGE(BN_CLICKED, IDC_.., IDC_.., ...); //注意ID号连续
这20个控件的ID必须为连续的就行
afx_msg void OnBtnClicked(UINT nCmdID);
ON_CONTROL_RANGE(BN_CLICKED, IDC_.., IDC_.., ...); //注意ID号连续
这20个控件的ID必须为连续的就行
#16
设为一个GROUP
#17
在要获取 变量值时前增加 函数UpdateData(TRUE);不然获取的不是最新的值.
#18
学习 好强大
#19
这个我也不知道 很抱歉 我也是一个个添加的 我当是来学习了
#20
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
// 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
#21
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));
}