MFC Windows程序设计--在窗口绘图
来源:互联网 发布:java计算a阶乘之和 编辑:程序博客网 时间:2024/06/05 00:59
设备描述表类:
CDC
1.获取CDC
对非OnPaint中
CDC* pDC = CWnd::GetDC();// 客户区DC,CWnd::GetWindowDC(),整个窗口
对OnPaint中
PAINTSTRUCT ps;
CDC *pDC = BeginPaint(&ps);
….
EndPaint(&ps);
MFC的改进:
提供专门用途的设备描述表类
CPaintDC:在客户区绘图,仅限OnPaint中使用
CClientDC:在客户区绘图,除OnPaint外其他地方
CWindowDC:窗口内任意地方
CMetaFileDC:向GDI文件绘图
各个类的构造和析构函数调用相应的函数捕获和释放设备描述表。
在整个屏幕绘图:
CClientDC dc(NULL);/ CWindowDC dc(NULL);
2.主要的设备描述表属性
6个GDI对象:
画笔
画刷
字体
位图
区域
调色板(基本不用)
设备描述表属性的保存和恢复可用 CDC::SaveDC,CDC::RestoreDC。
或WNDCLASS包含风格CS_OWNDC,CS_CLASSDC
3.关于绘图模式
GDI将像素点输出到逻辑显示平面时,不是简单地输出像素点颜色,相反,它通过一系列布尔运算将 输出点颜色 和 输出目标位置上 像素颜色 合成。
4.关于映射模式
用于确定 逻辑坐标到设备坐标的转换
一般传给CDC输出函数的都是逻辑坐标值。
Windows支持8中不同的映射模式
使用公制映射模式时,显示屏幕上1逻辑英寸不等于实际中1英寸。因为Windows不知道监视器每英寸内像素树。打印机和其他硬拷贝设备无此情况。
使用MM_ISOTROPIC时,同等缩放,指的是x和y方向的一个逻辑单位,对对应到相同数量的物理单位。
坐标转换:
CDC::LPToDP/DPToLP
CWnd::ClientToScreen/ScreenToClient,一个相对于屏幕左上角。一个相对于客户区左上角。
映射模式相关函数:
Window代表逻辑。Viewport代表设备
CDC::SetWindowOrg(x,y)等价于 告诉Windows将逻辑点(x,y)映射成设备点(0,0)
CDC::SetViewportOrg(x,y)等价于告诉Windows将设备点(x,y)映射成逻辑点(0,0)
CDC::SetWindowExt
CDC::SetViewportExt
5.从CDC::GetDeviceCaps从获取几个设备描述表相关的设备信息
6.GDI绘图函数
MoveTo
LineTo
PolylineTo
Polyline
Arc
ArcTo
PolyBezier
所有GDI画曲线函数,不会画最后一个像素点
Chord
Ellipse
Pie
Polygon
Rectangle
RoundRect
画封闭图形时,从外接方框的左上边界画到右下边界(不含右下边界)
7.GDI画笔,CPen
画笔用来画曲线和封闭图形的边框
画笔样式
PS_SOLID/PS_NULL/PS_INSIDEFRAME风格下才有宽度概念
对通路可使用扩展笔。
8.GDI画刷,CBrush
画刷三类基本类型:
单色,
带阴影线:HS_DIAGCROSS,
带图案
对阴影线画刷,背景模式为OPAQUE时,线间空隙由CDC的背景色填充。为TRANSPARENT时,由当前背景填充。
画刷原点:
CPoint point(x1, y1);
dc.LPToDP(&point);
point.x %= 8;
point.y %= 8;
brush.unrealizeObject();// 允许改变画刷原点
dc.SetBrushOrg(point);// 改变原点
dc.SelectObject(&brush);// 新的原点,新原点下画刷
dc.Rectangle(x1,y1,x2,y2);
9.画文本
10.字体,CFont
11.备用对象
对于备用对象,使用时 用CDC::SelectStockObject将其选入设备描述表。也可用 CGdiObject::CreateStockObject将其赋给GDI对象。
备用笔:NULL_PEN,WHITE_PEN,BLACK_PEN
备用刷:NULL_BRUSH,HOLLOW_BRUSH,…,WHITE_BRUSH
12.关于GDI对象的删除
在栈上创建的CGdiObject或其派生类对象,在超出范围时被自动析构。
用new在堆上创建的CGdiObject或其派生类对象,要在不用时删除。
CGdiObject或其派生类对象可用 CGdiObject::DeleteObject被显示删除。
不能删除已经选入设备描述表的GDI对象,试图用已删除的对象画图,是错了。此时程序没有崩溃是,Windows有错误检查避免了崩溃。
- MFC Windows程序设计--在窗口绘图
- MFC Windows 程序设计 第二章 在窗口中绘图
- 20160315 第2章 在窗口中绘图(来自《MFC Windows 程序设计(第2版)》)
- Windows 窗口绘图基础 MFC
- windows程序设计(20):MFC绘图
- MFC Windows 程序设计->最顶层窗口
- MFC Windows 程序设计->控制窗口大小 WM_GETMINMAXINFO
- MFC中的窗口绘图问题
- MFC绘图_OSG窗口调用
- 在窗口中绘图
- 在窗口上绘图
- 第四章 WINDOWS绘图程序设计
- windows程序设计 绘图模式--SetROP2
- windows程序设计 绘图模式--SetROP2
- 《Windows程序设计》之子窗口
- windows程序设计 创建窗口
- windows程序设计 显示窗口
- 《MFC Windows 程序设计》
- Android中的动画
- MyEclipse 破解教程
- 从尾到头输出单链表
- KVM、QEMU与libvirt介绍
- Application Not Responding
- MFC Windows程序设计--在窗口绘图
- C++ — 内联函数
- 最长公共子序列 【DP】+【最长公共子序列】
- 求先序排列
- 解析深度卷积神经网络的14种设计模式
- 双系统进一次Win10就再也没有了系统选择界面
- Qt 判断网络连接
- Js_基础小结
- HDU 1004 Let the Balloon Rise