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, *NPPAIN服务器托管网TSTRUCT, *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 |
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
假设你是一位服务器托管网很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。 对每个孩子 i,都有一个胃口值g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j]。如果 s[j]>= g[i],我…