📄 reportctrl.cpp
字号:
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 + -