设备描述表概述

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 位图
– BOOL AlphaBlend( int xDest, int yDest, int nDestWidth, int nDestHeight, CDC* pSrcDC, int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, BLENDFUNCTION blend );
设置设备描述表属性的方式
选入选出方式:在处理事件期间选入,事件处理完毕后选出。 状态机方式:按需要随时设置。
设置设备描述表的属性
设备描述表属性的保持问题
通常情况下,在一个事件函数中设置的设备描述表属性通常不能保 存到下一个消息函数,所以对于每一个消息函数,都应该在使用设 备描述表之前都要重新进行设置。
• 画线的笔,绘图填图的刷子,位图,调色板,剪裁 区域,及路径(Path)。
设备描述表分类
名称 Display
Printer
Memory
特点
显示设备描述表,提供对视频显示设备上 的绘制操作的支持
打印设备描述表,提供对打印机、绘图仪 设备上的绘制操作的支持
内存设备描述表,提供对位图操作的支持
Information 信息设备描述表,提供对操作设备信息获 取的支持
hdc = GetWindowDC (hwnd) ;/ReleaseDC (hwnd, hdc) ;
4 取得设备上下文 句柄通用函数:
hdc = CreateDC (pszDriver, pszDevice, pszOutput, pData) ; /DeleteDC (hdc) ; 如取整个屏幕的设备上下文 句柄: hdc = CreateDC (TEXT (“DISPLAY”), NULL, NULL, NULL) ;
• pattern
– BOOL PatBlt( int x, int y, int nWidth, int nHeight, DWORDdwRop );
4.1.2 设备描述表的绘图函数
• 矩形
– void Draw3dRect( LPCRECT lpRect, COLORREF clrTopLeft, COLORREF clrBottomRight );
– BOOL StretchBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, DWORD dwRop );
– BOOL TransparentBlt( int xDest, int yDest, int nDestWidth, int nDestHeight, CDC* pSrcDC, int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, UINT clrTransparent );
– BOOL DrawEdge( LPRECT lpRect, UINT nEdge, UINT nFlags ); – void FillRect( LPCRECT lpRect, CBrush* pBrush ); – void FillSolidRect( LPCRECT lpRect, COLORREF clr ); – void FrameRect( LPCRECT lpRect, CBrush* pBrush ); – void InvertRect( LPCRECT lpRect ); – BOOL Rectangle( int x1, int y1, int x2, int y2 ); – BOOL Rectangle( LPCRECT lpRect ); – BOOL RoundRect( LPCRECT lpRect, POINT point ); – void DrawFocusRect( LPCRECT lpRect );
• 直线
– CPoint MoveTo( int x, int y ); – CPoint MoveTo( POINT point ); – BOOL LineTo(int x,int y); – BOOL LineTo( POINT point );
•弧
– BOOL AngleArc( int x, int y, int nRadius, float fStartAngle, float fSweepAngle ); – BOOL Arc( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4 ); – BOOL Arc( LPCRECT lpRect, POINT ptStart, POINT ptEnd ); – BOOL ArcTo( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4 ); – BOOL ArcTo( LPCRECT lpRect, POINT ptStart, POINT ptEnd ); – int SetArcDirection( int nArcDirection ); – int GetArcDirection( ) const;
第4章 设备描述表
4.1 设备描述表概述 4.2 映射模式 4.3 GDI对象 4.4 设备描述表属性
4.1 设备描述表
• 设备描述表(Device Context)
– 一种Windows数据结构,用来描述绘制窗口所需要的 信息。
– 它定义了坐标映射模式、一组GDI图形对象及其属性。 – GDI对象
SaveDC () ; RestoreDC (-1) ;
4.1.2 设备描述表的绘图函数
•点
– COLORREF GetPixel( int x, int y ) const; – COLORREF GetPixel( POINT point ) const; – COLORREF SetPixel( int x, int y, COLORREF crColor ); – COLORREF SetPixel( POINT point, COLORREF crColor ); – BOOL SetPixelV( int x, int y, COLORREF crColor ); – BOOL SetPixelV( POINT point, COLORREF crColor );
4.1.2 设备描述表的绘图函数
• BeZier曲线:
– BOOL PolyBezier( const POINT* lpPoints, int nCount ); – BOOL PolyBezierTo( const POINT* lpPoints, int nCount ); – BOOL PolyDraw( const POINT* lpPoints, const BYTE* lpTypes, int nCount ); – BOOL Polyline( LPPOINT lpPoints, int nCount ); – BOOL PolylineTo( const POINT* lpPoints, int nCount ); – BOOL PolyPolyline( const POINT* lpPoints, const DWORD* lpPolyPoints, int nCount );
设 备 描 述 表 属 性
属性
缺省值
Pen
画笔,BLACK_PEN
Brush
画刷,WHITE_BRUSH
Bitmap
ห้องสมุดไป่ตู้
位图
Font
字体,SYSTEM_FONT
Palette
调色板,DEFAULT_PALETTE
Clipping region
裁剪区域
Mapping mode
映射模式,MM_TEXT
Polygon-fill mode
– BOOL BitBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop );
– BOOL MaskBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, CBitmap& maskBitmap, int xMask, int yMask, DWORD dwRop );
CPaintDC dc(this); hdc = BeginPaint (hwnd, &ps) ; /EndPaint (hwnd, &ps) ;
2 非WM_PAINT消息时(CWnd类CView类其它函数)
hdc = GetDC (hwnd) ; /ReleaseDC (hwnd, hdc) ;
3 整个窗口
4.1.2 设备描述表的绘图函数
• 多边形
– BOOL Polygon( LPPOINT lpPoints, int nCount ); – BOOL PolyPolygon( LPPOINT lpPoints, LPINT lpPolyCounts, int nCount ); – BOOL Polyline( LPPOINT lpPoints, int nCount );
Brush origin
画刷原点
Intercharacter spacing 字符间隔,0
Text color
字体颜色,setting from Control Panel
Viewport extent
视口比例 ,(1,1)
Viewport origin
视口原点,(0,0)
Window extent
多边形填充模式,ALTERNATE
Background mode
背景模式
Drawing mode
绘制模式,R2_COPYPEN
Stretch mode
延伸模式,BLACKONWHITE
Background color
背景颜色
Device origin
设备原点
Current pen position 画笔原点
窗口比例,(1,1)
Window origin
窗口原点,(0,0)
4.1.1 设备描述表的使用步骤
设备描述表的使用步骤:
获取或者创建设备描述表; 必要的话,改变设备描述表的属性; 使用设备描述表完成绘制操作; 释放或删除设备描述表。
获取和释放设备描述表
1 WM_PAINT消息( CWnd类OnPaint函数)
名称特点display显示设备描述表提供对视频显示设备上的绘制操作的支持printer打印设备描述表提供对打印机绘图仪设备上的绘制操作的支持memory内存设备描述表提供对位图操作的支持information信息设备描述表提供对操作设备信息获取的支持属性缺省值pen画笔blackpenbrush画刷whitebrushbitmap位图font字体systemfontpalette调色板defaultpaletteclippingregion裁剪区域mappingmode映射模式mmtextpolygonfillmode多边形填充模式alternatebackgroundmode背景模式drawingmode绘制模式r2copypenstretchmode延伸模式blackonwhitebackgroundcolor背景颜色deviceorigin设备原点currentpenposition画笔原点brushorigin画刷原点intercharacterspacing字符间隔0textcolor字体颜色settingfromcontrolpanelviewportextent视口比例11viewportorigin视口原点00windowextent窗口比例11windoworigin窗口原点00411设备描述表的使用步骤
但windows提供了保持设备描述表属性的机制
设备描述表的保持机制
设备描述表的保持机制
自动保存:每次设置的属性均保存在windows设备描述表中。 创建窗口时(WM_CREATE消息),设置CS_OWNDC风格。
动态管理机制: 使用下列一组API函数管理设备描述表属性。
保存/恢复设备上下文。
idSaved = SaveDC (hdc) ; 改变一些属性 ;RestoreDC (hdc, idSaved) ;
– void Draw3dRect( int x, int y, int cx, int cy, COLORREF clrTopLeft, COLORREF clrBottomRight );
– void DrawDragRect( LPCRECT lpRect, SIZE size, LPCRECT lpRectLast, SIZE sizeLast, CBrush* pBrush = NULL, CBrush* pBrushLast = NULL );
5 取得内存设备上下文 :
hdcMem = CreateCompatibleDC (hdc) ; DeleteDC (hdcMem) ;
设置设备描述表的属性
设备描述表属性的表示
复杂GDI对象:如画笔、画刷、位图、调色板等。 简单MFC类对象:如裁剪区域,原点。 简单变量:字体颜色、背景颜色等。 一组符号常量:如各种模式,绘制模式,背景模式和填充模式等。
以堆栈方式使用SaveDC和RestoreDC
SaveDC (hdc) ; RestoreDC (hdc, -1) ;
或使用CDC类成员函数管理设备描述表属性。
保存/恢复设备上下文。
idSaved = SaveDC () ; 改变一些属性 ;RestoreDC ( idSaved) ;
以堆栈方式使用SaveDC和RestoreDC
相关文档
最新文档