Exemplo n.º 1
0
void CChildView::OnPaint()
{
    CWnd::OnPaint();
    if (m_uiShape == CROP_ENCODE)
    {
        CMyDC *dc;
        RECT   rcClient;
        LONG   lHalfHeight, lHalfWidth;

        dc = (CMyDC *)GetDC();
        GetWindowRect(&rcClient);
        lHalfWidth  = (rcClient.right - rcClient.left) >> 1;
        lHalfHeight = (rcClient.bottom - rcClient.top) >> 1;
        rcClient.bottom -= lHalfHeight >> 1;
        rcClient.top += lHalfHeight >> 1;
        rcClient.right -= lHalfWidth >> 1;
        rcClient.left += lHalfWidth >> 1;
        ScreenToClient(&rcClient);
        dc->Rectangle(&rcClient);

        if (m_uiClipCnt)
        {
            CPen *pOldPen, pen;

            pen.CreatePen(PS_SOLID, 5, RGB(255, 0, 0));
            pOldPen = dc->SelectObject(&pen);
            for (UINT i = 0; i != m_uiClipCnt; ++i)
            {
                dc->MoveTo(m_ptCrop[i]);
                dc->LineTo(m_ptCrop[i]);
            }
            dc->SelectObject(pOldPen);
        }

        if (m_uiClipCnt == 2)
        {
            if (EncodeCrop(&m_ptCrop[0], &m_ptCrop[1], &rcClient))
            {
                dc->MoveTo(m_ptCrop[0]);
                dc->LineTo(m_ptCrop[1]);
            }
            m_uiClipCnt = 0;
        }

        ::ReleaseDC(m_hWnd, dc->m_hDC);
    }
Exemplo n.º 2
0
void CTrafficButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{

	// TODO:  添加您的代码以绘制指定项
	ASSERT( lpDrawItemStruct != NULL );

	CDC * pDC   = CDC::FromHandle( lpDrawItemStruct -> hDC );
	int erg = pDC->SelectClipRgn(&ShapeDCRegion);

	CRect rect = lpDrawItemStruct -> rcItem;
	UINT state = lpDrawItemStruct -> itemState;
	UINT nStyle = GetStyle( );

	int nSavedDC = pDC -> SaveDC( );

	// Create the brush for the color bar
	if(brushInitalized == FALSE)
	{
		CBitmap bmp;
		CMyDC *memDC = new CMyDC(pDC);

		RECT clipRect;
		memDC->GetClipBox(&clipRect);

		if(clipRect.right - clipRect.left > 1)
		{
			bmp.CreateCompatibleBitmap(memDC,plotgranularity, TGSize.cy);
			CBitmap *pOld = memDC->SelectObject(&bmp);

			CSize bmps = bmp.GetBitmapDimension();		

			// Need for scaling the color to the size of button
			double factor = 255.0 / (float)TGSize.cy;
			BYTE r,g,b;
			for(int x = 0; x<TGSize.cy; x++)
			{
				g = (BYTE)(255-factor*x);
				r = (BYTE)(factor*x);
				b = (BYTE)64;
				memDC->SetPixelV(0,x,RGB(r,g,b));
				memDC->SetPixelV(1,x,RGB(r,g,b));
			}
			memDC->SelectObject(pOld);

			colorbrush.CreatePatternBrush(&bmp);	
			brushInitalized = TRUE;
		}
		delete memDC;
	}
	if(initalized == TRUE)
	{
		COLORREF backcolor = GetSysColor(COLOR_BTNFACE);

		CBrush brush;
		CMyDC *memDC = new CMyDC(pDC);

		RECT clipRect;
		memDC->GetClipBox(&clipRect);
		memDC->FillSolidRect(&clipRect,backcolor);

		CFont *oldFont;
		int xp, yp, xx, yy;
		orgBrushOrigin = memDC->GetBrushOrg();

		oldFont = memDC->SelectObject(&smallFont);

		double scale = TGSize.cy / (maxSpeed/1024.0);

		yp = TrafficDrawRectangle.bottom;
		xp = TrafficDrawRectangle.left;

		RECT fillrect;

		// Fill the background
		back = memDC->GetBkColor();
		brush.CreateSolidBrush(darkblue);//back);
		memDC->FillRect(&TrafficDrawRectangle, &brush);


		//画网格
		int xgridlines, ygridlines;

		xgridlines = TGSize.cx / gridxresolution;
		ygridlines = TGSize.cy / gridyresolution;
		CPen* oldPen = memDC->SelectObject(&GridPen);

		// Create the vertical lines
		for (int x=0; x<= xgridlines; x++)
		{
			memDC->MoveTo(x*gridxresolution + gridxstartpos, 0			);
			memDC->LineTo(x*gridxresolution + gridxstartpos, TGSize.cy	);
		}
		// And the horizontal lines
		for (int y=0; y<= ygridlines; y++)
		{
			memDC->MoveTo(0			, gridystartpos + TGSize.cy - y*gridyresolution - 2);
			memDC->LineTo(TGSize.cx	, gridystartpos + TGSize.cy - y*gridyresolution - 2);
		}

		gridxstartpos += gridscrollxspeed;
		gridystartpos += gridscrollyspeed;
		if(gridxstartpos < 0				) gridxstartpos += gridxresolution;
		if(gridxstartpos > gridxresolution	) gridxstartpos -= gridxresolution;
		if(gridystartpos < 0				) gridystartpos += gridyresolution;
		if(gridystartpos > gridyresolution	) gridystartpos -= gridyresolution;


		memDC->SelectObject(oldPen );

		for(DWORD cnt=0; cnt<TrafficEntries; cnt++)
		{
			xx = xp + cnt*plotgranularity;
			yy = yp - (int)(TrafficStats[cnt] * scale);

			// Just paint if we are connected...
			fillrect.bottom = yp;
			fillrect.top	= yy;
			fillrect.left	= xx;
			fillrect.right	= xx+plotgranularity;
			memDC->SetBrushOrg(xx,yp);
			//TRACE("TrafficStats[%d]: %f\n", cnt,TrafficStats[cnt]);
			if(TrafficStats[cnt] > 0.0) 
			{
				//画柱状图
				memDC->FillRect(&fillrect, &colorbrush);
				memDC->SetPixelV(xx, yy, cyan);
			}
		}

		COLORREF textcolor = memDC->GetTextColor();
		int bkmode = memDC->GetBkMode();
		memDC->SetBkMode(TRANSPARENT);

		//输出统计信息
		memDC->SetTextColor(cyan);
		CString traffic;
		traffic.Format(L"CUR: %.2f  HHG: %.2f",curSpeed/1024.0,maxSpeed/1024.0);
		memDC->TextOut(5,5,traffic); 

		memDC->SetTextColor(textcolor);
		memDC->SetBkMode(bkmode);
		memDC->SelectObject(oldFont);
		memDC->SetBrushOrg(orgBrushOrigin.x, orgBrushOrigin.y);

		delete memDC;

	}
	pDC -> RestoreDC( nSavedDC );
}