Ejemplo n.º 1
0
void CSimplePanelDlg::DrawLine()
{
	if(0 >= m_vecData.size())
		return;

	CDC* pDC = GetDC();

	int nSize = 0;
	m_vecData.size() < m_vecMemDC.size() ? nSize = (int)m_vecData.size() : nSize = (int)m_vecMemDC.size();

	for (int ii = 0; ii < 6; ii++)
	{
		int nIndexData = ii;

		//显示下一屏的数据,如果不够显示当前屏的
		(ii + m_nIndexShow * 6) >= (int)m_vecData.size() ? nIndexData : nIndexData = ii + m_nIndexShow * 6;

		CEsayMemDC* pMemDC = m_vecMemDC[ii];
		CRect& rc = pMemDC->GetMemRect();

		Gdiplus::Graphics gr(pMemDC->GetDC());

		if(nIndexData < m_vecData.size())
		{
			CData* pData = m_vecData[nIndexData];
			vector<BusArrivalInfo> vecArrival;
			pData->GetBusInfo(vecArrival);

			DrawArrive(gr, vecArrival, rc, pData);
		}
		else
			DrawEmpty(gr, rc);

		pMemDC->BltMem(*pDC);
	}

	ReleaseDC(pDC);
}
Ejemplo n.º 2
0
void CSimplePanelDlg::ChangeLine()
{
	int nLineCount = m_vecData.size();
	m_nIndexShow++;
	if((m_nIndexShow * 6 > nLineCount) || (m_nIndexShow * 6 - nLineCount == 0))
		m_nIndexShow = 0;

	if(nLineCount <= 6)
		return;

	//先计算当前有多少条线路要翻页的
	int nTmpMemDCCount = 6;
	nLineCount % 4 == 0 ? nTmpMemDCCount : nTmpMemDCCount = nLineCount % 6;

	CDC* pDC = GetDC();

	//创建临时的内存画布
	vector<CEsayMemDC*> vecTemMemDC;
	for(int ii = 0; ii < nTmpMemDCCount; ii++)
	{
		CEsayMemDC* pMemDC = m_vecMemDC[ii];
		CEsayMemDC* pTmpMemDC = new CEsayMemDC(*pDC, pMemDC->GetMemRect());
		vecTemMemDC.push_back(pTmpMemDC);
	}

	//将下一页的数据画到内存画布中

	for(int ii = 0; ii < nTmpMemDCCount; ii++)
	{
		CData* pData = m_vecData[ii+m_nIndexShow*6];
		vector<BusArrivalInfo> vecArrive;
		pData->GetBusInfo(vecArrive);

		CEsayMemDC* pTmpMemDC = vecTemMemDC[ii];
		Gdiplus::Graphics gr(pTmpMemDC->GetDC());

		DrawArrive(gr, vecArrive, pTmpMemDC->GetMemRect(), pData);
	}


	//两张画布切换动画
	for(int ii = 0; ii < nTmpMemDCCount; ii++)
	{
		CEsayMemDC* pMemDC = m_vecMemDC[ii];
		CEsayMemDC* pTmpMemDC = vecTemMemDC[ii];

		CRect rc(0, 0, pMemDC->GetMemRect().Width(), pMemDC->GetMemRect().Height());

		MoveUpDown(&pMemDC->GetDC(), &pTmpMemDC->GetDC(), pMemDC->GetMemRect(), pDC);

		//pMemDC->BltMem(*pDC);


		//pTmpMemDC->BltMem(*pDC);

		delete pTmpMemDC;
	}

	//将临时的内存画布更新到原本的内存画布中

	ReleaseDC(pDC);

}