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