CComboBox* CMySuperGrid::ShowList(int nItem, int nCol, CStringList *lstItems) { CString strFind = GetItemText(nItem, nCol); //basic code start CRect rect; int offset = 0; // Make sure that the item is visible if( !EnsureVisible(nItem, TRUE)) return NULL; GetSubItemRect(nItem, nCol, LVIR_BOUNDS, rect); // Now scroll if we need to expose the column CRect rcClient; GetClientRect(rcClient); if( offset + rect.left < 0 || offset + rect.left > rcClient.right ) { CSize size; size.cx = offset + rect.left; size.cy = 0; Scroll(size); rect.left -= size.cx; } rect.left += offset; rect.right = rect.left + GetColumnWidth(nCol); if(rect.right > rcClient.right) rect.right = rcClient.right; //basic code end rect.bottom += 10 * rect.Height();//dropdown area DWORD dwStyle = WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL|CBS_DROPDOWNLIST | CBS_DISABLENOSCROLL; CComboBox *pList = new CComboInListView(nItem, nCol, lstItems); pList->Create(dwStyle, rect, this, IDC_COMBOBOXINLISTVIEW); pList->ModifyStyleEx(0,WS_EX_CLIENTEDGE);//can we tell at all pList->SetHorizontalExtent(CalcHorzExtent(pList, lstItems)); pList->ShowDropDown(); pList->SelectString(-1, strFind.GetBuffer(1)); // The returned pointer should not be saved return pList; }