第二章 在窗口中绘图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")); //第一个参数是字体的大小,第二个参数是 字体的类型
滚动条~
- 第二章 在窗口中绘图GDI
- 第二章 在窗口中绘图
- MFC Windows 程序设计 第二章 在窗口中绘图
- 在窗口中绘图
- 在窗口中绘图(转)
- C#在窗口中绘图
- MFC中GDI绘图
- SDL 在指定窗口中绘图
- SDL 在指定窗口中绘图
- SDL 在指定窗口中绘图
- 使用Windows API进行GDI窗口绘图
- 使用Windows API进行GDI窗口绘图
- 使用GDI在windows中绘图(一)——windows GDI原理
- 调用API函数,在窗口非客户区绘图(C# GDI+编程)
- GDI+在内存中绘图
- 【VS2013中使用GDI+绘图】
- 在窗口上绘图
- C# GDI在控件上绘图
- HDU 4006
- POJ 2823
- HDU 4496
- 【转】OSAL内存管理1
- Codeforces 283A
- 第二章 在窗口中绘图GDI
- HDU 3635
- Codeforce 340D
- Codeforces 237C
- Codeforces 115A
- POJ 1144
- Codeforces 302D
- Codeforces 14D
- 快速幂取模