MFC 图形

设备描述表(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 (UINT nFlags , CPoint point)
{
 // TODO: Add yourmessage handler code here and/or call default
    CPen newPen (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);
 }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值