VS2019, MFC 在view類實現畫圖(直線,線的顏色,粗細,扇形...)

1,添加鼠標左鍵按下Windows Message的響應函數OnLButtonDown;添加鼠標左鍵彈起響應函數OnLButtonUp。右鍵view類>>屬性,然後在WM消息中選擇OnLButtonDown和OnLButtonUp.

2. 在view類中添加成員變量,各個變量的使用原因見註釋

 

3. 在OnLButtonDown函數中 獲取/保存 鼠標原點 (鼠標左鍵按下去時刻的座標)和寫標號m_bDrav = TRUE

 

4.在OnButtonUp函數中實現畫線(打開相應的代碼即可)(有關畫刷和位圖請讀者自行理解)
 

void CxxxxView::OnLButtonUp(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息處理程序代碼和/或調用默認值
	// 
	/*使用全局SDK 實現畫直線
	HDC hdc;
	hdc = ::GetDC(m_hWnd);
	MoveToEx(hdc, m_ptOrigin.x, m_ptOrigin.y, NULL);
	LineTo(hdc, point.x, point.y);
	::ReleaseDC(m_hWnd, hdc);
	*/
	/*使用CDC (MFC)
	CDC* pDC = GetDC();
	pDC->MoveTo(m_ptOrigin);
	pDC->LineTo(point);
	ReleaseDC(pDC);
	*/
	/*使用CClientDC

	//CClientDC dc(GetParent());
	CClientDC dc(this);
	dc.MoveTo(m_ptOrigin);
	dc.LineTo(point);//不需要調用release
	*/
	/*使用CWindowDC
	//CWindowDC dc(this);
	//CWindowDC dc(GetParent());
	CWindowDC dc(GetDesktopWindow());
	dc.MoveTo(m_ptOrigin);
	dc.LineTo(point);//不需要釋放
	*/
	/*選擇畫筆顏色粗細
	//CPen pen(PS_SOLID,10,RGB(0,255,0));
	CPen pen(PS_DOT, 10, RGB(0, 255, 0));
	//CPen pen(PS_DASH, 1, RGB(0, 255, 0));
	CClientDC dc(this);
	CPen *pOldPen = dc.SelectObject(&pen);
	dc.MoveTo(m_ptOrigin);
	dc.LineTo(point);
	dc.SelectObject(pOldPen);
	*/
	//選擇畫刷
	//CBrush brush(RGB(255,0,0));
	//CClientDC dc(this);
	//dc.FillRect(CRect(m_ptOrigin, point), &brush);
	//位圖畫刷
	//CBitmap bitmap;
	//bitmap.LoadBitmapW(IDB_BITMAP1);
	//CBrush brush(&bitmap);
	//CClientDC dc(this);
	//dc.FillRect(CRect(m_ptOrigin, point), &brush);
	//透明畫刷
	//CClientDC dc(this);
	//CBrush* pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
	//CBrush* pOldBrush = dc.SelectObject(pBrush);//dc.SelectObject(&pBrush);
	//dc.Rectangle(CRect(m_ptOrigin,point));
	//dc.SelectObject(pOldBrush);
	m_bDrav = FALSE;


	CView::OnLButtonUp(nFlags, point);
}

5.要實現畫非直線或者扇形線,需要添加windows對鼠標移動的響應函數OnMouseMove

6.實現方式如代碼在函數OnMouseMove中(根據需要選擇想用的線和代碼)

void CSunXinjiaocheng02View::OnMouseMove(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息處理程序代碼和/或調用默認值
	//畫隨機線
	/*
	CClientDC dc(this);
	CPen pen(PS_SOLID,1,RGB(255,0,0));//選擇線的顏色
	CPen* pOldPen = dc.SelectObject(&pen);
	if (TRUE == m_bDrav)
	{
		dc.SetROP2(R2_BLACK);//繪畫的模式
		dc.MoveTo(m_ptOrigin);
		//dc.LineTo(point);//畫隨機線
		//m_ptOrigin = point;
		//畫扇形
		dc.LineTo(m_pOld);
		//dc.MoveTo(m_ptOrigin);
		dc.MoveTo(m_pOld);
		dc.LineTo(point);
		m_pOld = point;
		
	}
	dc.SelectObject(pOldPen);
	*/
	CView::OnMouseMove(nFlags, point);
}

重點:裏面用到了HDC,CDC,CClientDC,WindowsDC ,CPen,CBrush,CBitmap類創建對象並用到了很多相關的成員函數,這些需要讀者自行去搜索查看。也可以下載MSDN(2008版本)查看:鏈接:https://pan.baidu.com/s/1UPpu61qQMQGk4kLjYl5WbQ 
提取碼:a620

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章