⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mylistctrl.cpp

📁 这个是一个比较全的超市管理系统
💻 CPP
📖 第 1 页 / 共 3 页
字号:
}
void CMyListCtrl::Sort( int iColumn, BOOL bAscending )
{
  m_iSortColumn = iColumn;
  m_bSortAscending = bAscending;
  m_ctlHeader.SetSortArrow( m_iSortColumn, m_bSortAscending );
  VERIFY( SortItems( CompareFunction, reinterpret_cast<DWORD>( this ) ) );
}
void CMyListCtrl::OnDestroy() 
{
  for( int iItem = 0; iItem < GetItemCount(); iItem ++ )
    FreeItemMemory( iItem );
  
  CListCtrl::OnDestroy();
}
BOOL CMyListCtrl::SetItemText( int nItem, int nSubItem, LPCTSTR lpszText )
{
  if( !CListCtrl::SetItemText( nItem, nSubItem, lpszText ) )
    return FALSE;
  
  LPTSTR* arrpsz = GetTextArray( nItem );
  LPTSTR pszText = arrpsz[ nSubItem ];
  delete[] pszText;
  pszText = new TCHAR[ lstrlen( lpszText ) + 1 ];
  (void)lstrcpy( pszText, lpszText );
  arrpsz[ nSubItem ] = pszText;
  
  return TRUE;
}
BOOL CMyListCtrl::SetItemData( int nItem, DWORD dwData )
{
  if( nItem >= GetItemCount() )
    return FALSE;
  
  ItemData* pid = reinterpret_cast<ItemData*>( CListCtrl::GetItemData( nItem ) );
  ASSERT( pid );
  pid->dwData = dwData;
  
  return TRUE;
}
DWORD CMyListCtrl::GetItemData( int nItem ) const
{
  ASSERT( nItem < GetItemCount() );
  
  ItemData* pid = reinterpret_cast<ItemData*>( CListCtrl::GetItemData( nItem ) );
  ASSERT( pid );
  return pid->dwData;
}
BOOL CMyListCtrl::SetTextArray( int iItem, LPTSTR* arrpsz )
{
  ASSERT( CListCtrl::GetItemData( iItem ) == NULL );
  ItemData* pid = new ItemData;
  pid->arrpsz = arrpsz;
  return CListCtrl::SetItemData( iItem, reinterpret_cast<DWORD>( pid ) );
}
LPTSTR* CMyListCtrl::GetTextArray( int iItem ) const
{
  ASSERT( iItem < GetItemCount() );
  
  ItemData* pid = reinterpret_cast<ItemData*>( CListCtrl::GetItemData( iItem ) );
  return pid->arrpsz;
}
void CMyListCtrl::SetShowMenu(BOOL blnShow)
{
	blnMenu=blnShow;
}
BOOL CMyListCtrl::PreTranslateMessage(MSG* pMsg)
{	
	int i=itemX,j=itemY;
	CRect rcCtrl;
	if(pMsg->message == WM_KEYDOWN)
	{
		if(pMsg->wParam == VK_TAB)
		{
			if((itemY+1)<=m_iNumColumns)
			{
				SetEditPos(FALSE,i,j,FALSE);
				if(FALSE == Key_Ctrl(i,j))
                    Key_Shift(i,j);
				CListCtrl::GetSubItemRect(i,j,LVIR_LABEL,rcCtrl); 
				if(m_EditStyle==ctr_Edit_Click)
				OnLButtonDown(0,CPoint(rcCtrl.left+1,rcCtrl.top+1));
				else
				OnLButtonDblClk(0,CPoint(rcCtrl.left+1,rcCtrl.top+1));
				POSITION pos = CListCtrl::GetFirstSelectedItemPosition();
				 if (pos == NULL)
				 {
				 }
				 else
				 {
					 while (pos)
					 {
						 int ntpItem = CListCtrl::GetNextSelectedItem(pos);
						 CListCtrl::SetItemState(ntpItem,0,LVIS_SELECTED);
					 }
				 }
				 CListCtrl::SetItemState(i,  LVIS_SELECTED,  LVIS_SELECTED);
				return TRUE;
			}
		}
		else if(pMsg->wParam == VK_RETURN)
		{
			short sRet = GetKeyState(VK_CONTROL);
			sRet = sRet >>15;
			if(sRet == 0) 
			{
				if(GetColumnStyle(j)!=ctr_Edit_No)
				{
					SetEditPos(FALSE,i,j,FALSE);
					Key_Shift(i,j);
					CListCtrl::GetSubItemRect(i,j,LVIR_LABEL,rcCtrl); 
					if(m_EditStyle==ctr_Edit_Click)
					OnLButtonDown(0,CPoint(rcCtrl.left+1,rcCtrl.top+1));
					else
					OnLButtonDblClk(0,CPoint(rcCtrl.left+1,rcCtrl.top+1));
				}
				return TRUE;	
			}
			else
			{
				if(GetColumnStyle(j)==ctr_Edit_CboDown)
					ctl_EditComboDown.ShowDropDown(TRUE);
				if(GetColumnStyle(j)==ctr_Edit_CboDownList)
					ctl_EditComboDownList.ShowDropDown(TRUE);
				return TRUE;
			}
		}
		if(pMsg->wParam == VK_LEFT)
		{
			short sRet = GetKeyState(VK_CONTROL);
			sRet = sRet >>15;
			if(sRet!= 0) 
			{
				switch(GetColumnStyle(j))
				{
				case ctr_Edit_No:
					break;
				case ctr_Edit_Text:
					ctl_EditText.SetSel(0,0);
					break;
				case ctr_Edit_Date:
					ctl_EditDateTime.SetSel(0,0);
					break;
				case ctr_Edit_DateTime:
					ctl_EditDateTime.SetSel(0,0);
					break;
				case ctr_Edit_Time:
					ctl_EditDateTime.SetSel(0,0);
					break;
				case ctr_Edit_CboDown:
					ctl_EditComboDown.SetEditSel(0,0);
					break;
//				case ctr_Edit_CboDownList:
//					ctl_EditComboDownList.SetEditSel(0,0);
// 					break;
				case ctr_Edit_Num:
					ctl_EditNum.SetSel(0,0);
					break;
				}
			return TRUE;
			}
		}
		if(pMsg->wParam == VK_RIGHT)
		{
			short sRet = GetKeyState(VK_CONTROL);
			sRet = sRet >>15;
			if(sRet!= 0) 
			{
				switch(GetColumnStyle(j))
				{
				case ctr_Edit_No:
					break;
				case ctr_Edit_Text:
					ctl_EditText.SetSel(-1);
					break;
				case ctr_Edit_Date:
					ctl_EditDateTime.SetSel(-1);
					break;
				case ctr_Edit_DateTime:
					ctl_EditDateTime.SetSel(-1);
					break;
				case ctr_Edit_Time:
					ctl_EditDateTime.SetSel(-1);
					break;
				case ctr_Edit_Num:
					ctl_EditNum.SetSel(-1);
					break;
				case ctr_Edit_CboDown:
					CString str;
					ctl_EditComboDown.GetWindowText(str);
					ctl_EditComboDown.SetEditSel(str.GetLength(),str.GetLength());
					break;
				}
			return TRUE;
			}
		}
		if(pMsg->wParam == VK_DOWN)
		{
			CString strText;
			short sRet = GetKeyState(VK_CONTROL);
			sRet = sRet >>15;
			if(sRet!= 0) 
			{
				switch(GetColumnStyle(j))
				{
				case ctr_Edit_No:
					break;
				case ctr_Edit_Text:
					ctl_EditText.GetWindowText(strText);
					ctl_EditText.SetSel(0,strText.GetLength());
					break;
				case ctr_Edit_Date:
					strText=ctl_EditDateTime.GetDetectText();
					ctl_EditDateTime.SetSel(0,strText.GetLength());
					break;
				case ctr_Edit_DateTime:
					strText=ctl_EditDateTime.GetDetectText();
					ctl_EditDateTime.SetSel(0,strText.GetLength());
					break;
				case ctr_Edit_Time:
					strText=ctl_EditDateTime.GetDetectText();
					ctl_EditDateTime.SetSel(0,strText.GetLength());
					break;
				case ctr_Edit_Num:
					strText=ctl_EditNum.GetText();
					ctl_EditNum.SetSel(0,strText.GetLength());
					break;
				case ctr_Edit_CboDown:
					if(ctl_EditComboDown.GetCount()>0)
					ctl_EditComboDown.SetCurSel(ctl_EditComboDown.GetCount()-1);
					break;
				case ctr_Edit_CboDownList:
					if(ctl_EditComboDownList.GetCount()>0)
					ctl_EditComboDownList.SetCurSel(ctl_EditComboDownList.GetCount()-1);
					break;
				default:
					break;
				}
			return TRUE;
			}
		}
		if(pMsg->wParam == VK_UP)
		{
			CString strText;
			short sRet = GetKeyState(VK_CONTROL);
			sRet = sRet >>15;
			if(sRet!= 0) 
			{
				switch(GetColumnStyle(j))
				{
				case ctr_Edit_No:
					break;
				case ctr_Edit_Text:
					ctl_EditText.GetWindowText(strText);
					ctl_EditText.SetSel(0,strText.GetLength());
					break;
				case ctr_Edit_Date:
					strText=ctl_EditDateTime.GetDetectText();
					ctl_EditDateTime.SetSel(0,strText.GetLength());
					break;
				case ctr_Edit_DateTime:
					strText=ctl_EditDateTime.GetDetectText();
					ctl_EditDateTime.SetSel(0,strText.GetLength());
					break;
				case ctr_Edit_Time:
					strText=ctl_EditDateTime.GetDetectText();
					ctl_EditDateTime.SetSel(0,strText.GetLength());
					break;
				case ctr_Edit_Num:
					strText=ctl_EditNum.GetText();
					ctl_EditNum.SetSel(0,strText.GetLength());
					break;
				case ctr_Edit_CboDown:
					if(ctl_EditComboDown.GetCount()>0)
						ctl_EditComboDown.SetCurSel(0);
					break;
				case ctr_Edit_CboDownList:
					if(ctl_EditComboDownList.GetCount()>0)
						ctl_EditComboDownList.SetCurSel(0);
					break;
				default:
					break;
				}
			return TRUE;
			}
		}
	}
	
	return CListCtrl::PreTranslateMessage(pMsg);
}
void CMyListCtrl::OnParentNotify(UINT message, LPARAM lParam) 
{
	CListCtrl::OnParentNotify(message, lParam);
	//////////////////////////////////////////////////////////////////////////
	CHeaderCtrl* pHeaderCtrl = CListCtrl::GetHeaderCtrl();
	if(pHeaderCtrl == NULL)
		return;
	CRect rcHeader;
	pHeaderCtrl->GetWindowRect(rcHeader);
	ScreenToClient(rcHeader);
	//The x coordinate is in the low-order word and the y coordinate is in the high-order word.
	CPoint pt;
	pt.x = (int)LOWORD(lParam);
	pt.y = (int)HIWORD(lParam);
	if(rcHeader.PtInRect(pt) && message == WM_LBUTTONDOWN)
	{
			ctl_EditComboDown.ShowWindow(SW_HIDE);
			ctl_EditDateTime.ShowWindow(SW_HIDE);
			ctl_EditText.ShowWindow(SW_HIDE);
			ctl_EditNum.ShowWindow(SW_HIDE);
	}	
}
BOOL CMyListCtrl::Key_Shift(int& nItem,int& nSub)
{
	int nItemCount = CListCtrl::GetItemCount();
	CHeaderCtrl* pHeader = CListCtrl::GetHeaderCtrl();
	if(pHeader == NULL)
		return FALSE;
	short sRet = GetKeyState(VK_SHIFT);
	int nSubcCount = pHeader->GetItemCount();
	sRet = sRet >>15;
	if(sRet == 0)
	{
		nSub += 1;
		if(nSub >= nSubcCount)
		{
			if(nItem == nItemCount-1)
			{
				nItem = 0;
				nSub  = 0;
			}
			else
			{
				nSub = 0;
				nItem += 1;
			}
		}
		if(nItem >= nItemCount)
			nItem = nItemCount-1;
		return FALSE;
	}
	else
	{
		nSub -= 1;
		if(nSub < 0)
		{
			
			nSub = nSubcCount -1;
			nItem --;
		}
		
		if(nItem < 0)
			nItem = nItemCount-1;
		return TRUE;
		
	}
	return FALSE;
}
BOOL CMyListCtrl::Key_Ctrl(int& nItem,int &nSub)
{
    short sRet = GetKeyState(VK_CONTROL);
	sRet = sRet >>15;
	int nItemCount = CListCtrl::GetItemCount();
	if(sRet == 0)
	{
		
	}
	else
	{
		nItem = nItem >=nItemCount-1? 0:nItem+=1;
		return TRUE;
	}
	
	return FALSE;
}
void CMyListCtrl::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
	SetEditPos(FALSE,itemX,itemY,FALSE);
	CListCtrl::OnHScroll(nSBCode,nPos,pScrollBar);
}
void CMyListCtrl::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
	SetEditPos(FALSE,itemX,itemY,FALSE);
	CListCtrl::OnVScroll(nSBCode,nPos,pScrollBar);
}
void CMyListCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
    if (!lpDrawItemStruct) return;
	CDC*		pDC			= CDC::FromHandle(lpDrawItemStruct->hDC);
	CRect		rcItem;
	 	CFont ft;
	ft.CreateFont(10,10,0,0,
	FW_NORMAL,FALSE,FALSE,FALSE,
	ANSI_CHARSET,
	OUT_DEFAULT_PRECIS,
	CLIP_DEFAULT_PRECIS,
	DEFAULT_QUALITY,
	DEFAULT_PITCH|FF_MODERN,
	"MS Sans Serif");
	GetSubItemRect(lpDrawItemStruct->itemID,0,LVIR_LABEL,rcItem);
	CString str;
	str.Format("%d-----%d",lpDrawItemStruct->itemID,0);
	pDC->SelectObject(&ft);
	pDC->SetTextColor(RGB(255,0,0));
	pDC->TextOut(rcItem.left,rcItem.top,str);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -