您的位置:首页 > 其它

MFC画图(画线、画矩形、画刷画笔的使用)

2015-08-03 16:00 519 查看
绘制任意线条:
1、创建基于单文档工程:Draw
CDrawView类中添加成员变量:
CPoint m_ptOrigin;
BOOL m_bDraw;
2、CDrawView()中初始化:
m_ptOrigin = point;
m_bDraw = false;
3、添加消息响应函数:
WM_LBUTTONDOWN    WM_LBUTTONUP  WM_MOUSEMOVE
4、左键按下时:
m_ptOrigin = point;
m_bDraw = true;
5、左键抬起:
m_bDraw = false;
6、鼠标移动时:
    //画连续线条
CClientDC dc(this);
if(m_bDraw)
    {
       dc.MoveTo(m_ptOrigin);
       dc.LineTo(point);
       m_ptOrigin = point;
    }
    //画扇形线条
CClientDC dc(this);
    if(m_bDraw)
    {
       dc.MoveTo(m_ptOrigin);
       dc.LineTo(point);
    }
    //画带外包线的扇形线条
析:画带外包线的扇形线条,不光记录初始位置,还要记录鼠标移动上一位置。
添加成员变量:
CPoint m_ptOld;
在鼠标左键按下时初始化:
m_ptOld = point;
在鼠标移动时进行改变:
CClientDC dc(this);
    if(m_bDraw)
    {
       dc.MoveTo(m_ptOrigin);
       dc.LineTo(m_ptOld);
       dc.MoveTo(m_ptOld);
       dc.LineTo(point);
       m_ptOld = point;
    }
画矩形:
画无边框的矩形
方法说明:利用FillRect函数填充矩形。填充内容为画刷的内容,即画刷对象的指针。
     CBrush brush(RGB(5,255,255));
     CClientDC dc(this);
     dc.FillRect(CRect(m_ptOrigin,point),&brush);
以位图作为画刷的资源
     CBitmap bitmap;
     bitmap.LoadBitmap(IDB_BITMAP1); 
     CBrush brush(&bitmap);
     CClientDC dc(this);
     dc.FillRect(CRect(m_ptOrigin,point),&brush);
画有边框的矩形
方法说明:利用Rectangle方法来画矩形。其中CBrush与CPen类分别负责矩形内部和矩形边框的属性
     //画中心为白色的矩形
     CClientDC dc(this);
     dc.Rectangle(CRect(m_ptOrigin,point));
 
     //画中心为透明的矩形
     CClientDC dc(this);
CBrush *pBrush=CBrush::FromHandle((HBRUSH)
GetStockObject(NULL_BRUSH));
     CBrush *pOldBrush=dc.SelectObject(pBrush);
     dc.Rectangle(CRect(m_ptOrigin,point));
     pOldBrush=pBrush;
 
//画中心为透明边为任意颜色的矩形
     CClientDC dc(this);
     CPen pen(PS_SOLID,1,RGB(234,23,53));
     CPen *pOldPen=dc.SelectObject(&pen);
     CBrush *pBrush=CBrush::FromHandle((HBRUSH)
GetStockObject(NULL_BRUSH))
     CBrush *pOldBrush=dc.SelectObject(pBrush);
     dc.Rectangle(CRect(m_ptOrigin,point));
     dc.SelectObject(pOldPen);
     dc.SelectObject(pOldBrush);
 
使用画笔、画刷
在OnLButtonUp函数中:
/////////////////////////////////////////////////////////////////
CPen pen(PS_SOLID,1,RGB(234,23,53));
//定义一个CPen类对象,并利用RGB宏改变其颜色
CClientDC dc(this);
CPen *pOldPen=dc.SelectObject(&pen); //将其选入设备表
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
dc.SelectObject(pOldPen); 
/////////////////////////////////////////////////////////////////
CBrush brush(RGB(0,255,0)); 
CClientDC dc(this); 
CRect rect(m_ptOrigin,point); 
dc.FillRect(&rect,&brush); 
/////////////////////////////////////////////////////////////////
使用位图创建画刷:
插入->资源->位图->引入,可以引入位图,初始一般命名为:IDB_BITMAP1
CBitmap bitmap; 
bitmap.LoadBitmap(IDB_BITMAP1); 
CBrush brush(&bitmap); 
CClientDC dc(this); 
CRect rect(m_ptOrigin,point); 
dc.FillRect(&rect,&brush);
/////////////////////////////////////////////////////////////////
CBrush *brush; 
brush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
CClientDC dc(this); 
CBrush *pOldBrush =dc.SelectObject(brush) ;  
dc.Rectangle(CRect(m_ptOrigin,point)); 
dc.SelectObject(pOldBrush) ; 
注:
常用的绘图设备类对象的创建和将其引入到设备环境中的方法
在选择绘图设备类对象(GDI对象)进行绘图时,一般可按下列步骤进行:
(1)定义一个GDI对象,然后调用相应的函数(如CreatePen、CreateSolidBrush等)创建此GDI对象。
(2)将已构造出的GDI对象利用设备环境类对象的成员函数SelectObject选入到当前环境中,并同时将原来的GDI对象保存起
来。
(3)绘图结束后,恢复当前设备环境中原来的GDI对象。
注意:在Windows系统中包含了一些库存的GDI对象,在第(3)步中可直接利用设备环境类(CDC)的成员函数
SelectStockObject将一个Windows库存的GDI对象选入,系统可自动将原来选入的GDI对象从设备环境中分离出来。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: