MFC:CDC 类与成员

本文详细介绍了Windows图形设备接口(GDI)中的各种设备上下文类,如CDC、CPaintDC、CClientDC和CWindowDC,它们在绘图、窗口管理、文本处理等方面的作用,以及它们的成员函数和常用方法,如创建、映射、颜色管理和文本渲染等。
摘要由CSDN通过智能技术生成

CDC

定义

  • 设备上下文对象类;

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

作用

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

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

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

成员

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

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

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

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

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

CPaintDC

/// 在需要绘图的地方添加消息响应函数。
/// 声明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 对象的指针
GetCurrentBrushCBrush
GetCurrentFontCFont
GetCurrentPaletteCPalette
GetCurrentPenCPen
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

  • 19
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值