代码如下:OnRecvClickList()中动态创建了一个组合框控件。OnSelChangeCombo1()响应此组合框控件的CBN_SELCHANGE消息。经过调试,组合框能够响应CBN_SELCHANGE事件,但是在OnSelChangeCombo1()无法选择组合框控件中的下拉列表项。经过对调试,发现不管如何选择下拉列表,index始终为-1。也就是index = m_combo[m_line].GetEditSel();根本没有起作用。
请各位高手帮我看看,我的代码哪里有问题?
谢谢。
void CIVRConfig::OnRecvClickList(WPARAM wParam,LPARAM lParam)
{
int line;
int col;
line = wParam;
col = lParam;
if(col == 2)
{
if(m_combo[line].m_hWnd == NULL)
{
CRect rcCtrl;
m_ListCtrl.GetSubItemRect(line,2,LVIR_LABEL,rcCtrl);
m_combo[line].Create(CBS_DROPDOWNLIST |CBS_DROPDOWN|CBS_SORT,CRect(0,0,0,0),this,IDS_COMBO1);
m_combo[line].SetWindowPos(NULL,rcCtrl.left,rcCtrl.top,rcCtrl.Width(),rcCtrl.Height()*5,SWP_SHOWWINDOW);
CFont tpFont;
tpFont.CreateStockObject(DEFAULT_GUI_FONT);
m_combo[line].SetFont(&tpFont);
tpFont.DeleteObject();
::SetFocus(m_combo[line].GetSafeHwnd());//GetSafeHwnd返回windows窗口句柄,SetFocus返回活动窗口指针。
m_combo[line].AddString("数字线路");
m_combo[line].AddString("模拟线路");
m_combo[line].ShowDropDown(true);
m_combo[line].GetDroppedState();
}
m_combo[line].ShowWindow(SW_SHOW);
m_combo[line].SetCurSel(0);
UpdateData(false);
}
m_line = line;
}void CIVRConfig::OnSelChangeCombo1() 
{
int index = -1;
CString ComboString;
if(m_line != -1)
{
index = m_combo[m_line].GetEditSel();
if(index != -1)
{
m_combo[m_line].GetLBText(index,ComboString);
AfxMessageBox(ComboString);
}
m_line = -1;
}
}

解决方案 »

  1.   

    你是不是做麻烦了!OnRecvClickList(WPARAM wParam,LPARAM lParam) ,加这个自定义消息是多余的。你的下拉框中的项值要么直接初始化上去,要么从数据库里面填充上去。看你的代码是初始化上去的,非数据库读取上去的:M_Combo;//比方这个是你的下拉控件变量,直接在初始化函数添加项,M_Combo.ReSetContyent();
    M_Combo.AddString(_T("数字线路"));
    M_Combo.AddString(_T("模拟线路"));
    M_Combo.setCurl(-1);
    然后在OnSelChangeCombo1()int index ;
    index = M_Combo.GetCurl();//这个才是你选择的项的的索引CString ComboString;M_Combo.GetLBText(index,ComboString);
    AfxMessageBox(ComboString);