vc++ DC 基础

官网: 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();






 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值