MFC 图形

来源:互联网 发布:安卓网游源码 编辑:程序博客网 时间:2024/05/16 12:06

设备描述表(DeviceContext简称为DC),也称设备上下文或设备环境,其是一种包含各种绘图属性(如前面所说的字体、颜色)和方法(即各种绘图函数)的数据结构。在窗口中绘图之前必须首先获取窗口的设备描述表。没有设备描述表,任何绘图函数都无法工作。

有三种方法获取DC:1. GetDC() 2.BeginPain()函数 3.构造CDC对象

CGdiObject类便是所有图形设备接口对象的一个抽象的基类。然而,设计人员在做开发的过程中很少用到基类CGdiObject类,而是经常用到其派生类。通常一个Windows GDI对象都是由CGdiObject的派生类的C++对象所表示的,CGdiObject的派生类包括CBitmapCBrushCFontCPenCRgnCpalette

 

以下用CBrush为例:

CBrush() 有三种重载形式:

1).   CBrushCOLORREF crColor)产生某种颜色的实心刷子

CBrush br( RGB( 255, 0 ,0 ));

dc.SelectObject( &br );

2CBrush( int index,COLORREF crColor )产生某种剖面线的刷子

CBrushbr(HS_FDIAGONAL,RGB(255,0,0));

dc.SelectObject(br);

 

3)      CBrush CBitmap* pBitmap )产生位图刷子

CBitmapbmp;

bmp.LoadBitmap(IDB_BITMAP1);              //加载位图

CBrushbr(&bmp);

dc.SelectObject(br);

 

代码:

新建一个单文本的MFC工程,使用手动添加代码的方式:

 在View.h中定义一个CPoint类型的变量,用来存储画笔或者是画刷的初始位置,在View.cpp中加入函数或者在ClassWizard中加入windows消息处理函数,OnLButtonDown和OnLButtonUp,实现功能左键按下时代表初始位置,拖动释放时显示一个画刷结果。

void CCBrushView::OnLButtonDown(UINT nFlags, CPoint point)
{
 // TODO: Add your message handler code here and/or call default

 m_pOrign=point;


 CView::OnLButtonDown(nFlags, point);
}

void CCBrushView::OnLButtonUp(UINT nFlags, CPoint point)
{
 // TODO: Add your message handler code here and/or call default
 CBrush newbr( RGB(0, 255, 255 ));
 CClientDC dc( this );
 CBrush *pOldbr = dc.SelectObject( &newbr );
 dc.Rectangle( CRect(m_pOrign,point) );
 dc.SelectObject( pOldbr );

 CView::OnLButtonUp(nFlags, point);
}

画笔的使用类似,步骤如下:

1)创建刷子、笔,若该绘图工具已初始化,则可以直接跳到第(3)步。
2)对不能仅仅由构造函数来创建的绘图工具,需要通过调用它们的成员函数来对其进行初始化。
3)使用SelectObject函数将自定义绘图工具选入设备描述表。用SelectStockObject将库存绘图工具选入设备描述。
4)进行绘图操作。
5)将旧的GDI对象选回设备描述表,若第(1)步中是用new创建对象,使用完毕后应该用Delete删除该对象。
 
例子:创建一个单文档应用程序后,添加消息函数,输入如下代码:(OnLButtonDown函数代码相同)
void CMyView::OnLButtonUp(UINTnFlags,CPoint point)
{
 // TODO: Add yourmessage handler code here and/or call default
    CPennewPen(PS_SOLID ,2,RGB(255,0,0)); //创建画笔
    CClientDC dc(this); //获取设备描述表
    CPen *pOldPen=dc.SelectObject(&newPen); //定义画笔指针并制定返回画笔位置
    dc.MoveTo(m_ptOrigin); //保存原位置
    dc.LineTo(point); //画线
    dc.SelectObject(pOldPen); //将旧画笔选回设备描述表
    CView::OnLButtonUp(nFlags, point);
 }

 

 

原创粉丝点击