删除项目后,MFC ComboBox使列表无效

时间:2015-11-10 08:38:29

标签: visual-c++ mfc

我有一个带有一些项目的MFC ComboBox,如下所示:

ComboBox with items

当我使用以下代码删除项目时:

void CComboBoxTestDlg::OnBnClickedButtonClear()
{        
        CComboBox *pCmb = (CComboBox *)GetDlgItem(IDC_COMBO);
         pCmb->ResetContent();
}

它会删除ComboBox中的字符串,但它会使列表无效,其高度与内部项目相同,如下所示:

ComboBox after deleting its content

我也尝试了这段代码:

for (int i = pCmb->GetCount() - 1; i >= 0; i--)  
        pCmb->DeleteString(i); 

并删除里面的项目,但它会使不需要的列表无效。

有没有办法删除ComboBox的内容而不保留剩余的空列表?

1 个答案:

答案 0 :(得分:3)

试试这个:

当下拉列表中的项目数为零时,请调用:

CRect rect;
pCmb->GetClientRect(&rect);
pCmb->SetWindowPos(NULL, 0, 0, rect.Width(), rect.Height() + 1, SWP_NOMOVE);

现在下拉框的高度很小。

如果下拉列表中的项目数不为零(即添加项目时),请调用此方法:

CRect rect;
pCmb->GetClientRect(&rect);
pCmb->SetWindowPos(NULL, 0, 0, rect.Width(), rect.Height() * N, SWP_NOMOVE);

其中N是组合框下拉框中所需的最大高度。