MFC:CDC 类与成员

CDC

定义

  • 设备上下文对象类;

  • 使用成员函数可以进行所有的绘图操作;

作用

  • 获取和设置绘图属性、映射,处理视点、窗口扩展、转换坐标,处理区域、剪贴绘制直线及绘制简单椭圆和多边形等形状;

  • 安全型图形设备接口(GDI)对象收集,以及处理颜色和调色板

  • 绘制文本、处理字体,使用打印机跳转滚动和播放元文件

成员

  • 处理显示器或打印机设备上下文的成员函数;

  • 处理与窗口客户区关联的显示上下文的成员函数;

  • 两个设备上下文:m_hDC、m_hAttribDC,它们在 CDC 对象创建时参考同一设备;

    • m_hDC:CDC 对象使用的输出设备上下文;

    • m_hAttribDC:CDC 对象使用的输出属性上下文;

CPaintDC

  • CPaintDC 类 | Microsoft Learn

  • 仅为响应 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

  • CClientDC 类 | Microsoft Learn

  • 非响应 Windows 消息 WM_PAINT 的成员函数提供设备环境,完成客户区临时绘图

  • 管理窗口用户区对应的显示上下文;

  • 处理 Windows 函数 GetDC(在构造时)和 ReleaseDC(在析构时)的调用

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

你可能感兴趣的:(MFC,mfc,c++)