Visual Studio 2015下MFC畫圖個人筆記
阿新 • • 發佈:2019-02-18
直線的繪製與畫刷的使用
程式效果:在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中新增以下程式碼,用於線段的繪製。
使用畫刷填充矩形區域,在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);
// 使用畫刷填充矩形區域
//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);