MFC绘图

来源:互联网 发布:淘宝优惠券赚佣金算的 编辑:程序博客网 时间:2024/06/07 09:58

RGB() 32位,最高的8位没有用,使用宏GetRValue(),GetGValue(),GetBValue()可以从一个COLORREF类型的变量中分离三元色。

设置文本颜色,返回之前的文本颜色
COLORREF SetTextColor(COLORREF crColor);

设置背景颜色,返回之前的背景颜色
COLORREF SetBkColor(COLORREF crColor);

文本背景模式的默认设置是OPAQUE,它要求GDI用户要使用背景颜色,可替换设置为TRANSPARENT
int CDC::SetBkMode ( int nBkMode );
int CDC::GetBkMode ( ) const;

设置文本对齐标志
UINT SetTextAlign ( UINT nFlags );
X轴对齐 Y轴对齐 更新当前位置
TA_LEFT TA_TOP TA_NOUPSATECP
TA_CENTER TA_BASELINE TA_UPDATECP
TA_RIGHT TA_BOTTOM
如果准备将不同字体,不同字号的文本混合在一行,使用y轴默认设置TA_TOP将产生奇怪的现象,这时应该更改y轴默认设置为 TA_BOTTOM。
SetTextJusttification()和SetTextCharaterExtra()函数用于设置文本属性:文本调整和文本额外间隔。这两种属性能够帮
助填补文本行。填补文本行是为了生成WYSIWYG(所见即所得)输出。在大多数情况下,它意味着显示屏幕输出变形,
以模仿打印输出的效果。 SetTextJusttification()函数能够指定添加到各个间隔字符的像素数,如果需要更多地填充,则
应调用SetTextCharaterExtra()函数,将额外的像素添加到各个字符(而不是间隔字符)。

获取指定文本在屏幕上显示的宽度和高度,lpszString是字符串的指针,nCount是所包括的字符数
CSize GetTextExtent(LPCTSTR lpszString, int nCount);

获取字体具体大小
TEXTMETRIC tm;
pDC->GetTextMetrics(&tm);

TextOut 在屏幕的固定位置用当前设定的颜色、字体、对齐方式输出文本
TabbedTextOut 与TextOut的功能相似,唯一差别是可以为支持制表符而定义一组制表站位置
DrawText 在一个区域中显示并格式化文本
ExtTextOut 与TextOut的功能相似,但可以使用该函数删去超出矩形的正文,用正文背景填充矩形,调整字符间隔

SetPixel(CPoint(200,200),RGB(255,0,0));

CRect rect(0,0,100,100); //在矩形内画圆
pDC->Ellipse(&rect);
CRect rect(0,0,50,100); //在矩形内画椭圆
pDC->Ellipse(&rect);

多边形
CPoint poly[4]; //画一个平行四边形
poly[0]=CPoint(0,0);
poly[1]=CPoint(50,50);
poly[2]=CPoint(50,100);
poly[3]=CPoint(0,50);
pDC->Polygon(poly,4);

CDC::Pie // 画饼图
CDC::Chord //画弦
CDC::FillRect //用指定颜色填充矩形且不画边线
CDC::Draw3DRect //用于绘制名种3D边框
CDC::RoundRect //画圆角矩形

Fonts
ANSI_FIXED_FONT
ANSI_VAR_FONT
DEVICE_DEFAULT_FONT
OEM_FIXED_FONT
SYSTEM_FONT

Pens
BLACK_PEN
WHITE_PEN
NULL_PEN

Brushs
BLACK_BRUSH
DKGRAY_BRUSH
GRAY_BRUSH
HOLLOW_BRUSH
LTGRAY_BRUSH
NULL_BRUSH
WHITE_BRUSH

CClientDC dc;
设置映射模式
int OldMode=dc.SetMapMode(MM_LOMETRIC);

移动逻辑坐标原点到客户区中央
CRect rect;
GetClientRect(rect);
pDC->SetViewportOrg(rect.width()/2,rect.height()/2);

一般来说,MFC的CDC绘图函数都使用逻辑坐标为参数;CWnd的成员函数一般使用设备坐标为参数,如返回鼠标位置
作为屏幕位置测试时,一般也是使用设备坐标
设备坐标系统分为三类:
(1) 工作区(Viewport)坐标系统
它以窗口客户区左上角为原点(0,0),主要用于窗口客户区绘图输出以及处理窗口的一些消息。鼠标消息传给框架的位置
消息参数以及CDC一些用于绘图的成员都是使用工作区坐标。
(2) 窗口(Windows)坐标系统
它以窗口左上角为坐标原点(0,0),它包含窗口控制菜单、标题栏等内容。一般情况下很少在窗口标题栏上绘图,因此这
种坐标系统很少使用。
(3) 屏幕(Screen)坐标系统
它以屏幕左上角为原点(0,0)。当以CreateDC()或GetDC()取得设备上下文使用的是屏幕坐标系。一般设置和取得光标的
位置的函数SetCursorPos()和GetCursorPos()是使用屏幕坐标;弹出式菜单使用屏幕坐标;CreateWindow()、
MoveWindow()等函数用于设置窗口相对于屏幕的位置,使用的也是屏幕坐标系统。

MFC使用ClientToScreen()和ScreenToClient()两个函数,用于完成工作区坐标和屏幕坐标之间的转换工作。逻辑坐标和
设备坐标的转换是经常发生的事情,例如,用户在视图滚动后单击鼠标,会得到鼠标的设备坐标。如果要保存这个数据
到文档,则需要把它转化为逻辑坐标。相反,当调用MFC绘图函数绘图时,Windows自动将逻辑坐标转换成设备坐标再
绘图。CDC也提供了成员函数LPToDP()和DPToLP()完成两种坐标之间的转换。5.3.5节中例5-3演示了不同映像模式的使用。

自定义画笔
PS_DASH 虚线 PS_INSIDEFTAME 实线(边框线)
PS_DASHDOT 点划线 PS_NULL 无
PS_DASHDOTDOT 双点划线 PS_SOLID 实线
PS_DOT 点线

CPen Mypen(PS_SOLD,2,RGB(255.0.0));

CPen pen;
pen.CreatePen(PS_SOLD,2,RGB(255,0,0));

自定义画刷
CBrush bs;
bs. CreateSolidBrush(RGB(255,0,0));//创建一个红色的实心画刷
BLACK_BRUSH 黑色画刷 LTGRAY_BRUSH 亮灰色画刷
DKGRAY_BRUSH 深灰色画刷 NULL_BRUSH 空画刷
GRAY_BRUSH 灰色画刷 WHITE_BRUSH 白画刷
HOLLOW_BRUSH 空心画刷

创建带阴影的画刷CreateHatchBrush()函数
bs. CreateHatchBrush(HS_CROSS,RGB(255,0,0));//创建一个十字线阴影的红色画刷
样式 说明 样式 说明
HS_BDIAGONAL 45度\ HS_CROSS +
HS_DIAGCROSS 45度叉线 HS_HORIZONTAL _
HS_FDIAGONAL 45度/ HS_VERTICAL |

创建位图画刷CreatePatternBrush()函数
CBitMap bmp;
bmp. LoadBitMap(IDB_MYBITMAP);
CBrush bs;
bs. CreatePatternBrush(&bmp);

原创粉丝点击