MFC绘图
新建项目:Draw
在CDrawView中添加变量:
private: CPoint m_ptOrigin; CPoint M_ptOld; BOOL m_bDraw;
代码:
// CDrawView 构造/析构 CDrawView::CDrawView() : m_ptOrigin(0) , m_bDraw(false) , m_ptOld(0) { // TODO: 在此处添加构造代码 } // CDrawView 消息处理程序 void CDrawView::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 m_ptOrigin = m_ptOld = point; m_bDraw = TRUE; CView::OnLButtonDown(nFlags, point); } void CDrawView::OnLButtonUp(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 //1.使用HDC绘图 /*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);*/ //2.使用CDC绘图 /*CDC *cdc = GetDC(); cdc->MoveTo(m_ptOrigin); cdc->LineTo(point); ReleaseDC(cdc);*/ //3.使用CClientDC绘图 //CClientDC dc(this); ////获取父窗口区 ////CClientDC dc(GetParent()); //dc.MoveTo(m_ptOrigin); //dc.LineTo(point); //4.使用CWindowDC绘图 //CWindowDC dc(this); ////获取父窗口区 ////CWindowDC dc(GetParent()); ////获取整个屏幕区 ////CWindowDC dc(GetDesktopWindow()); //dc.MoveTo(m_ptOrigin); //dc.LineTo(point); //5.选择线型 /*CPen cpen(PS_SOLID,1,RGB(0,255,0)); CClientDC dc(this); CPen *pOldPen = dc.SelectObject(&cpen); dc.MoveTo(m_ptOrigin); dc.LineTo(point); dc.SelectObject(pOldPen);*/ //6.使用画刷 //6.1 //CBrush brush(RGB(0,255,0)); //6.2 /*CBitmap bitmap; bitmap.LoadBitmapW(IDB_BITMAP1); CBrush brush(&bitmap); CClientDC dc(this); CBrush *pOldBrush = dc.SelectObject(&brush); dc.Rectangle(CRect(m_ptOrigin,point)); dc.SelectObject(pOldBrush);*/ //6.3创建透明画刷 /*CBrush *pbrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH)); CClientDC dc(this); CBrush *pOldBrush = dc.SelectObject(pbrush); dc.Rectangle(CRect(m_ptOrigin,point)); dc.SelectObject(pOldBrush);*/ m_bDraw = FALSE; CView::OnLButtonUp(nFlags, point); } void CDrawView::OnMouseMove(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 CPen pen(PS_SOLID, 1, RGB(0,255,0)); CClientDC dc(this); CPen *pOldPen = dc.SelectObject(&pen); if(m_bDraw) { //画连续的线 /*dc.MoveTo(m_ptOrigin); dc.LineTo(point); m_ptOrigin = point;*/ //画扇形 /*dc.MoveTo(m_ptOrigin); dc.LineTo(m_ptOld); dc.MoveTo(m_ptOrigin); dc.LineTo(point); m_ptOld = point;*/ //画带边线的扇形 dc.MoveTo(m_ptOrigin); dc.LineTo(m_ptOld); dc.MoveTo(m_ptOld); dc.LineTo(point); m_ptOld = point; } dc.SelectObject(pOldPen); CView::OnMouseMove(nFlags, point); }
注:
笔记

浙公网安备 33010602011771号