程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> MFC 直線 虛線 折線 圓 橢圓 矩形 弧形

MFC 直線 虛線 折線 圓 橢圓 矩形 弧形

編輯:C++入門知識

MFC 直線 虛線 折線 圓 橢圓 矩形 弧形


****Dlg.h頭文件添加:

//為工程添加畫筆、點變量數組
public:
	CPen m_pen[5];
	CPoint m_point[5];
public:
	void DrawLine(CDC *pDC);
	void DrawPolyline(CDC *pDC);
	void DrawPolygon(CDC *pDC);
	void DrawRect(CDC *pDC);
	void DrawRoundRect(CDC *pDC);
	void DrawEllipse(CDC *pDC);
	void DrawArc(CDC *pDC);
	void DrawAngleArc(CDC *pDC);

****Dlg.cpp構造函數修改:

CLineTestDlg::CLineTestDlg(CWnd* pParent /*=NULL*/)
	: CDialogEx(CLineTestDlg::IDD, pParent)
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

	//初始化畫筆、點變量數組
	m_pen[0].CreatePen(PS_SOLID,1,RGB(255,0,0));	 //紅色實線,1像素寬---參數:樣式、寬度、顏色
	m_pen[1].CreatePen(PS_SOLID,6,RGB(0,255,0));	 //綠色實線,6像素寬
	m_pen[2].CreatePen(PS_DASH,1,RGB(255,0,0));		 //紅色虛線,必須為一個像素寬
	m_pen[3].CreatePen(PS_DOT,1,RGB(0,0,255));		 //藍色點線,必須為一個像素寬
	m_pen[4].CreatePen(PS_DASHDOTDOT,1,RGB(255,0,0));//紅色雙點虛線,必須為一個像素寬

	//繪制多邊形的點數組
	m_point[0].x=10;
	m_point[0].y=100;
	m_point[1].x=10;
	m_point[1].y=120;
	m_point[2].x=100;
	m_point[2].y=105;
	m_point[3].x=170;
	m_point[3].y=120;
	m_point[4].x=170;
	m_point[4].y=100;
}
***Dlg.cpp onpaint函數

void CLineTestDlg::OnPaint()
{
	CPaintDC dc(this); // 用於繪制的設備上下文
	CBrush brush(RGB(190,190,190));//畫刷
	dc.SelectObject(&brush);//將畫刷選入DC
	DrawLine(&dc);
	DrawPolyline(&dc);
	DrawPolygon(&dc);
	DrawRect(&dc);
	DrawRoundRect(&dc);
	DrawEllipse(&dc);
	DrawArc(&dc);
	DrawAngleArc(&dc);

	if (IsIconic())
	{
		CPaintDC dc(this); // 用於繪制的設備上下文
		SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc()), 0);

		// 使圖標在工作區矩形中居中
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// 繪制圖標
		dc.DrawIcon(x, y, m_hIcon);

		
	}
	else
	{
		CDialogEx::OnPaint();
	}
}
定義繪圖函數:

//繪制直線函數
void CLineTestDlg::DrawLine(CDC *pDC)
{
	CPen *oldPen=pDC->SelectObject(&m_pen[0]);//保存DC原始畫筆
	for(int i=0;i<5;i++)	
	{
		pDC->SelectObject(&m_pen[i]);		//將畫筆選入DC
		pDC->MoveTo(20,20+i*15);			//設置DC當前點
		pDC->LineTo(170,20+i*15);			//繪制直線
	}
	pDC->SelectObject(oldPen);		//回復DC原畫筆
}

//繪制折線
void CLineTestDlg::DrawPolyline(CDC *pDC)
{
	CPen *oldPen=pDC->SelectObject(&m_pen[0]);//保存DC原始畫筆
	for(int i=0;i<5;i++)
	{
		for(int j=0;j<5;j++)
		{
			m_point[j].y+=35;		//每次下移35個像素
		}
		pDC->SelectObject(&m_pen[i]);
		pDC->Polyline(m_point,5);
	}
	pDC->SelectObject(oldPen);
}

//繪制多邊形
void CLineTestDlg::DrawPolygon(CDC *pDC)
{
	for(int j=0;j<5;j++)
		m_point[j].y+=75;	//數組中的點下移75個像素
	CPen *oldPen=pDC->SelectObject(&m_pen[0]);//保存DC原始畫筆
	for(int i=0;i<5;i++)
	{
		for(int j=0;j<5;j++)
		{
			m_point[j].y+=35;	//每次繪制圖形下移35個像素
		}
		pDC->SelectObject(&m_pen[i]);
		pDC->Polygon(m_point,5); //繪制多邊形
	}
	pDC->SelectObject(oldPen);
}

//繪制矩形
void CLineTestDlg::DrawRect(CDC *pDC)
{
	CRect rect(150,20,220,80);
	CPen *oldPen=pDC->SelectObject(&m_pen[0]);
	for(int i=0;i<5;i++)
	{
		rect.OffsetRect(80,0);//每次繪圖右移80個像素
		pDC->SelectObject(&m_pen[i]);
		pDC->Rectangle(&rect);//繪制矩形
	}
	pDC->SelectObject(oldPen);
}

//繪制圓角矩形
void CLineTestDlg::DrawRoundRect(CDC *pDC)
{
	CRect rect(150,150,220,230);
	CPen *oldPen=pDC->SelectObject(&m_pen[0]);
	for(int i=0;i<5;i++)
	{
		rect.OffsetRect(80,0);//每次繪圖右移80個像素
		pDC->SelectObject(&m_pen[i]);
		pDC->RoundRect(&rect,CPoint(15,15));
	}
	pDC->SelectObject(oldPen);
}

//繪制橢圓
void CLineTestDlg::DrawEllipse(CDC *pDC)
{
	CRect rect(150,260,220,310);
	CPen *oldPen=pDC->SelectObject(&m_pen[0]);
	for(int i=0;i<5;i++)
	{
		rect.OffsetRect(80,0);
		pDC->SelectObject(&m_pen[i]);
		pDC->Ellipse(&rect);
	}
	pDC->SelectObject(oldPen);
}

//繪制弧線
void CLineTestDlg::DrawArc(CDC *pDC)
{
	CRect rect(150,400,220,460);
	CPoint ptStart(170,440);
	CPoint ptEnd(210,400);
	CPen *oldPen=pDC->SelectObject(&m_pen[0]);
	for(int i=0;i<5;i++)
	{
		rect.OffsetRect(80,0);
		ptStart+=CPoint(80,0);
		ptEnd+=CPoint(80,0);
		pDC->SelectObject(&m_pen[i]);
		pDC->Arc(&rect,ptStart,ptEnd);
	}
	pDC->SelectObject(oldPen);
}

//繪制直線與弧線
void CLineTestDlg::DrawAngleArc(CDC *pDC)
{
	CRect rect(150,500,220,560);
	CPoint ptCenter(185,600);
	CPoint ptStart(150,630);
	int r=30;
	float angleStart=0;
	float angleEnd=180;
	CPen *oldPen=pDC->SelectObject(&m_pen[0]);
	for(int i=0;i<5;i++)
	{
		rect.OffsetRect(80,0);
		ptStart+=CPoint(80,0);
		pDC->MoveTo(ptStart);
		pDC->SelectObject(&m_pen[i]);
		pDC->AngleArc(ptCenter.x,ptCenter.y,r,angleStart,angleEnd);
	}
	pDC->SelectObject(oldPen);
}


運行效果:



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved