1. 程式人生 > >Visual Studio 2015下MFC畫圖個人筆記

Visual Studio 2015下MFC畫圖個人筆記

 直線的繪製與畫刷的使用

程式效果:在View檢視的某一點出滑鼠點選左鍵並按住,然後拖動滑鼠直至鬆開滑鼠左鍵。在View檢視將獲得一條由滑鼠左鍵按下處到滑鼠左鍵鬆開處的一條直線段。

1.新建MFC單文件程式,此處程式名Draw

2.為CDrawView新增成員變數,用於記錄線段的起點

在類檢視下右鍵單擊CDrawView,選擇“新增”->“新增變數”,訪問選擇“private”,變數型別為“CPoint”,變數名此處為m_ptStartPoint。

3. 使用類嚮導為CDrawView新增訊息響應函式

為CDrawView分別新增滑鼠按下與滑鼠鬆開的訊息響應函式,用於相應訊息的處理。在類檢視下右鍵單擊CDrawView,選擇“類嚮導”,選擇“訊息”欄,選中“WM_LBUTTONDOWN”,再選擇“新增處理程式”,使用同樣的方法新增“WM_LBUTTONUP”。


4.編輯訊息響應函式

在上圖中點選“編輯程式碼”可跳轉至對應的訊息響應函式。或在DrawView.cpp中找到這兩個的訊息響應函式。在OnLButtonDown中新增以下程式碼,用於儲存線段的起始點。
void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)
{
	// TODO: 在此新增訊息處理程式程式碼和/或呼叫預設值
	m_ptStart = point;
	CView::OnLButtonDown(nFlags, point);
}

在OnLButtonUp中新增以下程式碼,用於線段的繪製。
// 畫線方式一
	HDC hdc;
	//使用全域性函式獲取View類視窗控制代碼
	hdc = ::GetDC(m_hWnd);
	MoveToEx(hdc, m_ptStart.x, m_ptStart.y, NULL);
	LineTo(hdc, point.x, point.y);
	::ReleaseDC(m_hWnd, hdc);

	// 畫線方式二
	CDC *pDC = GetDC();
	pDC->MoveTo(m_ptStart);
	pDC->LineTo(point);
	ReleaseDC(pDC);

	// 畫線方式三 使用CClientDC,無需使用GetDC()與ReleaseDC()
	CPen pen(PS_SOLID, 1, RGB(255, 0, 0));
	CClientDC clientDC(this);
	// 函式SelectObject(Cpen *pen)的返回值為被替換畫筆物件的指標
	CPen *pOldPen = clientDC.SelectObject(&pen);
	clientDC.MoveTo(m_ptStart);
	clientDC.LineTo(point);
	clientDC.SelectObject(pOldPen);
使用畫刷填充矩形區域,在OnLButtonUp中新增以下程式碼:
	// 使用畫刷填充矩形區域
	//CBrush brush(RGB(255, 0, 0));
	//CClientDC clientDC(this);
	//clientDC.FillRect(CRect(m_ptStart, point), &brush);
使用畫刷載入點陣圖,在OnLButtonUp中新增以下程式碼:
	/**
	 * 使用畫刷載入點陣圖
	 * 滑鼠右鍵專案名————“新增”————“資源”————“Bitmap”————“新建”
	 * 使用LoadBitmap()函式載入點陣圖
	 */
	//CBitmap bitmap;
	//bitmap.LoadBitmapW(IDB_BITMAP1);
	//CBrush brush(&bitmap);
	//CClientDC clientDC(this);
	//clientDC.FillRect(CRect(m_ptStart, point), &brush);