最近写一个工具需要在CListCtrl中内嵌ComboBox,相关代码如下:
int hei;
CRect rect;
CWnd* wnd = GetDlgItem(IDC_LIST1); m_list.GetSubItemRect(0, 1, LVIR_LABEL, rect);
hei = rect.Height();
rect.bottom = rect.top + 30 * rect.Height();
CComboBox* mbox = new CComboBox();
DWORD dwStyle =  WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL|CBS_DROPDOWNLIST | CBS_DISABLENOSCROLL;
mbox->Create(dwStyle, rect, wnd, 1001);
//m_list.box->ModifyStyleEx(0,WS_EX_CLIENTEDGE);
mbox->SetItemHeight(-1, hei);
CFont* pFont = mbox->GetParent()->GetFont();
mbox->SetFont(pFont);
mbox->InsertString(0, _T("test0"));
mbox->InsertString(1, _T("test1"));但是运行之后出现两个问题:
1、设置了edit子框的高度,但是显示出来的高度还是超过了CListCtrl的行高。
2、如果执行InsertString,下拉框显示正常。一旦执行InsertString下拉框就只能显示半行字那么多了。
请教各位大虾,该怎么解决?

解决方案 »

  1.   

    看看这个
    http://www.codeproject.com/KB/combobox/editing_subitems_in_listcontrol.aspx
      

  2.   

    http://www.codeproject.com/KB/combobox/CustomizedReportListCtrl.aspx 
      

  3.   

    我看了一下这两个例子和另外几个例子。都是单击subitem之后响应的,而且出来的combobox也是大于原来subitem的高度的。我是想让combobox和subitem一样高,呵呵。
      

  4.   

    下拉框不会很窄或很宽的,和字高有关系.“如果执行InsertString,下拉框显示正常。一旦执行InsertString下拉框就只能显示半行字那么多了。”是说下拉列表只有很窄一点吗?我一直这样用,没见出过问题: CRect rect;
    CComboBox *pComboBox;

    GetSubItemRect(nItem,nSubItem,LVIR_BOUNDS,rect); rect.bottom=rect.top+150; pComboBox=new CComboBox;
    pComboBox->Create(WS_CHILD|WS_VISIBLE|WS_VSCROLL|CBS_AUTOHSCROLL|CBS_DROPDOWNLIST,
    rect, this, 1002);
      

  5.   

    找到问题了,我设置的格式里面设置了水平滚动条就成这样了
    DWORD   dwStyle   =     WS_CHILD   ¦   WS_VISIBLE   ¦   WS_VSCROLL   ¦   WS_HSCROLL ¦CBS_DROPDOWNLIST   ¦   CBS_DISABLENOSCROLL; 难道内嵌的时候不能设置水平滚动?