void CListCtrlEx::OnLButtonDown(UINT nFlags, CPoint point) { UINT uFlags = 0; int nHitItem = HitTest(point, &uFlags); // we need additional checking in owner-draw mode // because we only get LVHT_ONITEM BOOL bHit = FALSE; if (uFlags == LVHT_ONITEM && (GetStyle() & LVS_OWNERDRAWFIXED)) { CRect rect; GetItemRect(nHitItem, rect, LVIR_BOUNDS); LV_COLUMN lvc; lvc.mask = LVCF_FMT | LVCF_WIDTH; GetColumn(0, &lvc); // check if hit was on a state icon if (point.x >= (rect.left+lvc.cx)) bHit = TRUE; } else if (uFlags & LVHT_ONITEMSTATEICON) bHit = TRUE; if (bHit) CheckItem(nHitItem); else { if (m_pEdit) EndEditItem(); CListCtrl::OnLButtonDown(nFlags, point); } }
void CListCtrlEx::OnCaptureChanged(CWnd *pWnd) { if (m_pEdit) EndEditItem(); CListCtrl::OnCaptureChanged(pWnd); }
//******************************************************************************* void CBCGPDiagramVisualContainer::RemoveAll() { EndEditItem (FALSE); RemoveAllConnectors (); m_mapItems.RemoveAll (); m_mapConnectors.RemoveAll (); m_nLastID = 0; CBCGPVisualContainer::RemoveAll (); }
//******************************************************************************* BOOL CBCGPDiagramVisualContainer::OnKeyboardDown(UINT nChar, UINT nRepCnt, UINT nFlags) { if (nChar == VK_ESCAPE) { CBCGPVisualContainer::OnKeyboardDown(nChar, nRepCnt, nFlags); EndEditItem (FALSE); return TRUE; } return CBCGPVisualContainer::OnKeyboardDown(nChar, nRepCnt, nFlags); }
void CRayPropertyGridCtrl::OnSize(UINT nType, int cx, int cy) { // 阻止调整大小时列宽变为一半。 // 请参见 atlmfc\src\mfc\afxpropertygridctrl.cpp: CMFCPropertyGridCtrl::OnSize(UINT nType, int cx, int cy) // m_nLeftColumnWidth = cx / 2; CWnd::OnSize(nType, cx, cy); EndEditItem(); AdjustLayout(); }
void CListCtrlEx::OnClick(NMHDR* pNMHDR, LRESULT* pResult) { CString str; NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; if(pNMListView->iItem == -1 || pNMListView->iSubItem == -1) { *pResult =0; return; } EndEditItem(); }
void CListCtrlEx::OnKillFocus(CWnd* pNewWnd) { m_bHasFocus = false; CString csTmp; if (m_pEdit && (pNewWnd != this) && (pNewWnd != m_pEdit)) { EndEditItem(); } CListCtrl::OnKillFocus(pNewWnd); }
//****************************************************************************************** BOOL CCxNDArrayDimGrid::EditItem (CBCGPGridRow* pItem, LPPOINT lptClick) { ASSERT_VALID (this); ASSERT_VALID (pItem); ClearEndEditReason (); if (!EndEditItem ()) { return FALSE; } CCxNDArrayDimRow * pCxRow = (CCxNDArrayDimRow*)pItem; if (pCxRow->IsGroup () && !pCxRow->HasValueField ()) { return FALSE; } ASSERT (pCxRow == GetCurSel ()); CCxNDArrayDimItem * pCxItem = (CCxNDArrayDimItem *)pCxRow->GetItem(COL_DIM_TYPE); if ( pCxItem == NULL ) return FALSE; CString str; ConvertBSTR2CString(str, pCxItem->GetValue().bstrVal); if ( str.CompareNoCase("Row")==0 || str.CompareNoCase("Column")==0 ) { if ( GetCurSelItemID().m_nColumn == COL_DIM_VALUE ) { return FALSE; } } if (pCxRow->OnEdit (lptClick)) { pCxRow->Redraw (); //SetCurSel (m_idActive, SM_SET_ACTIVE_ITEM); SetCapture (); } else { return FALSE; } return TRUE; }
HRESULT CListCtrlEx::EditItem(int iItem) { HRESULT hr = S_OK; EndEditItem(); m_pEdit = new CEdit(); DWORD dwStyle = WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|WS_TABSTOP|ES_LEFT|ES_AUTOHSCROLL; CRect rcEdit; GetSubItemRect(iItem, 0, LVIR_BOUNDS, rcEdit); //rcEdit.left = 0; rcEdit.right = GetColumnWidth(0); rcEdit.bottom -= 1; m_pEdit->Create(dwStyle, rcEdit, this, 1001); m_pEdit->ShowWindow(SW_SHOW); CFont *pFont; pFont = GetFont(); m_pEdit->SetFont(pFont, true); CString csItemText = GetItemText(iItem, 0); m_pEdit->SetWindowText(csItemText); if (!csItemText.IsEmpty()) { m_pEdit->SetSel(0,-1); } m_iItem = iItem; m_pEdit->SetFocus(); return hr; }
//******************************************************************************* void CBCGPDiagramVisualContainer::OnCancelMode() { for (POSITION pos = m_lstSel.GetHeadPosition(); pos != NULL;) { CBCGPDiagramConnector* pObject = DYNAMIC_DOWNCAST(CBCGPDiagramConnector, m_lstSel.GetNext(pos)); if (pObject == NULL) { continue; } if (pObject->IsTrackingAnchorPoints ()) { pObject->EndTrackAnchorPoint (FALSE); pObject->Redraw (); } } m_bIsEditAnchorMode = FALSE; EndEditItem (FALSE); CBCGPVisualContainer::OnCancelMode (); }
HRESULT CListCtrlEx::InsertNewItem(int iItem, void *pItemData) { HRESULT hr = S_OK; EndEditItem(); LV_ITEM lviLeft; lviLeft.mask = LVIF_TEXT| LVIF_IMAGE | LVIF_STATE | LVIF_PARAM; lviLeft.iItem = iItem; lviLeft.iSubItem = 0; lviLeft.pszText = _T(""); lviLeft.iImage = 0; lviLeft.stateMask = 0; lviLeft.state = 0; lviLeft.lParam = (long)pItemData; InsertItem(&lviLeft); if (m_iColumnCount > 1) { LV_ITEM lviRight; lviRight.mask = LVIF_IMAGE | LVIF_STATE; lviRight.iItem = iItem; lviRight.iSubItem = 1; lviRight.iImage = 0; lviRight.iIndent = 0; lviRight.stateMask = LVIS_STATEIMAGEMASK; lviRight.state = INDEXTOSTATEIMAGEMASK(1); SetItem(&lviRight); } EditItem(iItem); SelectItem(iItem); return hr; }
CBCGPDiagramVisualContainer::~CBCGPDiagramVisualContainer() { EndEditItem (FALSE); RemoveAllConnectors (); }
//******************************************************************************* BOOL CBCGPDiagramVisualContainer::OnMouseDown(int nButton, const CBCGPPoint& pt) { EndEditItem(TRUE); if (m_bIsEditMode) { //---------------------------- // HitTest existing connectors //---------------------------- if (nButton == 0 && !m_bAddNewObjectMode) { CBCGPDiagramAnchorPoint anchor; CBCGPDiagramVisualObject* pOwnerObject = NULL; UINT uiHitTest = HitTestAnchorPoint (pt, anchor, pOwnerObject); CBCGPDiagramConnector* pConnector = DYNAMIC_DOWNCAST(CBCGPDiagramConnector, pOwnerObject); if (pConnector != NULL) { Select (pConnector); pConnector->BeginTrackAnchorPoint (anchor); pConnector->Redraw (); CBCGPBaseVisualObject* pObject = GetItem (anchor.m_idObject); if (pObject != NULL) { pObject->Redraw(); } m_bIsEditAnchorMode = TRUE; m_nDragMode = uiHitTest; m_ptDragStart = m_ptDragFinish = pt; Redraw(); return TRUE; } } //------------------ // Add new connector //------------------ else if (nButton == 0 && m_bAddNewObjectMode) { // CBCGPDiagramAnchorPoint anchor = NewAnchorFromPoint (pt); // // m_pNewObject = OnStartAddNewConnector (pt); // // if (m_pNewObject != NULL) // { // m_pNewObject->SetRect(CBCGPRect(pt, CBCGPSize(1., 1.))); // } // // Redraw(); // // return TRUE; } } return CBCGPVisualContainer::OnMouseDown (nButton, pt); }
//****************************************************************************************** void CCxNDArrayDimGrid::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { if (m_nDraggedColumn >= 0 || m_bTracking || m_bSelecting) { return; } CBCGPGridRow* pSel = GetCurSel (); // if (pSel && pSel->IsInPlaceEditing()) // { // return; // } if (pSel != NULL && pScrollBar->GetSafeHwnd () != NULL) { CSpinButtonCtrl* pWndSpin = pSel->GetSpinWnd (); if (pWndSpin != NULL && pWndSpin->GetSafeHwnd () == pScrollBar->GetSafeHwnd ()) { return; } } SetEndEditReason (EndEdit_Cancel | EndEdit_Layout); EndEditItem (TRUE); SCROLLINFO info; info.cbSize = sizeof(SCROLLINFO); info.fMask = SIF_TRACKPOS; if (nSBCode == SB_THUMBTRACK || nSBCode == SB_THUMBPOSITION) { GetScrollInfo(SB_VERT, &info); nPos = info.nTrackPos; } int nPrevOffset = m_nVertScrollOffset; int nVertScrollPage = m_nVertScrollPage; if (m_bVirtualMode) { int nItemsCount = max (1, m_nVertScrollPage / m_nRowHeight); nVertScrollPage = nItemsCount * m_nRowHeight; } switch (nSBCode) { case SB_LINEUP: m_nVertScrollOffset -= m_nRowHeight; break; case SB_LINEDOWN: m_nVertScrollOffset += m_nRowHeight; break; case SB_TOP: m_nVertScrollOffset = 0; break; case SB_BOTTOM: m_nVertScrollOffset = m_nVertScrollTotal; break; case SB_PAGEUP: m_nVertScrollOffset -= nVertScrollPage; break; case SB_PAGEDOWN: m_nVertScrollOffset += nVertScrollPage; break; case SB_THUMBPOSITION: case SB_THUMBTRACK: m_nVertScrollOffset = nPos; break; default: return; } m_nVertScrollOffset = max (0, min (m_nVertScrollOffset, m_nVertScrollTotal - nVertScrollPage + 1)); if (m_bVirtualMode) { // row alignment int nResidue = m_nVertScrollOffset % m_nRowHeight; if (nResidue > 0) { m_nVertScrollOffset -= nResidue; if (m_nVertScrollOffset + m_nVertScrollPage < m_nVertScrollTotal) { m_nVertScrollOffset += m_nRowHeight; } } } if (m_nVertScrollOffset == nPrevOffset) { return; } OnUpdateVScrollPos (m_nVertScrollOffset, nPrevOffset); SetScrollPos (SB_VERT, m_nVertScrollOffset); int dy = nPrevOffset - m_nVertScrollOffset; ShiftItems (0, dy); OnPosSizeChanged (); m_rectTrackSel = OnGetSelectionRect (); ScrollWindow (0, dy, m_rectList, m_rectList); ScrollWindow (0, dy, m_rectRowHeader, m_rectRowHeader); pSel = GetCurSel (); if (pSel != NULL) { pSel->AdjustButtonRect (); } OnAfterVScroll (m_nVertScrollOffset, nPrevOffset); UpdateWindow (); }
HRESULT CListCtrlEx::MoveSelectedDown() { HRESULT hr = S_OK; EndEditItem(); int iSelectedItem = GetSelectedItem(); if (iSelectedItem >= GetItemCount() - 1) return E_FAIL; static _TCHAR szBuff[MAX_PATH]; LV_ITEM lvi_SelectedLeft; lvi_SelectedLeft.mask = LVIF_TEXT | LVIF_STATE | LVIF_PARAM; lvi_SelectedLeft.iItem = iSelectedItem; lvi_SelectedLeft.iSubItem = 0; lvi_SelectedLeft.pszText = szBuff; lvi_SelectedLeft.cchTextMax = sizeof(szBuff); lvi_SelectedLeft.stateMask = LVIS_STATEIMAGEMASK; GetItem(&lvi_SelectedLeft); LV_ITEM lvi_SelectedRight; if (m_iColumnCount > 1) { lvi_SelectedRight.mask = LVIF_IMAGE | LVIF_STATE | LVIF_PARAM; lvi_SelectedRight.iItem = iSelectedItem; lvi_SelectedRight.iSubItem = 1; lvi_SelectedRight.pszText = szBuff; lvi_SelectedRight.cchTextMax = sizeof(szBuff); lvi_SelectedRight.stateMask = LVIS_STATEIMAGEMASK; GetItem(&lvi_SelectedRight); } DeleteItem(iSelectedItem); lvi_SelectedLeft.iItem = iSelectedItem+1; InsertItem(&lvi_SelectedLeft); if (m_iColumnCount > 1) { lvi_SelectedRight.iItem = iSelectedItem+1; SetItem(&lvi_SelectedRight); if (m_iSingleCheckedItem == iSelectedItem) { m_iSingleCheckedItem = iSelectedItem+1; LV_ITEM lvi2; lvi2.mask = LVIF_IMAGE | LVIF_STATE; lvi2.iItem = m_iSingleCheckedItem; lvi2.iSubItem = 1; lvi2.iImage = m_iSingleCheckedItem; lvi2.iIndent = 0; lvi2.stateMask = LVIS_STATEIMAGEMASK; lvi2.state = INDEXTOSTATEIMAGEMASK(2); SetItem(&lvi2); } else { LV_ITEM lvi2; lvi2.mask = LVIF_IMAGE | LVIF_STATE; lvi2.iItem = iSelectedItem+1; lvi2.iSubItem = 1; lvi2.iImage = iSelectedItem+1; lvi2.iIndent = 0; lvi2.stateMask = LVIS_STATEIMAGEMASK; lvi2.state = INDEXTOSTATEIMAGEMASK(1); SetItem(&lvi2); } } if (m_iSingleCheckedItem == iSelectedItem) m_iSingleCheckedItem = iSelectedItem+1; SelectItem(iSelectedItem+1); return hr; }
void CListCtrlEx::CheckItem(int iNewCheckedItem) { // reset if there is checked item if (m_iCheckOption == SINGLE_SELECTION) { if (m_iSingleCheckedItem != -1) { LV_ITEM lvi2; lvi2.mask = LVIF_IMAGE | LVIF_STATE; lvi2.iItem = m_iSingleCheckedItem; lvi2.iSubItem = 1; lvi2.iImage = m_iSingleCheckedItem; lvi2.iIndent = 0; lvi2.stateMask = LVIS_STATEIMAGEMASK; lvi2.state = INDEXTOSTATEIMAGEMASK(1); SetItem(&lvi2); } if(m_iMove != -1) { LV_ITEM lvi2; lvi2.mask = LVIF_IMAGE | LVIF_STATE; lvi2.iItem = m_iMove; lvi2.iSubItem = 1; lvi2.iImage = m_iMove; lvi2.iIndent = 0; lvi2.stateMask = LVIS_STATEIMAGEMASK; lvi2.state = INDEXTOSTATEIMAGEMASK(1); SetItem(&lvi2); m_iMove = -1; } // check new item and set its icon as the app icon if (m_iSingleCheckedItem == iNewCheckedItem) { m_iSingleCheckedItem = -1; } else if ((m_iSingleCheckedItem = iNewCheckedItem) != -1) { LV_ITEM lvi2; lvi2.mask = LVIF_IMAGE | LVIF_STATE; lvi2.iItem = m_iSingleCheckedItem; lvi2.iSubItem = 1; lvi2.iImage = m_iSingleCheckedItem; lvi2.iIndent = 0; lvi2.stateMask = LVIS_STATEIMAGEMASK; lvi2.state = INDEXTOSTATEIMAGEMASK(2); SetItem(&lvi2); SelectItem(m_iSingleCheckedItem); SetFocus(); } } else if (m_iCheckOption == MULTIPLE_SELECTION) { if (iNewCheckedItem != -1) { LV_ITEM lvi2; lvi2.mask = LVIF_IMAGE | LVIF_STATE; lvi2.iItem = iNewCheckedItem; lvi2.iSubItem = 1; lvi2.iImage = iNewCheckedItem; lvi2.iIndent = 0; lvi2.stateMask = LVIS_STATEIMAGEMASK; lvi2.state = IsChecked(iNewCheckedItem) ? INDEXTOSTATEIMAGEMASK(1) : INDEXTOSTATEIMAGEMASK(2); SetItem(&lvi2); SelectItem(iNewCheckedItem); SetFocus(); } } EndEditItem(); }