MFC中GDI绘图
来源:互联网 发布:淘宝联盟佣金怎么领 编辑:程序博客网 时间:2024/04/29 10:30
为了支持GDI绘图,MFC提供了两种重要的类:设备环境DC(Device Context)类,用于设置绘图属性和绘制图形;绘图对象类,封装了各种GDI绘图对象,包括画笔、刷子、字体、位图、调色板和区域。
二.MFC中GDI绘图
GDI绘图包括以下步骤:获取设备环境,设置坐标映射,创建绘图工具,调用DC绘图函数绘图。
1、在MFC中,MFC提供了不同类型的DC类。
<1> CPaintDC构造函数:CPaintDC(CWnd* pWnd); 构造一个CPaintDC对象(pWnd指向一个CPaintDC对象所属的CWnd对象),准备用于绘画的应用程序窗口。
void CView::OnPaint()
{
CPaintDC dc(this);
// TODO: Add your message handler code here
OnPrepareDC(&dc);
OnDraw(&dc)
}
<2>CClientDC构造函数:CClientDC(CWnd* pWnd); 构造一个CClientDC对象,它将存取pWnd指向的CWnd的客户区。
// 鼠标左键事件处理
void CExView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CClientDC dc(this);//定义客户区设备环境
dc.LineTo(point);//绘制线段
}
<3>CWindowDC构造函数:CWindowDC( CWnd* pWnd );构造一个CWindowDC对象,它可以访问pWnd指向的CWnd对象的整个屏幕区域(包括客户区和非客户区)。比如我们在做屏幕保护程序时,一般以整个屏幕区域作为绘制区域。
2、设置坐标映射
3、创建绘图工具并选入DC
MFC对GDI对象进行了很好的封装,提供了封装GDI对象的类,如CPen、CBrush、CFont、CBitmap和CPalette等,这些类都是GDI对象类CGdiObject的派生类。
例:
CPen *pOldPen,newPen;
CBrush *pOldBrush,newBrush1,newBrush2;
//创建宽度为pixel的白色实线画笔
newPen.CreatePen(PS_SOLID,1,RGB(0,0,0));
//创建红色实线画刷
newBrush1.CreateSolidBrush(RGB(255,0,0));
//创建红色实线度的向下(从右到左)影线的阴影画刷
newBrush2.CreateHatchBrush(HS_BDIAGONAL,RGB(255,0,0));
//将newPen画笔和newBrush1画刷对象选入设备环境
pOldPen = pDC->SelectObject(&newPen);
pOldBrush = pDC->SelectObject(&newBrush1);
//调用DC绘图函数绘图
//……
//绘图完毕,恢复原来画笔、画刷
pDC->SelectObject(pOldPen);
pDC->SelectObject(pOldBrush);
//删除创建的画笔、画刷
newPen.DeleteObject();
newBrush1.DeleteObject();
newBrush2.DeleteObject();
4、调用DC绘图函数绘图
GDI提供了绘制基本图形的成员函数,在MFC中这些函数封装在CDC类中。
注意:绘图函数使用的坐标都是逻辑坐标。
常用CDC绘图函数
函数
功能
线输出函数
GetCurrentPosition
获取笔的当前位置(以逻辑坐标表示)
MoveTo
移动当前位置
LineTo
从当前位置到一点画直线,但不包括那个点
Arc
画一段椭圆弧
ArcTo
画一段椭圆弧。除了更新当前位置以外,这个函数与Arc类似
PolyPolyline
画多组相连线段。这个函数不使用也不更新当前位置
PolylineTo
画一条或多条直线,并把当前位置移到最后一条直线的终点
PolyBezier
画一条或多条Bezier样条。不使用也不更新当前位置
PolyBezierTo
画一条或多条Bezier样条,并把当前位置移到最后一条Bezier样条的终点
椭圆和多边形函数
Chord
绘制椭圆弧(椭圆和一条线段相交围成的闭合图形)
DrawFocusRect
绘制用于表示焦点的风格的矩形
Ellipse
绘制椭圆
Pie
绘制饼形图
Polygon
绘制多边形,包含由线段连接的一个或多个点(顶点)
PolyPolygon
创建使用当前多边形填充模式的两个或多个多边形,多边形可以相互分开或叠加
Polyline
绘制多边形,包含连接指定点的一组线段
Rectangle
使用当前笔绘制矩形,用当前画刷填充
RoundRect
使用当前笔绘制圆角矩形,用当前画刷填充
位图函数
BitBlt
从指定设备上下文拷贝位图
StretchBlt
把位图由源矩形和设备移动到目标矩形,必要时拉伸或压缩位图以适合目标矩形的维数
GetPixel
获取指定点像素的RGB颜色值
SetPixel
设置指定点像素为最接近指定色的近似值
文本函数
TextOut
用当前选取字体在指定位置写字符串
ExtTextOut
用当前选取字体在矩形区域写字符串
TabbedTextOut
在指定位置写字符串,制表符扩展为制表符停止位置数组中指定值
DrawText
在指定矩形内绘制格式化文本
------------------------------详情参考MSDN、MFC类库详解---------------------------
摘自博客网址:http://blog.csdn.net/phunxm/article/details/5083119
- MFC中GDI绘图
- MFC GDI绘图基础
- MFC中的GDI绘图
- MFC GDI绘图基础
- MFC中的GDI绘图
- MFC GDI+ 绘图
- MFC GDI绘图基础
- MFC中的GDI绘图
- MFC中的GDI绘图
- MFC中的GDI绘图
- MFC GDI绘图
- MFC GDI绘图
- MFC中的GDI绘图
- MFC GDI绘图基础
- MFC GDI绘图基础
- C++/MFC-GDI绘图
- MFC中的GDI绘图
- MFC GDI绘图(1)
- 使用xtrabackup还原Failed to connect to MySQL server to detect version
- redis 对支持的数据类型的基本操作
- 使用编码添加约束的规则
- android中的Intent的作用小结
- 马士兵struts2视频教程第六十七集
- MFC中GDI绘图
- 从 MySQL+MMM 到 MariaDB+Galera Cluster : 一个高可用性系统改造
- 第十三周 项目5:去除str1中的空格,仍保存在str1中
- java GC 基本算法总结
- Android FM模块学习之三 FM手动调频
- 六大Web负载均衡原理与实现
- Linux系统中“动态库”和“静态库”那点事儿
- java笔记二:java 内部类(语法层)
- 并发模式Future ,JAVA内置模块Callable接口实现 实例