MFC:CDC 类与成员
2024-01-07 17:17:52
CDC
定义
-
设备上下文对象类;
-
使用成员函数可以进行所有的绘图操作;
作用
-
获取和设置绘图属性、映射,处理视点、窗口扩展、转换坐标,处理区域、剪贴、绘制直线及绘制简单椭圆和多边形等形状;
-
安全型图形设备接口(GDI)对象收集,以及处理颜色和调色板;
-
绘制文本、处理字体,使用打印机跳转,滚动和播放元文件;
成员
-
处理显示器或打印机等设备上下文的成员函数;
-
处理与窗口客户区关联的显示上下文的成员函数;
-
两个设备上下文:m_hDC、m_hAttribDC,它们在 CDC 对象创建时参考同一设备;
-
m_hDC:CDC 对象使用的输出设备上下文;
-
m_hAttribDC:CDC 对象使用的输出属性上下文;
-
CPaintDC
-
仅为响应 Windows 消息 WM_PAINT 的成员函数提供设备环境,完成客户区绘图操作;
-
在构造时执行 CWnd::BeginPaint,在销毁时执行 CWnd::EndPaint;
/// 在需要绘图的地方添加消息响应函数。
/// 声明CPaintDC对象。
/// 调用BeginPaint函数获取设备上下文。
/// 进行绘图操作。
/// 调用EndPaint函数释放设备上下文。
?
void CMFCDrawingView::OnPaint()
{
? ?CPaintDC dc(this);
? ?// 绘制椭圆
? ?dc.Ellipse(100, 100, 200, 200);
? ?// 释放设备上下文
? ?dc.EndPaint();
}
PAINTSTRUCT
-
用于绘制应用程序拥有的窗口的工作区;
typedef struct tagPAINTSTRUCT {
?HDC ?hdc; // 于绘制的显示 DC 的句柄
?BOOL fErase; // 是否必须擦除背景
?RECT rcPaint; // 指定请求绘制的矩形的左上角和右下角
?BOOL fRestore;
?BOOL fIncUpdate;
?BYTE rgbReserved[32];
} PAINTSTRUCT, *PPAINTSTRUCT, *NPPAINTSTRUCT, *LPPAINTSTRUCT;
CClientDC
-
为非响应 Windows 消息 WM_PAINT 的成员函数提供设备环境,完成客户区临时绘图;
-
管理窗口用户区对应的显示上下文;
void CMFC绘图View::OnHuahua() // 在客户区的(100,100)位置输出字符串
{
// 创建对象,在视图对象里画
CClientDC dc(this);
dc.TextOutA(100,100, " aiyou");
//::TextOut(dc.m_hDC, 100, 100, " hello client", strlen(" aiyou"));
}
CWindowDC
-
管理与整个窗口(包括客户区和非客户区)对应的上下文,包括它的结构和控件;
-
不同于前文的两个类,它可用于绘制窗口的非客户区,如标题栏、边框等;
void CMFCDrawingView::OnNcPaint() // 响应WM_NCPAINT消息
{
? ?CWindowDC dc(this);
? ?// 在非客户区绘制一段文本
? ?dc.DrawText("Non-Client Area", &dc, CPoint(10, 10));
? ?// 释放设备上下文
? ?dc.ReleaseDC();
}
CMetaFileDC
-
与带元文件的设备上下文对应;
初始化
| 函数名 | 描述 |
|---|---|
| CreateDC | 为指定设备创建设备上下文 |
| CreateIC | 信息上下文,一种不创建设备上下文即获取有关设备信息的快速方式 |
| CreateCompatibleDC | 创建内存设备上下文,与另一个设备上下文匹配。可以用它在内存中准备图像 |
| DeleteDC | 删除CDC对象对应的Windows设备上下文 |
| FromHandle | 给定设备上下文句柄时,返回指向CDC对象的指针。如果CDC对象未附加到句柄,则创建并附加一个临时CDC对象 |
| DeleteTempMap | 由CWinApp空闲时间句柄调用,删除FromHandle创建的临时CDC对象。同时分离设备上下文 |
| Attach | 把 Windows 设备上下文附加到 CDC 对象 |
| Detach | 对象分离 |
| SetAttribDC | 设置属性设备上下文 m_hAttribDC |
| SetOutputDC | 输出设备上下文 m_hDC |
| ReleaseAttribDC | 释放 |
| ReleaseOutputDC | 释放 |
| GetCurrentBitmap | 返回指向当前选择的 CBitmap 对象的指针 |
| GetCurrentBrush | CBrush |
| GetCurrentFont | CFont |
| GetCurrentPalette | CPalette |
| GetCurrentPen | CPen |
| GetWindow | 返回显示设备上下文对应的窗口 |
设备上下文
| 函数名 | 描述 |
|---|---|
| GetSafeHdc | 返回输出设备上下文 m_hDC |
| SaveDC | 保存设备上下文当前状态 |
| RestoreDC | 恢复SaveDC保存的 |
| ResetDC | 更新 m_hAttribDC 设备上下文 |
| GetDeviceCaps | 获取有关给定显示设备功能的指定类型指定设备信息 |
| IsPrinting | 确定正在使用的设备上下文是否用于打印 |
颜色和调色板
| 函数名 | 描述 |
|---|---|
| SelectObject | 选择笔等GDI绘图对象 |
| SelectStockObject | 选择Windows提供的预定义的一个笔、画刷或字体 |
绘图
绘图工具
| 函数名 | 描述 |
|---|---|
| GetNearestColor | 获取与给定设备能显示的指定逻辑颜色最接近的逻辑色 |
| SelectPalette | 选择逻辑调色板 |
| RealizePalette | 把当前逻辑调色板中的调色板入口映射到系统调色板 |
| UpdateColors | 通过客户区当前颜色在像素基础上与系统调色板的匹配,更新设备上下文的客户区 |
| GetHalftoneBrush | 取半色调画刷 |
绘图属性
| GetBkColor | 获取当前背景色 |
|---|---|
| SetBkColor | |
| GetBkMode | 背景模式 |
| SetBkMode | |
| GetPolyFillMode | 当前多边形填充模式 |
| SetPolyFillMode | |
| GetROP2 | 当前绘图模式 |
| SetROP2 | |
| GetStretchBltMode | 当前位图拉伸模式 |
| SetStretchBltMode | |
| GetTextColor | 当前文本颜色 |
| SetTextColor | |
| GetColorAdjustment | 用于设备上下文的颜色调整值 |
| SetColorAdjustment |
绘制
| FillRect | 用指定画刷填充给定矩形 |
|---|---|
| FrameRect | 矩形周围绘制边界 |
| InvertRect | 反转矩形内容 |
| DrawIcon | 图标 |
| DrawDragRect | 拖拽矩形时擦除并重绘 |
| FillSolidRect | 用实颜色填充矩形 |
| Draw3Drect | 三维矩形 |
| DrawEdge | 矩形边 |
| DrawFrameControl | 帧控件 |
| DrawState | 显示图像并应用可视化效果来表示一个状态 |
坐标
映射
| GetMapMode | 当前映射模式 |
|---|---|
| SetMapMode | |
| GetViewportOrg | 获取视区起点的 X 和 Y 坐标 |
| SetViewportOrg | |
| OffsetViewportOrg | 相对于当前视区起点坐标修改视区起点 |
| GetViewportExt | 视区 X 和 Y 范围 |
| SetViewportExt | |
| ScaleViewportExt | 相对于当前值修改视区范围 |
| GetWindowOrg | 窗口起点的X和Y坐标 |
| SetWindowOrg | |
| OffsetWindowOrg | 相对于当前窗口起点的坐标修改窗口起点 |
| GetWindowExt | 对应窗口的X和Y坐标 |
| SetWindowExt | |
| ScaleWindowExt | 相对于当前值修改窗口范围 |
单位转换
| DPtoHIMETRIC | 设备单位转换为 HIMETRIC 单位 |
|---|---|
| LPtoHIMETRIC | 逻辑单位转换 |
| DPtoLP | |
| LPtoDP | |
| HIMETRICtoDPHIMETRIC | 单位转换为设备单位 |
| HIMETRICtoLPHIMETRIC | 转换为逻辑单位 |
区域
区域属性
| FillRgn | 用指定画刷填充指定区域 |
|---|---|
| FrameRgn | 用画刷在指定区域周围绘制边线 |
| InvertRgn | 反转区域中的颜色 |
| PaintRgn | 用选取的画刷填充区域 |
剪切
| SetBoundsRect | 控制指定设备上下文绑定的矩形信息的累计 |
|---|---|
| GetBoundsRect | |
| GetClipBox | 获取当前剪切边界周围最紧绑定矩形的维数 |
| SelectClipRgn | 使用指定模式合并给定区域和当前剪切区域 |
| ExcludeClipRect | 创建包含现有剪切区域减掉指定矩形的一个新剪切区域 |
| ExcludeUpdateRgn | 通过从剪切区域排除窗口中的更新区域,防止在窗口的无效区域中绘图 |
| IntersectClipRect | 通过构成当前区域和矩形的交集创建一个新的剪切区域 |
| OffsetClipRgn | 移动给定设备的剪切区域 |
| PtVisible | 确定给定点是否在剪切区域内 |
| RectVisible | 确定给定矩形的任何部分是否在剪切区域内 |
线
| GetCurrentPosition | 获取笔的当前位置(以逻辑坐标表示) |
|---|---|
| MoveTo | 移动当前位置 |
| LineTo | 从当前位置到一点画直线,但不包括那个点 |
| Arc | 画一段椭圆弧 |
| ArcTo | 除了更新当前位置以外 |
| AngleArc | 画一条线段和圆弧,把当前位置移到圆弧终点 |
| GetArcDirection | 返回当前圆弧方向 |
| SetArcDirection | 设备圆弧和矩形函数要用到的绘图方向 |
| PolyDraw | 画一组线段和Bezier样条。这个函数更新当前位置Polyline画一组与指定点连接的线段 |
| PolyPolyline | 画多组相连线段。这个函数不使用也不更新当前位置 |
| PolylineTo | 画一条或多条直线,并把当前位置移到最后一条直线的终点 |
| PolyBezier | 画一条或多条Bezier样条。不使用也不更新当前位置 |
| PolyBezierTo | 并把当前位置移到最后一条Bezier样条的终点 |
文本
| TextOut | 用当前选取字体在指定位置写字符串 |
|---|---|
| ExtTextOut | 矩形区域写字符串 |
| TabbedTextOut | 指定位置写字符串,制表符扩展为制表符停止位置数组中指定值 |
| DrawText | 定矩形内绘制格式化文本 |
| GetTextExtent | 使用当前字体在属性设备上下文上计算文本行的宽度和高度,确定维数 |
| GetOutputTextExtent | 在输出设备上下文上计算 |
| GetTabbedTextExtent | 在属性设备上下文上计算字符串的宽度和高度 |
| GetOutputTabbedTextExtent | 在输出设备上下文上计算字符串的宽度和高度 |
| GrayString | 给定位置绘制暗(灰色)文本 |
| GetTextAlign | 文本对齐标记 |
| SetTextAlign | |
| GetTextFace | 以空终止字符串形式把当前字体字样名拷贝到缓冲区 |
| GetTextMetrics | 从属性设备上下文为当前字体获取度量 |
| GetOutputTextMetrics | 输出设备上下文 |
| SetTextJustification | 把空格添加到字符串的中断字符 |
| GetTextCharacterExtra | 获取当前字符的额外间距(空格),以像素为单位 |
| SetTextCharacterExtra |
文章来源:https://blog.csdn.net/weixin_43718346/article/details/135372397
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!