FC)。
按钮单击
可以使用常规方法,根据ID为按钮绑定单击的消息响应函数:
ON_BN_CLICKED(IDC_BTN_START + 0, &CMFCApplication1Dlg::OnBtnClik)
如果生成的按钮比较多,一个个处理会很麻烦,需要使用批量绑定,批量绑定按钮单击消息响应函数的步骤:
- 在对话框类的定义文件(.h文件)中声明消息响应函数OnBtnClick。
afx_msg void OnBtnClick(UINT uID);
注:OnBtnClick函数的参数nID代表响应函数对应按钮控件的ID号,单个按钮可不设参数。
- 在对话框类的函数实现文件(.cpp文件)中定义消息映射ON_COMMAND_RANGE (多个按钮),根据其输入ID分辨具体响应那个按钮。
ON_COMMAND_RANGE(IDC_BTN_START + 0, IDC_BTN_START + 3, &CMFCApplication1Dlg::OnBtnClik)
注:在函数实现文件中的消息映射部分(BEGIN_MESSAGE_MAP与END_MESSAGE_MAP之间)定义按钮控件与其消息响应函数之间的映射关系。
- 实现消息响应函数OnBtnClick,在对话框类的函数实现文件(.cpp文件)中给出具体的按钮消息响应。
void CMFCApplication1Dlg::OnBtnClik(UINT uID)
{
int id = uID -IDC_BTN_START;
CString str;
str.Format("当前ID %d", id);
int result = MessageBox(str, TEXT("确认"), MB_YESNO);
}
组合框选中
使用ON_CBN_SELCHANGE消息:
ON_CBN_SELCHANGE(IDC_CMB_START, &CMFCApplication1Dlg::OnSelComChange)
声明消息响应函数:
afx_msg void OnSelComChange();
实现消息响应函数:
void CMFCApplication1Dlg::OnSelComChange()//选择下拉框某一列的时候得到响应
{
for (size_t i = 0; i < pCmb.size(); i++)
{
if (pCmb[i]==GetFocus())
{
CString str(_T(""));//获取当前下拉框的值
pCmb[i]->GetLBText(pCmb[i]->GetCurSel(), str);//获取CComBox下拉框当前选中的值
MessageBox(str, TEXT("确认"), MB_OK);
}
}
}
疑问:明明对一个控件ID映射了消息响应函数,但后面的组合框控件都能进入OnSelComChange() 函数,后面有时间再研究。