CComboBox* CPlayerListCtrl::ShowInPlaceComboBox(int nItem, int nCol, CAtlList<CString>& lstItems, int nSel, bool bShowDropDown) { CRect rect; if (!PrepareInPlaceControl(nItem, nCol, rect)) { return nullptr; } DWORD dwStyle = /*WS_BORDER|*/WS_CHILD | WS_VISIBLE | WS_VSCROLL /*|WS_HSCROLL*/ | CBS_DROPDOWNLIST | CBS_DISABLENOSCROLL/*|CBS_NOINTEGRALHEIGHT*/; CComboBox* pComboBox = DEBUG_NEW CInPlaceComboBox(nItem, nCol, lstItems, nSel); pComboBox->Create(dwStyle, rect, this, IDC_COMBO1); CorrectComboListWidth(*pComboBox); int width = GetColumnWidth(nCol); if (pComboBox->GetDroppedWidth() < width) { pComboBox->SetDroppedWidth(width); } if (bShowDropDown) { pComboBox->ShowDropDown(); } m_fInPlaceDirty = false; return pComboBox; }
CWinHotkeyCtrl* CPlayerListCtrl::ShowInPlaceWinHotkey(int nItem, int nCol) { CRect rect; if (!PrepareInPlaceControl(nItem, nCol, rect)) { return nullptr; } DWORD dwStyle = /*WS_BORDER|*/WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL | ES_LEFT; CWinHotkeyCtrl* pWinHotkey = DEBUG_NEW CInPlaceWinHotkey(nItem, nCol, GetItemText(nItem, nCol)); pWinHotkey->Create(dwStyle, rect, this, IDC_WINHOTKEY1); m_fInPlaceDirty = false; return pWinHotkey; }
CEdit* CPlayerListCtrl::ShowInPlaceFloatEdit(int nItem, int nCol) { CRect rect; if (!PrepareInPlaceControl(nItem, nCol, rect)) { return nullptr; } DWORD dwStyle = /*WS_BORDER|*/WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL | ES_RIGHT; CEdit* pFloatEdit = DEBUG_NEW CInPlaceFloatEdit(nItem, nCol, GetItemText(nItem, nCol)); pFloatEdit->Create(dwStyle, rect, this, IDC_EDIT1); m_fInPlaceDirty = false; return pFloatEdit; }
CListBox* CPlayerListCtrl::ShowInPlaceListBox(int nItem, int nCol, CAtlList<CString>& lstItems, int nSel) { CRect rect; if (!PrepareInPlaceControl(nItem, nCol, rect)) { return nullptr; } DWORD dwStyle = WS_BORDER | WS_CHILD | WS_VISIBLE | WS_VSCROLL/*|WS_HSCROLL*/ | LBS_NOTIFY; CListBox* pListBox = DEBUG_NEW CInPlaceListBox(nItem, nCol, lstItems, nSel); pListBox->Create(dwStyle, rect, this, IDC_LIST1); CRect ir; GetItemRect(m_nItemClicked, &ir, LVIR_BOUNDS); pListBox->SetItemHeight(-1, ir.Height()); CDC* pDC = pListBox->GetDC(); CFont* pWndFont = GetFont(); pDC->SelectObject(pWndFont); int width = GetColumnWidth(nCol); POSITION pos = lstItems.GetHeadPosition(); while (pos) { int w = pDC->GetTextExtent(lstItems.GetNext(pos)).cx + 16; if (width < w) { width = w; } } ReleaseDC(pDC); CRect r; pListBox->GetWindowRect(r); ScreenToClient(r); r.top = ir.bottom; r.bottom = r.top + pListBox->GetItemHeight(0) * (pListBox->GetCount() + 1); r.right = r.left + width; pListBox->MoveWindow(r); m_fInPlaceDirty = false; return pListBox; }
CEdit* CPlayerListCtrl::ShowInPlaceEdit(int nItem, int nCol) { CRect rect; if(!PrepareInPlaceControl(nItem, nCol, rect)) return(NULL); DWORD dwStyle = /*WS_BORDER|*/WS_CHILD|WS_VISIBLE|ES_AUTOHSCROLL; LV_COLUMN lvcol; lvcol.mask = LVCF_FMT; GetColumn(nCol, &lvcol); dwStyle |= (lvcol.fmt&LVCFMT_JUSTIFYMASK) == LVCFMT_LEFT ? ES_LEFT : (lvcol.fmt&LVCFMT_JUSTIFYMASK) == LVCFMT_RIGHT ? ES_RIGHT : ES_CENTER; CEdit* pEdit = new CInPlaceEdit(nItem, nCol, GetItemText(nItem, nCol)); pEdit->Create(dwStyle, rect, this, IDC_EDIT1); m_fInPlaceDirty = false; return pEdit; }