combbox的级联使用,当选择一个combbox的时候,例外一个combbox根据第一个选择变化而变化
1. 新建一个基于对话框的MFC工程,在对话框上添加两个combbox控件
2. 对combox控件添加对象的变量,这里为m_combProv 和 m_combCity,另外还需要个结构体来放置内容std::multimap<unsigned long, std::string> m_mumapCity;(需要包含map头文件)
3 添加第一个combbox的消息响应函数ON_CBN_SELCHANGE(IDC_COMBO1, &CcombDlg::OnCbnSelchangeCombo1)
4. 下面问主要代码:
void CcombDlg::OnCbnSelchangeCombo1()
{
RefreshComb();
}
// 初始化第一个combbox
void CcombDlg::initComb()
{
m_mumapCity.insert(std::make_pair(1001, "成都"));
m_mumapCity.insert(std::make_pair(1001, "绵阳"));
m_mumapCity.insert(std::make_pair(1001, "资阳"));
m_mumapCity.insert(std::make_pair(1002, "海淀"));
m_mumapCity.insert(std::make_pair(1002, "朝阳"));
m_mumapCity.insert(std::make_pair(1002, "昌平"));
int iTemt = m_combProv.AddString("四川");
m_combProv.SetItemData(iTemt, 1001);
iTemt = m_combProv.AddString("北京");
m_combProv.SetItemData(iTemt, 1002);
m_combProv.SetCurSel(0);
RefreshComb();
}
// 根据第一个combbox的选择跟新第二个combbox
void CcombDlg::RefreshComb()
{
m_combCity.ResetContent();
unsigned long uId = m_combProv.GetItemData(m_combProv.GetCurSel());
typedef std::multimap<unsigned long, std::string>::iterator cityIt;
std::pair<cityIt, cityIt> pos = m_mumapCity.equal_range(uId);
while(pos.first != pos.second)
{
std::string str = pos.first->second;
int iItem = m_combCity.AddString(str.c_str());
++pos.first;
}
m_combCity.SetCurSel(0);
}