官网: https://docs.microsoft.com/zh-cn/cpp/mfc/reference/cdc-class?view=vs-2019#alphablend
// 全局的
HDC hdc;
hdc = :: GetDC(m_hWnd);
MoveToEx(HDC , int x, int y, LPoint OldPoint );
LineTo(hdc, point.x, point.y)
::ReleaseDC(hdc);
// CDC 设备上下文,所有作图相关的操作
CWnd::GetDC()
CDC *pDC = GetDC();
pDC->MoveTo();
pDC->LineTo();
ReleaseDC(pDC);
CClientDC 是有CDC派生类, 自动释放。
CClientDC dc(this);
dc.MoveTo();
// 获取父窗口的指针
CWnd *GetParent()
CClientDC dc(GetParent());
// CWindowDC CDC的派生的
可以访问整个屏幕的。
CWindowDC dc(GetParent());
CWnd的函数,或者平台SDK,使用平台SDK,获取是一个句柄,使用CWnd的获取是一个指针。
CWindowDC dc(GetDesktopWindow());
// 其他颜色的 设备描述表中 CPen 三个构造函数。 colorref
第一参数是类型: PS_SOLID、PS_DOT. PS_DASH 、阴隐线
第二个参数是宽度:
第三个参数是颜色: COLORREF : RGB() 0 是有色
dc.SelectObject(CPen* pPen | CBrush *pBrush | CFont * pFont | CBitmap *pbit | CRgn *pRgn)
返回旧的
CBrush brush(RGB(255, 0, 0));
dc.FillRect(CRect(m_ptOrign, point), &brush);
CBitmap 不能直接构造一个有用的Bitmap 对象,必须要使用 initialized 函数。
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP1);
CBrush brush(bitmap);
dc.FillRect(CRect(两个点), brush);
// 透明画刷的句柄
GetStockObject 获取画刷的句柄
HGDIOBJ GetStockObject(int fnObject);
BLACK_BRUSH 黑色画刷
NULL_BRUSH 透明画刷
Use of NULL_PEN, NULL_BRUSH, and HOLLOW_BRUSH
CBrush::FromHandle() 从句柄转换为指针
CBrush *pBrush = CBrush::FromHandle( HBRUSH ( GetStockObject(NULL_BRUSH));
CBrush *pOldBrush = dc.SelectObject(pBrush);
dc.Rectangle(CRect());
// 绘画的模式
SetROP2(R);
插入符
// 创建出插入符
CReateSolidCaret (宽度,高度);
showCaret();
// 获取系统边界的宽度和高度
GetSystemMetrics
// 根据字体设置大小
GetTextMetrics(LPTEXTMETRICS * lptextmtrics);
// 获取 tmAveCharWidth 平均宽度值
CreateSolidCaret(tm.tmAveCharWidth/8, tm.tmHeight);
// 图形的插入符
CWnd::CreateCaret();
资源相关的对象,在析构的时候回是否资源。
// 图形重绘
OnDraw();
// TextOut(HDC hdc, int nXStart, int nYstart, LPCTSTR lpString, int cbString);
CString LoadString(ID)
//获取字符串的标尺长度。
CSize GetTextExten(const CString &)
CSize 宽度和高度
路径层的概念
BeginPath();
.......
pDC->Rectangle(10,10, 10 + sz.cx, 10 + sz.cy);
//在路径层中绘画,不影响原先的显示。
EndPaht();
SelectClipPath(RGN_DIFF) // 将剪贴区域和现场的模式进行指导操作
字符输入的功能:
SetCaretPos(point)
常用的CDC 方法
Arc 绘制椭圆弧。
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);
CDC::CreateDC 创建特定设备的设备上下文。
BOOL CreateDC(
LPCTSTR lpszDriverName,
LPCTSTR lpszDeviceName,
LPCTSTR lpszOutput,
const void* lpInitData);
CDC::DrawIcon 绘制图标。
BOOL DrawIcon(
int x,
int y,
HICON hIcon);
BOOL DrawIcon(
POINT point,
HICON hIcon);
CDC::DrawText 在指定的矩形中绘制格式化文本。
virtual int DrawText(
LPCTSTR lpszString,
int nCount,
LPRECT lpRect,
UINT nFormat);
int DrawText(
const CString& str,
LPRECT lpRect,
UINT nFormat);
CDC::Ellipse 绘制椭圆形。
BOOL Ellipse(
int x1,
int y1,
int x2,
int y2);
BOOL Ellipse(LPCRECT lpRect);
CDC:: FillRect 使用特定画笔填充给定矩形。
void FillRect(
LPCRECT lpRect,
CBrush* pBrush);
CDC:: FillSolidRect 用纯色填充矩形。
void FillSolidRect(
LPCRECT lpRect,
COLORREF clr);
void FillSolidRect(
int x,
int y,
int cx,
int cy,
COLORREF clr);
CDC:: FloodFill 使用当前画笔填充区域。
BOOL FloodFill(
int x,
int y,
COLORREF crColor);
CDC:: FrameRect 在矩形周围绘制边框。
void FrameRect(
LPCRECT lpRect,
CBrush* pBrush);
CDC:: Picture.getpixel 检索位于指定点处的像素的 RGB 颜色值。
COLORREF GetPixel(
int x,
int y) const;
COLORREF GetPixel(POINT point) const;
CDC:: GetROP2 检索当前的绘制模式。
HDC GetSafeHdc() const;
CDC:: Rectangle 使用当前笔绘制矩形。
BOOL Rectangle(
int x1,
int y1,
int x2,
int y2);
BOOL Rectangle(LPCRECT lpRect);
CDC:: InvertRect 反转矩形的内容。
void InvertRect(LPCRECT lpRect);
CDC:: InvertRgn 反转区域中的颜色。
BOOL InvertRgn(CRgn* pRgn);
CDC:: LineTo 绘制从当前位置到点(但不包括)点的直线。
CDC:: MoveTo 移动当前位置。
CDC:: SaveDC 保存设备上下文的当前状态。
CDC:: ScaleViewportExt 相对于当前值修改视区区。
virtual CSize ScaleViewportExt(
int xNum,
int xDenom,
int yNum,
int yDenom);
CDC:: ScaleWindowExt 修改相对于当前值的窗口区区。
virtual CSize ScaleWindowExt(
int xNum,
int xDenom,
int yNum,
int yDenom);
CDC:: SelectObject 选择 GDI 绘图对象,如笔。
CPen* SelectObject(CPen* pPen);
CBrush* SelectObject(CBrush* pBrush);
virtual CFont* SelectObject(CFont* pFont);
CBitmap* SelectObject(CBitmap* pBitmap);
int SelectObject(CRgn* pRgn);
CGdiObject* SelectObject(CGdiObject* pObject);
CDC:: SelectPalette 选择逻辑调色板。
CPalette* SelectPalette(
CPalette* pPalette, // 标识要选择的逻辑调色板。 此调色板必须已使用 CPalette 成员函数CreatePalette创建。
BOOL bForceBackground);
CDC:: SelectStockObject 选择由 Windows 提供的预定义的毛坯笔、画笔或字体之一。
virtual CGdiObject* SelectStockObject(int nIndex);
指定所需的 stock 对象的类型。 可以为下列值之一:
BLACK_BRUSH 黑色画笔。
DKGRAY_BRUSH 深灰色画笔。
GRAY_BRUSH 灰色画笔。
HOLLOW_BRUSH 空心画笔。
LTGRAY_BRUSH 浅灰色画笔。
NULL_BRUSH Null 画笔。
WHITE_BRUSH 白色画笔。
BLACK_PEN 黑色笔。
Null 笔 NULL_PEN。
WHITE_PEN 白一笔。
ANSI_FIXED_FONT ANSI 固定系统字体。
ANSI_VAR_FONT ANSI 可变系统字体。
与设备相关的 DEVICE_DEFAULT_FONT 字体。
OEM_FIXED_FONT OEM 相关的固定字体。
SYSTEM_FONT 系统字体。 默认情况下,Windows 使用系统字体来绘制菜单、对话框控件和其他文本。 不过,最好不要依靠 SYSTEM_FONT 获取对话框和窗口使用的字体。 相反,请将 SystemParametersInfo 函数与 SPI_GETNONCLIENTMETRICS 参数一起使用以检索当前字体。 SystemParametersInfo 将考虑当前主题,并为标题、菜单和消息对话框提供字体信息。
SYSTEM_FIXED_FONT Windows 版本3.0 之前使用的固定宽度系统字体。 此对象可与早期版本的 Windows 兼容。
DEFAULT_PALETTE 默认调色板。 此调色板包含系统调色板中的20个静态颜色。
CDC:: SetBkColor 设置当前背景色。
virtual COLORREF SetBkColor(COLORREF crColor);
CDC:: SetDCBrushColor 设置当前画笔颜色。
COLORREF SetDCBrushColor(COLORREF crColor);
CDC:: SetDCPenColor 设置当前笔颜色。
COLORREF SetDCPenColor(COLORREF crColor);
CDC:: SetROP2 设置当前的绘制模式。
int SetROP2(int nDrawMode);
指定新的绘制模式。 可以是以下任一值:
R2_BLACK 像素始终为黑色。
R2_WHITE 像素始终为白色。
R2_NOP 像素保持不变。
R2_NOT 像素是屏幕颜色的反转。
R2_COPYPEN 像素是笔颜色。
R2_NOTCOPYPEN 像素是笔颜色的反转。
R2_MERGEPENNOT 像素是笔颜色和屏幕颜色(最后一个像素 = (不是屏幕像素)或笔)的反转的组合。
R2_MASKPENNOT 像素是笔和屏幕反转(最终像素 = (不是屏幕像素)和笔)共有的颜色的组合。
R2_MERGENOTPEN 像素是屏幕颜色和画笔颜色(最终像素 = (不是笔)或屏幕像素)的组合。
R2_MASKNOTPEN 像素是屏幕和笔反转(最后一个像素 = (不是笔)和屏幕像素)共有的颜色的组合。
R2_MERGEPEN 像素是笔颜色和屏幕颜色(最终像素 = 笔或屏幕像素)的组合。
R2_NOTMERGEPEN 像素是 R2_MERGEPEN 颜色(最后一个像素 = 不是(笔或屏幕像素))的反转。
R2_MASKPEN 像素是笔和屏幕共有的颜色(最终像素 = 笔和屏幕像素)的组合。
R2_NOTMASKPEN 像素是 R2_MASKPEN 颜色(最后一个像素 = 非(笔和屏幕像素))的反转。
R2_XORPEN 像素是笔或屏幕中的颜色的组合,但不在两者(最后一个像素 = 笔 XOR 屏幕像素)中。
R2_NOTXORPEN 像素是 R2_XORPEN 颜色(最后一个像素 = 非(笔 XOR 屏幕像素))的反转。
CDC:: TextOut 使用当前选定的字体在指定位置写入字符串。
CFont https://docs.microsoft.com/zh-cn/cpp/mfc/reference/cfont-class?view=vs-2019
// The code fragment shows how to create a font object,
// select the font object into a DC (device context) for text
// drawing, and finally delete the font object.
// Initializes a CFont object with the specified characteristics.
CFont font;
VERIFY(font.CreateFont(
12, // nHeight
0, // nWidth
0, // nEscapement
0, // nOrientation
FW_NORMAL, // nWeight
FALSE, // bItalic
FALSE, // bUnderline
0, // cStrikeOut
ANSI_CHARSET, // nCharSet
OUT_DEFAULT_PRECIS, // nOutPrecision
CLIP_DEFAULT_PRECIS, // nClipPrecision
DEFAULT_QUALITY, // nQuality
DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily
_T("Arial"))); // lpszFacename
// Do something with the font just created...
CClientDC dc(this);
CFont *def_font = dc.SelectObject(&font);
dc.TextOut(5, 5, _T("Hello"), 5);
dc.SelectObject(def_font);
// Done with the font. Delete the font object.
font.DeleteObject();