void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_ptOrigin = point;
m_bDraw = true;
CView::OnLButtonDown(nFlags, point);
}
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
// //1.利用SDK全局函數實現畫線功能
// //首先得到窗口的設備描述表
// HDC hdc;
// hdc = ::GetDC(m_hWnd); //得到設備描述表句柄,平臺sdk函數必須加::,不然被認爲是CWnd函數
// //CWnd類都有一個成員變量m_hWnd保存窗口句柄,CDrawView繼承CWind所以一樣有m_hWnd
// //移動到線條的起點
// MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL);
// //畫線
// LineTo(hdc, point.x, point.y);
// //釋放設備描述表
// ::ReleaseDC(m_hWnd,hdc);
// //2.利用mfc的CDC類實現畫線功能
// CDC * pDc;
// pDc = GetDC(); //得到當前窗口的設備描述表指針
// pDc->MoveTo(m_ptOrigin);
// pDc->LineTo(point);
// ReleaseDC(pDc);
// //3.利用mfc的CClientDC類實現畫線功能
// //CClientDC派生於CDC類,可自動獲取,釋放設備描述表資源
// CClientDC dc(this); //構造函數須要一個CWnd指針
// // CClientDC dc(GetParent()); //得到View的父窗口句柄也就是Frame,此時畫線能夠畫到工具欄內
// dc.MoveTo(m_ptOrigin);
// dc.LineTo(point);
// //4.利用mfc的CWindowDC類實現畫線功能
// //CWindowDCC派生於CDC類,也可自動獲取,釋放設備描述表資源
// CWindowDC dc(this);
// //CWindowDC dc(GetParent()); //此時能夠將線畫到菜單欄,標題欄
// //CWindowDC dc(GetDesktopWindow()); //得到桌面窗口句柄
// dc.MoveTo(m_ptOrigin);
// dc.LineTo(point);
// //5.改變畫筆顏色
// CPen pen(PS_SOLID,10,RGB(255,0,0));
// CClientDC dc(this);
// CPen *pOldPen = dc.SelectObject(&pen); //將畫筆選擇到設備描述表中
// dc.MoveTo(m_ptOrigin);
// dc.LineTo(point);
// dc.SelectObject(pOldPen); //畫完後改成最初的畫筆
// //6.畫刷建立
// CBrush brush(RGB(0,255,0));
// CClientDC dc(this);
// dc.FillRect(CRect(m_ptOrigin,point),&brush);//此處用指定的畫刷去填充,
// //因此不須要將畫刷選擇到設備描述表
// //7.位圖畫刷
// //事先插入資源類型爲bitmap的位圖(id爲IDB_BITMAP1)
// CBitmap bitmap;
// bitmap.LoadBitmap(IDB_BITMAP1);
// CClientDC dc(this);
// CBrush brush(&bitmap); //用bitmap建立畫刷
// dc.FillRect(CRect(m_ptOrigin,point),&brush);
// //8.畫矩形
// CClientDC dc(this);
// dc.Rectangle(CRect(m_ptOrigin,point));//畫矩形函數,此時若是矩形重合,新矩形會覆蓋原矩形的邊
// //緣由是因爲默認畫刷爲白色且會自動填充矩形內部
// //9.畫內部透明的矩形
// CClientDC dc(this);
// CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
// // GetStockObject函數返回類型爲HGDIOBJ,需強制轉換爲FromHandle的參數類型HBRUSH
// CBrush* pOldBrush= dc.SelectObject(pBrush); //下面畫矩形的函數中不能指定畫刷,因此須要爲設備描述表選擇畫刷
// dc.Rectangle(CRect(m_ptOrigin,point));
// dc.SelectObject(pOldBrush);
// //dc.FillRect(CRect(m_ptOrigin,point),pBrush); //若是不是選擇畫刷再畫矩形,直接經過這種方式是畫不出矩形邊框的
//10.畫曲線相關
m_bDraw = false;
CView::OnLButtonUp(nFlags, point);
}
void CDrawView::OnMouseMove(UINT nFlags, CPoint point) { CClientDC dc(this); if (true == m_bDraw) //判斷鼠標是否已經按下 { dc.MoveTo(m_ptOrigin); dc.LineTo(point); m_ptOrigin = point; //將起始點 改成如今鼠標的位置 } CView::OnMouseMove(nFlags, point); }