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

📄 mylistctrl1.cpp

📁 电力监控系统 实时告警处理程序
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		for (i = 0; i < GetColumns(); i++)
		{
			GetSubItemRect(nItem, i, LVIR_BOUNDS, rect);
			if (rect.PtInRect(point))
			{
				nSubItem = i;
				break;
			}
		}
		
		if (nSubItem == -1)
		{
			// -1 = no checkbox for this subitem
		}
		else
		{
			if (pXLCD[nSubItem].nCheckedState >= 0)
			{
				int nChecked = pXLCD[nSubItem].nCheckedState;
				nChecked = (nChecked == 0) ? 1 : 0;
				pXLCD[nSubItem].nCheckedState = nChecked;
				UpdateSubItem(nItem, nSubItem);	
				//根据check更新数据库中的数据。。。。
				switch(nSubItem) 
				{
				case 0:
					//	bool SetIfShow(int nCounts,bool bResult);
					m_pEvtDb->SetIfShow(nItem,nChecked);
					SetEnabled(nItem,nChecked);
					if(!nChecked)
					{
						m_pEvtDb->SetIfPlaySound(nItem,0);
						SetCheckbox(nItem,2,0);
						m_pEvtDb->SetIfPlayRing(nItem,0);
						SetCheckbox(nItem,3,0);
						m_pEvtDb->SetIfPlayAlarm(nItem,0);
						SetCheckbox(nItem,4,0);
						m_pEvtDb->SetIfPicture(nItem,0);
						SetCheckbox(nItem,5,0);
						m_pEvtDb->SetIfPrint(nItem,0);
						SetCheckbox(nItem,6,0);
					}
					break;
				case 2 :
					if(m_pEvtDb->GetIfShow(nItem))
						m_pEvtDb->SetIfPlaySound(nItem,nChecked);
					else 
						SetCheckbox(nItem,nSubItem,0);
					break;
				case 3 :
					if(m_pEvtDb->GetIfShow(nItem))
						m_pEvtDb->SetIfPlayRing(nItem,nChecked);
					else 
						SetCheckbox(nItem,nSubItem,0);
					break;
				case 4:
					if(m_pEvtDb->GetIfShow(nItem))
						m_pEvtDb->SetIfPlayAlarm(nItem,nChecked);
					else 
						SetCheckbox(nItem,nSubItem,0);
					break;
				case 5 :
					if(m_pEvtDb->GetIfShow(nItem))
						m_pEvtDb->SetIfPicture(nItem,nChecked);
					else 
						SetCheckbox(nItem,nSubItem,0);
					break;
				case 6 :
					if(m_pEvtDb->GetIfShow(nItem))
						m_pEvtDb->SetIfPrint(nItem,nChecked);
					else 
						SetCheckbox(nItem,nSubItem,0);
					break;
				default:
					break;
				}
				
				CWnd *pWnd = GetParent();
				if (!pWnd)
					pWnd = GetOwner();
				if (pWnd && ::IsWindow(pWnd->m_hWnd))
					pWnd->SendMessage(WM_MyListCtrl1_CHECKBOX_CLICKED, 
					nItem, nSubItem);
				//	if (GetHeaderCheckedState(nSubItem) !=MyHeaderCtrl1_NO_IMAGE)
				//		{
				int nCheckedCount = CountCheckedItems(nSubItem);
				if (nCheckedCount == GetItemCount())
					SetHeaderCheckedState(nSubItem, MyHeaderCtrl1_CHECKED_IMAGE);
				if(nCheckedCount == 0)
					SetHeaderCheckedState(nSubItem,1 );//MyHeaderCtrl1_NO_IMAGE
				else
					SetHeaderCheckedState(nSubItem,0);// MyHeaderCtrl1_UNCHECKED_IMAGE
				//		}
				
				
				
			}
		}
	}
//	::UpdateData(false);
	CListCtrl::OnLButtonDown(nFlags, point);
}

///////////////////////////////////////////////////////////////////////////////
// OnPaint
void CMyListCtrl1::OnPaint()
{
    Default();
	if (GetItemCount() <= 0)
	{
		CDC* pDC = GetDC();
		int nSavedDC = pDC->SaveDC();
		
		CRect rc;
		GetWindowRect(&rc);
		ScreenToClient(&rc);
		CHeaderCtrl* pHC = GetHeaderCtrl();
		if (pHC != NULL)
		{
			CRect rcH;
			pHC->GetItemRect(0, &rcH);
			rc.top += rcH.bottom;
		}
		rc.top += 10;
		CString strText;
		strText = _T("暂无告警信息");
		
		COLORREF crText = m_crWindowText;
		COLORREF crBkgnd = m_crWindow;
		
		CBrush brush(crBkgnd);
		pDC->FillRect(rc, &brush);
		
		pDC->SetTextColor(crText);
		pDC->SetBkColor(crBkgnd);
		pDC->SelectStockObject(ANSI_VAR_FONT);
		pDC->DrawText(strText, -1, rc, DT_CENTER | DT_WORDBREAK | DT_NOPREFIX | DT_NOCLIP);
		pDC->RestoreDC(nSavedDC);
		ReleaseDC(pDC);
	}
}

///////////////////////////////////////////////////////////////////////////////
// InsertItem
int CMyListCtrl1::InsertItem(const LVITEM* pItem)
{
	ASSERT(pItem->iItem >= 0);
	if (pItem->iItem < 0)
		return -1;
	
	int index = CListCtrl::InsertItem(pItem);
	
	if (index < 0)
		return index;
	
	MyListCtrl1DATA *pXLCD = new MyListCtrl1DATA [GetColumns()];
	ASSERT(pXLCD);
	if (!pXLCD)
		return -1;
	
	pXLCD[0].crText       = m_crWindowText;
	pXLCD[0].crBackground = m_crWindow;
	pXLCD[0].nImage       = pItem->iImage;
	
	CListCtrl::SetItemData(index, (DWORD) pXLCD);
	
	return index;
}

///////////////////////////////////////////////////////////////////////////////
// InsertItem
int CMyListCtrl1::InsertItem(int nItem, LPCTSTR lpszItem)
{
	ASSERT(nItem >= 0);
	if (nItem < 0)
		return -1;
	
	return InsertItem(nItem,
		lpszItem,
		m_crWindowText,
		m_crWindow);
}

///////////////////////////////////////////////////////////////////////////////
// InsertItem
int CMyListCtrl1::InsertItem(int nItem,
							 LPCTSTR lpszItem,
							 COLORREF crText,
							 COLORREF crBackground)
{
	ASSERT(nItem >= 0);
	if (nItem < 0)
		return -1;
	
	int index = CListCtrl::InsertItem(nItem, lpszItem);
	
	if (index < 0)
		return index;
	
	MyListCtrl1DATA *pXLCD = new MyListCtrl1DATA [GetColumns()];
	ASSERT(pXLCD);
	if (!pXLCD)
		return -1;
	
	pXLCD[0].crText       = crText;
	pXLCD[0].crBackground = crBackground;
	pXLCD[0].nImage       = -1;
	
	CListCtrl::SetItemData(index, (DWORD) pXLCD);
	
	return index;
}

///////////////////////////////////////////////////////////////////////////////
// SetItem
int CMyListCtrl1::SetItem(const LVITEM* pItem)
{
	ASSERT(pItem->iItem >= 0);
	if (pItem->iItem < 0)
		return -1;
	
	BOOL rc = CListCtrl::SetItem(pItem);
	
	if (!rc)
		return FALSE;
	
	MyListCtrl1DATA *pXLCD = (MyListCtrl1DATA *) CListCtrl::GetItemData(pItem->iItem);
	if (pXLCD)
	{
		pXLCD[pItem->iSubItem].nImage = pItem->iImage;
		UpdateSubItem(pItem->iItem, pItem->iSubItem);
		rc = TRUE;
	}
	else
	{
		rc = FALSE;
	}
	
	return rc;
}

///////////////////////////////////////////////////////////////////////////////
// SetItemImage
BOOL CMyListCtrl1::SetItemImage(int nItem, int nSubItem, int nImage)
{
	ASSERT(nItem >= 0);
	ASSERT(nItem < GetItemCount());
	if ((nItem < 0) || nItem >= GetItemCount())
		return FALSE;
	ASSERT(nSubItem >= 0);
	ASSERT(nSubItem < GetColumns());
	if ((nSubItem < 0) || nSubItem >= GetColumns())
		return FALSE;
	
	BOOL rc = TRUE;
	
	if (nItem < 0)
		return FALSE;
	
	MyListCtrl1DATA *pXLCD = (MyListCtrl1DATA *) CListCtrl::GetItemData(nItem);
	if (pXLCD)
	{
		pXLCD[nSubItem].nImage = nImage;
	}
	
	UpdateSubItem(nItem, nSubItem);
	
	return rc;
}

///////////////////////////////////////////////////////////////////////////////
// SetItemText
BOOL CMyListCtrl1::SetItemText(int nItem, int nSubItem, LPCTSTR lpszText)
{
	ASSERT(nItem >= 0);
	ASSERT(nItem < GetItemCount());
	if ((nItem < 0) || nItem >= GetItemCount())
		return FALSE;
	ASSERT(nSubItem >= 0);
	ASSERT(nSubItem < GetColumns());
	if ((nSubItem < 0) || nSubItem >= GetColumns())
		return FALSE;
	
	BOOL rc = CListCtrl::SetItemText(nItem, nSubItem, lpszText);
	
	UpdateSubItem(nItem, nSubItem);
	
	return rc;
}

///////////////////////////////////////////////////////////////////////////////
// SetItemText
//
// This function will set the text and colors for a subitem.  If lpszText
// is NULL, only the colors will be set.  If a color value is -1, the display
// color will be set to the default Windows color.
//
BOOL CMyListCtrl1::SetItemText(int nItem, int nSubItem, LPCTSTR lpszText,
							   COLORREF crText, COLORREF crBackground)
{
	ASSERT(nItem >= 0);
	ASSERT(nItem < GetItemCount());
	if ((nItem < 0) || nItem >= GetItemCount())
		return FALSE;
	ASSERT(nSubItem >= 0);
	ASSERT(nSubItem < GetColumns());
	if ((nSubItem < 0) || nSubItem >= GetColumns())
		return FALSE;
	
	BOOL rc = TRUE;
	
	if (nItem < 0)
		return FALSE;
	
	if (lpszText)
		rc = CListCtrl::SetItemText(nItem, nSubItem, lpszText);
	
	MyListCtrl1DATA *pXLCD = (MyListCtrl1DATA *) CListCtrl::GetItemData(nItem);
	if (pXLCD)
	{
		pXLCD[nSubItem].crText       = (crText == -1) ? m_crWindowText : crText;
		pXLCD[nSubItem].crBackground = (crBackground == -1) ? m_crWindow : crBackground;
	}
	
	UpdateSubItem(nItem, nSubItem);
	
	return rc;
}

///////////////////////////////////////////////////////////////////////////////
// DeleteItem
BOOL CMyListCtrl1::DeleteItem(int nItem)
{
	ASSERT(nItem >= 0);
	ASSERT(nItem < GetItemCount());
	if ((nItem < 0) || nItem >= GetItemCount())
		return FALSE;
	
	MyListCtrl1DATA *pXLCD = (MyListCtrl1DATA *) CListCtrl::GetItemData(nItem);
	if (pXLCD)
		delete [] pXLCD;
	CListCtrl::SetItemData(nItem, 0);
	return CListCtrl::DeleteItem(nItem);
}

///////////////////////////////////////////////////////////////////////////////
// DeleteAllItems
BOOL CMyListCtrl1::DeleteAllItems()
{
	int n = GetItemCount();
	for (int i = 0; i < n; i++)
	{
		MyListCtrl1DATA *pXLCD = (MyListCtrl1DATA *) CListCtrl::GetItemData(i);
		if (pXLCD)
			delete [] pXLCD;
		CListCtrl::SetItemData(i, 0);
	}
	
	return CListCtrl::DeleteAllItems();
}

///////////////////////////////////////////////////////////////////////////////
// OnDestroy
void CMyListCtrl1::OnDestroy()
{
	int n = GetItemCount();
	for (int i = 0; i < n; i++)
	{
		MyListCtrl1DATA *pXLCD = (MyListCtrl1DATA *) CListCtrl::GetItemData(i);
		if (pXLCD)
			delete [] pXLCD;
		CListCtrl::SetItemData(i, 0);
	}
	
	CListCtrl::OnDestroy();
}

///////////////////////////////////////////////////////////////////////////////
// SetCheckbox
BOOL CMyListCtrl1::SetCheckbox(int nItem, int nSubItem, int nCheckedState)
{
	ASSERT(nItem >= 0);
	ASSERT(nItem < GetItemCount());
	if ((nItem < 0) || nItem >= GetItemCount())
		return FALSE;
	ASSERT(nSubItem >= 0);
	ASSERT(nSubItem < GetColumns());
	if ((nSubItem < 0) || nSubItem >= GetColumns())
		return FALSE;
	ASSERT(nCheckedState == 0 || nCheckedState == 1 || nCheckedState == -1);
	
	MyListCtrl1DATA *pXLCD = (MyListCtrl1DATA *) CListCtrl::GetItemData(nItem);
	if (!pXLCD)
	{
		return FALSE;
	}
	
	// update checkbox in subitem
	
	pXLCD[nSubItem].nCheckedState = nCheckedState;
	
	UpdateSubItem(nItem, nSubItem);
	
	// now update checkbox in column header
	
	// -1 = no checkbox in column header
	int nCheckedCount = CountCheckedItems(nSubItem);
	if (nCheckedCount == GetItemCount())
		SetHeaderCheckedState(nSubItem, MyHeaderCtrl1_CHECKED_IMAGE);
	if(nCheckedCount == 0)
		SetHeaderCheckedState(nSubItem,1 );//MyHeaderCtrl1_NO_IMAGE
	else
		SetHeaderCheckedState(nSubItem,0);// MyHeaderCtrl1_UNCHECKED_IMAGE
	return TRUE;
}

///////////////////////////////////////////////////////////////////////////////
// GetCheckbox
int CMyListCtrl1::GetCheckbox(int nItem, int nSubItem)
{
	ASSERT(nItem >= 0);
	ASSERT(nItem < GetItemCount());
	if ((nItem < 0) || nItem >= GetItemCount())
		return -1;
	ASSERT(nSubItem >= 0);
	ASSERT(nSubItem < GetColumns());
	if ((nSubItem < 0) || nSubItem >= GetColumns())
		return -1;
	
	MyListCtrl1DATA *pXLCD = (MyListCtrl1DATA *) CListCtrl::GetItemData(nItem);
	if (!pXLCD)
	{
		return -1;
	}
	
	return pXLCD[nSubItem].nCheckedState;
}

///////////////////////////////////////////////////////////////////////////////
// GetEnabled
//
// Note that GetEnabled and SetEnabled only Get/Set the enabled flag from
// subitem 0, since this is a per-row flag.
//
BOOL CMyListCtrl1::GetEnabled(int nItem)
{
	ASSERT(nItem >= 0);
	ASSERT(nItem < GetItemCount());
	if ((nItem < 0) || nItem >= GetItemCount())
		return FALSE;
	
	MyListCtrl1DATA *pXLCD = (MyListCtrl1DATA *) CListCtrl::GetItemData(nItem);
	if (!pXLCD)
	{
		return FALSE;
	}
	
	return pXLCD[0].bEnabled;
}

///////////////////////////////////////////////////////////////////////////////
// SetEnabled
BOOL CMyListCtrl1::SetEnabled(int nItem, BOOL bEnable)
{
	ASSERT(nItem >= 0);
	ASSERT(nItem < GetItemCount());
	if ((nItem < 0) || nItem >= GetItemCount())
		return FALSE;
	
	MyListCtrl1DATA *pXLCD = (MyListCtrl1DATA *) CListCtrl::GetItemData(nItem);
	if (!pXLCD)
	{
		return FALSE;
	}
	
	pXLCD[0].bEnabled = bEnable;
	
	CRect rect;
	GetItemRect(nItem, &rect, LVIR_BOUNDS);
	InvalidateRect(&rect);
	UpdateWindow();
	
	return TRUE;
}

///////////////////////////////////////////////////////////////////////////////
// SetBold
BOOL CMyListCtrl1::SetBold(int nItem, int nSubItem, BOOL bBold)
{
	ASSERT(nItem >= 0);
	ASSERT(nItem < GetItemCount());
	if ((nItem < 0) || nItem >= GetItemCount())
		return FALSE;
	ASSERT(nSubItem >= 0);
	ASSERT(nSubItem < GetColumns());
	if ((nSubItem < 0) || nSubItem >= GetColumns())
		return FALSE;
	
	MyListCtrl1DATA *pXLCD = (MyListCtrl1DATA *) CListCtrl::GetItemData(nItem);
	if (!pXLCD)
	{
		return FALSE;
	}
	
	// update bold flag
	pXLCD[nSubItem].bBold = bBold;
	
	UpdateSubItem(nItem, nSubItem);
	
	return TRUE;
}

///////////////////////////////////////////////////////////////////////////////
// GetBold
BOOL CMyListCtrl1::GetBold(int nItem, int nSubItem)
{
	ASSERT(nItem >= 0);
	ASSERT(nItem < GetItemCount());
	if ((nItem < 0) || nItem >= GetItemCount())
		return FALSE;
	ASSERT(nSubItem >= 0);
	ASSERT(nSubItem < GetColumns());
	if ((nSubItem < 0) || nSubItem >= GetColumns())
		return FALSE;
	
	MyListCtrl1DATA *pXLCD = (MyListCtrl1DATA *) CListCtrl::GetItemData(nItem);
	if (!pXLCD)
	{
		return FALSE;
	}
	
	// update bold flag
	return pXLCD[nSubItem].bBold;
}

///////////////////////////////////////////////////////////////////////////////
// SetCurSel
BOOL CMyListCtrl1::SetCurSel(int nItem)
{
	return SetItemState(nItem, LVIS_FOCUSED | LVIS_SELECTED,
		LVIS_FOCUSED | LVIS_SELECTED);
}

///////////////////////////////////////////////////////////////////////////////
// GetCurSel - returns selected item number, or -1 if no item selected
//
// Note:  for single-selection lists only
//
int CMyListCtrl1::GetCurSel()
{
	POSITION pos = GetFirstSelectedItemPosition();
	int nSelectedItem = -1;
	if (pos != NULL)
		nSelectedItem = GetNextSelectedItem(pos);
	return nSelectedItem;
}

///////////////////////////////////////////////////////////////////////////////
// UpdateSubItem
void CMyListCtrl1::UpdateSubItem(int nItem, int nSubItem)
{
	ASSERT(nItem >= 0);

⌨️ 快捷键说明

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