GDI编程学识(1)

GDI编程知识(1)
1. 字体包括字样(FontFamily) 、风格、尺寸三个主要属性;字体是指宋体、黑体等;风格指字体的粗细、是否倾斜等;FontStyleStrikeout是指删除线风格;
2. 可以使用GDI中的Font类,直接构造一个字体对象,如:Font font(&fontFamily, 12, FontStyleRegular, UnitPoint);为了与原来的GDI字体兼容,Font的构造函数还有另外一种形式:Font(HDC hdc, const LOGFONTW *logfont);hdc是一个窗口的设备环境句柄,logfont是指向LOGFONT(逻辑字体)数据结构的指针;
3. GDI中的文本输出只有一个函数:DrawString
DrawString(const WCHAR *string, INT length, const Font *font, const Rect &layoutRect, const StringFormat *stringFormat, const Brush *brush);
DrawString(const WCHAR *string, INT length, const Font *font, const PointF &origin, const Brush *brush);
DrawString(const WCHAR *string, INT length, const Font *font, const PointF &origin, const StringFormat *stringFormat, const Brush *brush);
brush用来指定一个画刷,这个画刷既可以是SolidBrush和HatchBrush,也可以是TextureBrush(纹理画刷),甚至是渐变画刷。
4. 文本的格式属性通常包括对齐方式、字符间隔以及文本调整等。GDI提供StringFormat类来控制这些格式属性。
5. MFC的CDC类将Windows设备描述表和获取设备描述表句柄的GDI函数封装在一起,而CDC派生类如CPaintDC和CClientDC则代表Windows应用程序使用的不同类型的设备描述表。
6. 在MFC应用程序中获取设备描述表的一种方法是调用CWnd::GetDC,它返回指向表示Windows设备描述表的 CDC对象的指针。在画图完毕时,要用CWnd::ReleaseDC释放由CDC,以保证合理地处理WM_PAINT消息。
7. CPaintDC,CClientDC,CWindowDC,CMetaFileDC的区别:
CPaintDC  --用于在窗口客户区画图(仅限于OnPaint处理程序);
CClientDC --用于在窗口客户区划图(除OnPaint外的任何处理程序);
CWindowDC --用于在窗口内任意地方画图,包括非客户区;
CMetaFileDC --用于向GDI元文件画图;
8. 设备描述表的属性:CDC::SetTextColor,CDC::SetBkColor,CDC::SetBkMode,CDC::SetMapMode,CDC::SetROP2,CDC::MoveTo(移动当前操作点),CDC::SelectObject(选择当前画笔,画刷或字体)。
9. 映射模式:调用 CDC::LPtoDP 函数可将逻辑坐标值转换为设备坐标值。反之,调用 CDC::DPtoLP 函数可将设备坐标值转换为逻辑坐标值。
10. MFC 的 CDC 类提供了两个可移动原点的函数。CDC::SetWindowOrg 移动窗口的原点, CDC::SetViewportOrg 移动视口的原点。正常情况下,只能使用其中之一。
11. 用户坐标和屏幕坐标的转换:调用 CWnd::ClientToScreen 和 CWnd::ScreenToClient 函数可实现用户坐标值与屏幕坐标值之间的转换。
12. 获取设备信息:CDC::GetDeviceCaps。
13. 常用的GDI绘图函数,CDC类中的一些图形函数:
MoveTo    --在画线前设定当前位置
LineTo    --从当前文职画一条线到指定位置(不包含指定位置点),并将当前位置移至线的终点。
Polyline   --将一系列点用线段连接起来
polylineTo  --从当前位置开始将一系列点用线段连接起来,并将当前位置移至折线的终点。
Arc      --回一个弧
ArcTo     --画一个弧并将当前位置移至弧的终点
PolyBezier  --画一条或多条贝塞尔样条曲线
PolyBezierTo --一条或多条贝塞尔样条曲线,并将当前位置移至最后—段样条曲线的终点
PolyDraw   --通过一组点画一系列线段和贝塞尔样条曲线.并将当前位置移至最后一个线段或样条曲线的终点
Chord     --画一个由椭圆和直线相交后围成的封闭图形
Ellipse    --画一个圆或椭圆
Pie      --画一个饼状的楔形物
Polygon    --连接一组点形成一个多边形
Rectangle   --画一个带直角的矩形
RoundRect   --画一个带圆角的矩形