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

📄 reportctrl.cpp

📁 用户管理系统
💻 CPP
📖 第 1 页 / 共 3 页
字号:

		nCount++;
	}

	return nCount;
}

void CReportCtrl::SetCheckboxes(BOOL bSet)
{
	DWORD dwStype = CListCtrl::GetExtendedStyle();
	if (bSet)
	{
		dwStype |= LVS_EX_CHECKBOXES;
	}
	else
	{
		dwStype &= ~LVS_EX_CHECKBOXES;
	}

	CListCtrl::SetExtendedStyle(dwStype);
}

BOOL CReportCtrl::MoveUp(int nItem, int nCount)
{	
	if (nCount < 0)
		return MoveDown(nItem, 0 - nCount);

	for (int i = nItem; i > nItem - nCount; i--)
	{
		if (!SwapItems(i, i - 1))
			return FALSE;
	}

	return TRUE;
}

BOOL CReportCtrl::MoveDown(int nItem, int nCount)
{
	if (nCount < 0)
		return MoveUp(nItem, 0 - nCount);

	for (int i = nItem; i < nItem + nCount; i++)
	{
		if (!SwapItems(i, i + 1))
			return FALSE;
	}

	return TRUE;
}

BOOL CReportCtrl::InvertSelect()
{
	BOOL bRes = TRUE;
	for (int i = 0; i < GetItemCount(); i++)
	{
		if (IsItemSelected(i))
			bRes &= UnSelectItem(i);
		else
			bRes &= SelectItem(i);
	}
	return bRes;
}

BOOL CReportCtrl::IsItemChecked(int nItem) const
{
	return GetCheck(nItem);
}

BOOL CReportCtrl::CheckItem(int nItem)
{
	return CListCtrl::SetCheck(nItem, TRUE);
}

BOOL CReportCtrl::UnSelectItem(int nItem)
{
	if (!_IsValidIndex(nItem))
		return FALSE;

	return SetItemState(nItem, 0, LVIS_SELECTED);
}

BOOL CReportCtrl::SelectAllItems()
{
	BOOL bRes = TRUE;
	for (int i = 0; i < GetItemCount(); i++)
	{
		if (!IsItemSelected(i))
			bRes &= SelectItem(i);
	}

	return bRes;
}

BOOL CReportCtrl::UnSelectAllItems()
{
	BOOL bRes = TRUE;
	for (int i = 0; i < GetItemCount(); i++)
	{
		if (IsItemSelected(i))
			bRes &= UnSelectItem(i);
	}

	return bRes;
}

BOOL CReportCtrl::UnCheckItem(int nItem)
{
	return CListCtrl::SetCheck(nItem, FALSE);
}

void CReportCtrl::CheckAllItems()
{
	
	for (int i = 0; i < GetItemCount(); i++)
		CListCtrl::SetCheck(i, TRUE);
}

void CReportCtrl::UnCheckAllItems()
{
	for (int i = 0; i < GetItemCount(); i++)
		CListCtrl::SetCheck(i, FALSE);
}	

void CReportCtrl::InvertCheck()
{
	for (int i = 0; i < GetItemCount(); i++)
		CListCtrl::SetCheck(i, !CListCtrl::GetCheck(i));
}

int CReportCtrl::GetSelectedItemCount() const
{
	return CListCtrl::GetSelectedCount();
}

int CReportCtrl::GetCheckedItemCount() const
{
	UINT nCount = 0;
	for (int i = 0; i < GetItemCount(); i++)
	{
		if (CListCtrl::GetCheck(i))
			nCount++;
	}

	return nCount;
}

BOOL CReportCtrl::SwapItems(int nItem1, int nItem2)
{
	if (!_IsValidIndex(nItem1) || !_IsValidIndex(nItem2))
		return FALSE;

	// record previous states first
	const BOOL bSel1 = IsItemSelected(nItem1);
	const BOOL bSel2 = IsItemSelected(nItem2);
	const BOOL bCheck1 = CListCtrl::GetCheck(nItem1);
	const BOOL bCheck2 = CListCtrl::GetCheck(nItem2);
	const DWORD dwData1 = GetItemData(nItem1);
	const DWORD dwData2 = GetItemData(nItem2);

	// swap item texts
	for (int i = 0; i < GetColumnCount(); i++)
	{
		CString str = GetItemText(nItem1, i);
		SetItemText(nItem1, i, GetItemText(nItem2, i));
		SetItemText(nItem2, i, str);
	}
	
	// swap item data
	SetItemData(nItem1, dwData2);
	SetItemData(nItem2, dwData1);

	// restore checked/unchecked states
	CListCtrl::SetCheck(nItem1, bCheck2);
	CListCtrl::SetCheck(nItem2, bCheck1);

	// restore selection mark(s)
	if (bSel2)
		SelectItem(nItem1);
	else
		UnSelectItem(nItem1);
	
	if (bSel1)
		SelectItem(nItem2);
	else
		UnSelectItem(nItem2);

	return TRUE;
}

BOOL CReportCtrl::MoveToTop(int nItem)
{
	return MoveUp(nItem, nItem);
}

BOOL CReportCtrl::MoveToBottom(int nItem)
{
	return MoveDown(nItem, GetItemCount() - nItem - 1);
}

int CReportCtrl::GetFirstCheckedItem(int nStartAfter) const
{
	nStartAfter = max(nStartAfter, -1);
	for (int i = nStartAfter + 1; i < CListCtrl::GetItemCount(); i++)
	{
		if (IsItemChecked(i))
			return i;
	}

	return -1;
}

BOOL CReportCtrl::SetItemText(int nItem, int nSubItem, TCHAR val)
{
	return SetItemText(nItem, nSubItem, CString(val));
}

BOOL CReportCtrl::SetItemText(int nItem, int nSubItem, BYTE val)
{
	return SetItemText(nItem, nSubItem, (ULONG)val);
}

BOOL CReportCtrl::SetItemText(int nItem, int nSubItem, SHORT val)
{
	return SetItemText(nItem, nSubItem, (LONG)val);
}

BOOL CReportCtrl::SetItemText(int nItem, int nSubItem, USHORT val)
{
	return SetItemText(nItem, nSubItem, (ULONG)val);
}

BOOL CReportCtrl::SetItemText(int nItem, int nSubItem, INT val)
{
	return SetItemText(nItem, nSubItem, (LONG)val);
}

BOOL CReportCtrl::SetItemText(int nItem, int nSubItem, UINT val)
{
	return SetItemText(nItem, nSubItem, (ULONG)val);
}

BOOL CReportCtrl::SetItemText(int nItem, int nSubItem, LONG val)
{
	CString sText;
	sText.Format(_T("%d"), val);
	return SetItemText(nItem, nSubItem, sText);
}

BOOL CReportCtrl::SetItemText(int nItem, int nSubItem, ULONG val)
{
	CString sText;
	sText.Format(_T("%d"), val);
	return SetItemText(nItem, nSubItem, sText);
}

BOOL CReportCtrl::SetItemText(int nItem, int nSubItem, FLOAT val, int nPrecision)
{
	return SetItemText(nItem, nSubItem, (DOUBLE)val, nPrecision);
}

BOOL CReportCtrl::SetItemText(int nItem, int nSubItem, DOUBLE val, int nPrecision)
{
	CString sText, sFmt;
	
	if (nPrecision >= 0)
		sFmt.Format(_T("%%.%df"), nPrecision);

	sText.Format(sFmt, val);
	return SetItemText(nItem, nSubItem, sText);
}

int CReportCtrl::DeleteAllUnselectedItems(ITEMDATAPROC lpFunc, LPARAM lParam)
{
	int nCount = 0;
	while (TRUE)
	{
		const int n = GetFirstUnselectedItem();
		if (!DeleteItem(n, FALSE, lpFunc, lParam))
			return nCount;

		nCount++;
	}

	return nCount;
}

BOOL CReportCtrl::DeleteAllCheckedItems(ITEMDATAPROC lpFunc, LPARAM lParam)
{
	int nCount = 0;
	while (TRUE)
	{
		const int n = GetFirstCheckedItem();
		if (!DeleteItem(n, FALSE, lpFunc, lParam))
			return nCount;

		nCount++;
	}

	return nCount;
}

BOOL CReportCtrl::DeleteAllUncheckedItems(ITEMDATAPROC lpFunc, LPARAM lParam)
{
	int nCount = 0;
	while (TRUE)
	{
		const int n = GetFirstUncheckedItem();
		if (!DeleteItem(n, FALSE, lpFunc, lParam))
			return nCount;

		nCount++;
	}

	return nCount;
}

BOOL CReportCtrl::DeleteAllColumns()
{
	while (GetColumnCount() > 0)
	{
		if (!DeleteColumn(0))
			return FALSE;
	}

	return TRUE;
}

int CReportCtrl::GetUnselectedItemCount() const
{
	return GetItemCount() - GetSelectedItemCount();
}

int CReportCtrl::GetUncheckedItemCount() const
{
	return GetItemCount() - GetCheckedItemCount();
}

int CReportCtrl::GetFirstUnselectedItem(int nStartAfter) const
{
	nStartAfter = max(nStartAfter, -1);
	for (int i = nStartAfter + 1; i < GetItemCount(); i++)
	{
		if (!IsItemSelected(i))
			return i;
	}

	return -1;
}

int CReportCtrl::GetFirstUncheckedItem(int nStartAfter) const
{
	nStartAfter = max(nStartAfter, -1);
	for (int i = nStartAfter + 1; i < GetItemCount(); i++)
	{
		if (!IsItemChecked(i))
			return i;
	}

	return -1;
}

void CReportCtrl::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
  HWND hWnd;
  int i;
  if(pScrollBar)
   hWnd = pScrollBar->m_hWnd;
  SCROLLINFO sif;//, sifVert;
  ZeroMemory(&sif, sizeof(SCROLLINFO));
  sif.cbSize = sizeof(SCROLLINFO);
  sif.fMask = SIF_ALL;
  GetScrollInfo(SB_VERT, &sif);
  switch(nSBCode)
  {
  case SB_THUMBTRACK: //移动块
	   i = 0;
	   break;
  case SB_THUMBPOSITION: //释放滚动块
	   i = 1;
	   break;
  }
	
	CListCtrl::OnVScroll(nSBCode, nPos, pScrollBar);
}

int CReportCtrl::GetSubItem(LPCSTR pItemName)
{
  CString sName;
  char buf[129];
  HDITEM Item;
  for(int i = 0; i < m_wndHeader.GetItemCount( ) ; i++)
  {
	 memset(&Item, 0, sizeof(HDITEM));
	 Item.mask = HDI_TEXT;
	 Item.pszText = buf;
	 Item.cchTextMax = 128;
	 m_wndHeader.GetItem(i, &Item);
	 sName = Item.pszText;
	 sName.TrimLeft(); sName.TrimRight();
	 if (sName == pItemName) return i;
  }
  return -1;
}

CString CReportCtrl::GetItemTextEx(int nItem, LPCSTR pItemName)
{
  if (nItem < 0) return _T("");
  int nSubItem = GetSubItem(pItemName);
  if (nSubItem < 0) return _T("");
  return GetItemText(nItem,nSubItem);

}
BOOL CReportCtrl::SetItemTextEx(int nItem, LPCSTR pItemName, LPCSTR pText)
{
  if (nItem < 0) return false;
  int nSubItem = GetSubItem(pItemName);
  if (nSubItem < 0) return false;
  return SetItemText(nItem,nSubItem, pText);

}






⌨️ 快捷键说明

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