我有一个带有一些项目的MFC ComboBox,如下所示:
当我使用以下代码删除项目时:
void CComboBoxTestDlg::OnBnClickedButtonClear()
{
CComboBox *pCmb = (CComboBox *)GetDlgItem(IDC_COMBO);
pCmb->ResetContent();
}
它会删除ComboBox中的字符串,但它会使列表无效,其高度与内部项目相同,如下所示:
我也尝试了这段代码:
for (int i = pCmb->GetCount() - 1; i >= 0; i--)
pCmb->DeleteString(i);
并删除里面的项目,但它会使不需要的列表无效。
有没有办法删除ComboBox的内容而不保留剩余的空列表?
答案 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
是组合框下拉框中所需的最大高度。