Example #1
0
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);	
   }
}
Example #2
0
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();
}
Example #6
0
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();
}
Example #7
0
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;
}
Example #9
0
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 ();
}
Example #11
0
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 ();
}
Example #15
0
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;
}
Example #16
0
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();
}