Esempio n. 1
0
BOOL CDrawInfo::DrawSelf( CDC* pDC, CPoint pos, int nItemID, CRect& rcItem )
{
	int nAyIndex = GetArrayIndexFromPoint(pos);
	int nCellIndex = PointToIndex(pos);
	if (nAyIndex != -1)
	{// 当前鼠标所在的资讯索引单元格  
		
		if (m_nActiveCellID == nCellIndex)
		{
			// 画激活背景
			rcItem.DeflateRect(1,1,1,1);
			pDC->FillSolidRect(&rcItem, m_pColor->GetDiagramLayoutActiveFillColor());

			// 设置激活前景色
			SetCellText(nCellIndex, nItemID, NULL, TEXT_COLOR_ACTIVEFIXEDNAME);
		}
		else
		{
			// 设置默认前景色
			SetCellText(nCellIndex, nItemID, NULL, TEXT_COLOR_FIXEDNAME);
		}	
	}
	else
	{// 不是资讯索引单元格
		if (pos == CPoint(GetColCount()-1, 0))
		{// 如果是第一行,最后一列

			//////////////////////////////////////////////////////////////////////////
			// 计算全屏或者还原图标区域
			CalcImageRect(&m_rcMaxScreen, &rcItem, TRUE);
			// 绘制图片
			if (!m_bSizeMax)
				m_lstImage.Draw(pDC, 0, CPoint(m_rcMaxScreen.left, m_rcMaxScreen.top), ILD_TRANSPARENT);
			else
				m_lstImage.Draw(pDC, 4, CPoint(m_rcMaxScreen.left, m_rcMaxScreen.top), ILD_TRANSPARENT);
			//////////////////////////////////////////////////////////////////////////
			// 计算关闭图标区域
			CalcImageRect(&m_rcClose, &rcItem, FALSE);
			// 绘制图片
			m_lstImage.Draw(pDC, 1, CPoint(m_rcClose.left, m_rcClose.top), ILD_TRANSPARENT);
			return TRUE;
		}
		else if (pos == CPoint(GetColCount()-1, 1))
		{
			//////////////////////////////////////////////////////////////////////////
			// 计算向上翻屏图标区域
			CalcImageRect(&m_rcUp, &rcItem, TRUE);
			// 绘制图片
			m_lstImage.Draw(pDC, 2, CPoint(m_rcUp.left, m_rcUp.top), ILD_TRANSPARENT);

			//////////////////////////////////////////////////////////////////////////
			// 计算向下翻屏图标区域
			CalcImageRect(&m_rcDown, &rcItem, FALSE);
			// 绘制图片
			m_lstImage.Draw(pDC, 3, CPoint(m_rcDown.left, m_rcDown.top), ILD_TRANSPARENT);
			return TRUE;
		}
	}
	return FALSE;
}
Esempio n. 2
0
void CSListCtrl::DrawImage(int nItem, int nSubItem, CDC *pDC)
{
	CRect imgRect;
	
	if(!CalcImageRect(nItem, nSubItem, imgRect))
	{
		return;
	}
	
	CListImage* pListImage = GetSubItemData(nItem, nSubItem)->m_pListImage;
	ASSERT(pListImage != NULL);
	
	pListImage->m_imageList->DrawIndirect(pDC, pListImage->m_nImage, imgRect.TopLeft(), imgRect.Size(), CPoint(0, 0));
}
Esempio n. 3
0
BOOL CSListCtrl::CalcTextRect(int nItem, int nSubItem, CRect& rcText)
{
	GetSubItemRect(nItem, nSubItem, LVIR_BOUNDS, rcText);
	
	CRect rcTemp;
	//Move if image
	if( CalcImageRect(nItem, nSubItem, rcTemp) )
	{
		rcText.left = rcTemp.right;
	}
	else if( CalcCheckBoxRect(nItem, nSubItem, rcTemp) )
	{
		rcText.left = rcTemp.right;
	}

	rcText.DeflateRect(m_HeaderCtrl.m_nSpace, 0);
	if(rcText.IsRectEmpty())
	{
		return FALSE;
	}
	
	return TRUE;
}