第二章 在窗口中绘图GDI

来源:互联网 发布:java内存泄露例子 编辑:程序博客网 时间:2024/05/16 19:28

Window中负责图形输出的是Graphics Device Interface (图形设备接口),或称GDI.

一、MFC设备描述表类

在MFC应用程序中获取设备描述表的一种方法是调用CWnd::GetDC,它返回指向表示Window设备描述表的CDC对象的指针。

在画图完毕时,要用CWnd::ReleaseDC释放由CWnd::GetDC获取的设备描述表指针。

CDC *pDC = GetDC();// Do some drawingReleaseDC(pDC);//  相同的方式PAINTSTRUCT ps;CDC *pDC = BeginPaint(&ps);// Do some drawingEndPaint(&ps);

CDC提供了一些派生类

CPaintDC  用于在窗口客户区画图(仅限于OnPaint处理程序)

CClientDC 用于在窗口客户区画图(除OnPaint外的任何处理程序)

CWindowDC 用于在窗口内任意地方画图,包括非客户区

CMetaFileDC 用于向GDI元文件画图

这些类被设计为可直接进行实例化。各个类的构造函数和析造函数调用相应的函数捕获和释放设备描述表,从而使得设备描述表的使用非常方便

CPaintDC dc(this);

// do some drawing

传送给类构造函数的指针确定了设备描述表所属的窗口。

二、设备描述表常用属性

文本颜色  CDC::SetTextColor    Black

背景颜色 CDC::SetBkColor       white

背景模式 CDC::SetBkMode      OPAQUE  (默认不透明的模式)  另一种 模式透明(TRANSPARENT)

映射模式 CDC::SetMapMode    MM_TEXT

绘图模式 CDC::SetROP2         R2_COPYPEN     例:R2_NOT 反转当前背景色

当前位置  CDC::MoveTo            (0,0)

当前画笔  CDC::SelectObject    BLACK_PEN

当前画刷  CDC::SelectObject    WHITE_BRUSH

当前字体 CDC::SelectObject    SYSTEM_FONT

注意:几种映射模式用法。 

坐标转换: CDC::LPtoDP  逻辑坐标转为设备坐标值  (鼠标击中测试中常用到)

CRect rect;

GetClientRect(&rect);  // 得到的是 设备坐标值

画图函数~

CPen类

第一种方法:

CPen pen(PS_SOLID, 1, RGB(255,0,0));

第二种方法:

CPen pen;

pen.CreatePen(PS_SOLID, 1,RGB(255,0,0));

第三种方法:

CPen pen;

LOGPEN  lp;

lp.lopnStyle = PS_SOLID;

lp.lopnWidth.x = 1;

lp.lopnColor =  RGB(255,0,0);

pen.CreatePenIndirect(&lp);

 LOGPEN的lopnWidth字段是一个POINT数据结构。这里只用到了x 数据

CBrush类

一、CBrush brush(RGB(255,0,0))

;二、CBrush brush; 

brush.CreateSolidBrush(RGB(255,0,0));

三、将LOGBRUSH初始化 并调用CBrush::CreateBrushIndirect来创建画刷

将阴影线索引和COLORREF值传送给CBrush的构造函数或调用CBrush::CreateHatchBrush都能创建一个阴影线画刷。

CBrush brush(HS_DIAGCROSS, RGB(255,0,0));

CBrush brush;

brush.CreateHatchBrush(HS_DIAGCROSS, RGB(255,0,0));

CFont类

CFont font;

font.CreatePointFont(120, _T("Times New Roman"));  //第一个参数是字体的大小,第二个参数是 字体的类型

滚动条~

 

0 0
原创粉丝点击