20.1 三大坐标系:屏幕、客户区和非客户区

20.2 三大派生类:

a)CPaintDC(客户区标准绘图),内部封装函数是:BeginPaintEndPaint

b)CClientDC(客户区非标准绘图),内部是:::GetDCReleaseDC

(CWnd::GetDC的功能有写重复)和ReleaseDC

CDC* pDC = this->GetDC(); // CWnd::GetDC(非静态)
pDC->Ellipse(CRect(point.x-10,point.y-5,point.x+10,point.y+5));
this->ReleaseDC(pDC);//忘记了之后容易造成GDI泄漏,在任务管理器中可以观察泄漏情况
CDialogEx::OnLButtonDown(nFlags,point);

c)CWindowDC(非客户区绘图),内部是:GetWindowDCReleaseDC

d)CMemoryDC(内存DC),自己封装

GetDC创建了一个新的GDI对象:忘记了ReleaseDC之后容易造成GDI泄漏??

20.3 基本图形函数:

直线:MoveTo、LineTo,LineTo...
折线:PolyLine
多边形(包括三角形):Polygon
矩形:Rectangle
圆形:Ellipse
圆角矩形:RoundRect
圆弧:Arc、(ArcTo也要与MoveTo连用)
饼形:Pie

GDI对象包括:HDC、HICON、HCURCOR、HPEN、HBRUSH、HFONT、HBITMAP、HRGN、HPALLETE

20.4 GDI对象之一——CPen类对象

两对相反的函数是:CreatePenIndirectGetLogPenFromHandleoperator HPEN
CPen::CPen: Constructs a CPen object.
CPen::CreatePen: Creates a logical cosmetic or geometric pen with the specified style, width,
and brush attributes, and attaches it to the CPen object.
CPen::CreatePenIndirect: Creates a pen with the style, width, and color given in a LOGPEN structure, and attaches it to the CPen object.
CPen::FromHandle: Returns a pointer to a CPen object when given a Windows HPEN.
CPen::GetLogPen: Gets a LOGPEN underlying structure.
CPen::operator HPEN

构造

方法一

LOGPEN lp = { PS_DASHDOTDOT ,1,0,RGB(255,0,0)};if (!(HPEN)m_pen)//如果不是因为二义性编译本不会出错{m_pen.CreatePenIndirect(&lp);}

方法二

m_pen.CreatePen(PS_DASHDOTDOT, 1, RGB(255, 0, 255));

方法三

CPen pen(PS_SOLID, 3, RGB(255, 0, 0));

20.5 GDI对象之二——CBrush类对象

两对反函数

operator HBRUSH与FromHandle
CreateBrushIndirect与GetLogBrush

CBrush::CBrush: Constructs a CBrush object.

CBrush::CreateBrushIndirect
Initializes a brush with the style, color, and pattern specified in a LOGBRUSH structure.

CBrush::CreateDIBPatternBrush
Initializes a brush with a pattern specified by a device-independent bitmap (DIB).

CBrush::CreateHatchBrush:栅格

CBrush::CreatePatternBrush:位图

CBrush::CreateSolidBrush:纯色

CBrush::CreateSysColorBrush 系统颜色

CBrush::GetLogBrush Gets a LOGBRUSH structure.

CBrush::operator HBRUSH

20.6 GDI对象之三——CFont类对象

两对反函数:

CreateFontIndirect和GetLogFont
CFont::operator HFONT和CFont::FromHandle

CFont::CFont Constructs a CFont object.
CFont::CreateFont: Initializes a CFont with the specified characteristics.

CFont::CreateFontIndirect:最常用标准创建字体

CFont::CreatePointFont简易创建字体

CFont::GetLogFont获取字体描述

CFont::operator HFONT

LOGFONT
lfFaceName 字体名称
lfHeight:子体大小
lfCharSet:GB2312_CHARSET
lfWeight :粗度(400是Normal,700是粗体)
lfWidth 一般是字体大小的一半
lfItalic 斜体;
lfUnderline 下划线;
lfStrikeOut 删除线;
lfEscapement:360的10倍,比如2700代表270度。

方法一

 LOGFONT lf = {24};//   lf.lfCharSet = GB2312_CHARSET;//   lf.lfWidth = 14;
_tcscpy_s(lf.lfFaceName,_countof(lf.lfFaceName), _T("华文彩云"));
m_font.CreateFontIndirect(&lf);

方法二

if (!m_font.m_hObject)m_font.CreatePointFont(120, _T("宋体"));

输出

CFont* pOldFont = dc.SelectObject(&m_font);dc.SetBkColor(RGB(0, 255, 0));dc.SetBkMode(TRANSPARENT);dc.SetTextColor(RGB(255,0,0));dc.TextOut(100, 100, _T("测试CFont类字体创建函数!"));pOldFont->GetLogFont(&lf);

【MFC系列-第20天】CDC绘图类成员介绍相关推荐

  1. 【MFC系列-第11天】CWinApp类成员分析

    11.1 资源管理器开发(C语言) 三种位运算 //#include <AtlBase.h> //混合 c_file.attrib |= _A_HIDDEN|_A_RDONLY; //判断 ...

  2. 【MFC系列-第19天】初步认识GDI绘图技术

    WM_PAINT消息测试 调试输出字符串 OutputDebugSting(_T("WM_PAINT-OnPaint\n")); 1.WM_PAINT:功能和发生时间 2.Begi ...

  3. MFC中的CDC 绘图

    MFC中的CDC 绘图 绘图一般在视图类的(屏幕/打印机)绘图消息响应函数OnDraw中进行,例如: void CTestView::OnDraw(CDC* /*pDC*/) {          C ...

  4. 【MFC系列-第24天】梯形分页和蝴蝶QQ宠物的实现

    CDC(HDC)绘图类: 五大GDI对象类:CPen,CBrush,CFont,CBitmap,CRgn 24.1 梯形分页的双缓冲改进和尺寸自适应 24.2 蝴蝶跟随鼠标点击运动 class CHi ...

  5. 【MFC系列-第22天】GDI算法实战——过渡色

    关注公号[逆向通信猿]更精彩!!! 第22天 GDI算法实战 CDC(HDC)绘图类: 五大GDI对象类:CPen,CBrush,CFont,CBitmap,CRgn 22.1 走马灯 设置定时器 S ...

  6. TeeChart替代品,MFC下好用的高速绘图控件-(Hight-Speed Charting)

    相关链接: C++ GUI 绘图控件目录 MFC VS2010 使用TeeChart绘图控件 - 之一 - 控件和类的导入 VS2010 使用TeeChart绘图控件 - 之二 - 绘制图形(折线图, ...

  7. 【MFC系列-第23天】CMemoryDC的封装过程

    CDC(HDC)绘图类: 五大GDI对象类:CPen,CBrush,CFont,CBitmap,CRgn 23.1 LoadImage API HANDLE LoadImage(HINSTANCE h ...

  8. 1.CDC绘图。包括加载图片,消去图片,设置图片一部分透明,不闪烁方式。

    CDC类简介:(摘抄自鸡啄米博客) CDC类是一个设备上下文类. CDC类提供了用来处理显示器或打印机等设备上下文的成员函数,还有处理与窗口客户区关联的显示上下文的成员函数.使用CDC的成员函数可以进 ...

  9. Seaborn系列(三):分布统计绘图(distribution)

    Seaborn系列目录 文章目录 1. 分布统计绘图API概述 2. displot单变量分布图(直方图.核密度.累积分布) 2.1 displot函数绘制单变量分布图 2.2 displot直方图k ...

最新文章

  1. winform 界面设计
  2. python使用esmre代替ahocorasick实现ac自动机[多模匹配]
  3. python读取指定字节长度的文本
  4. js 获取 屏幕 可用高度...
  5. HDU-5249 KPI(STL or 权值线段树)
  6. java动态代理--代理接口无实现类
  7. DNN:DL讨论与DNN经典论文汇总
  8. c mysql 双主复制_mysql双主复制及使用keepalived作高可用的配置详解
  9. 99%的人都会遇到的Python “用户环境”问题
  10. 深入解析oracle电子版,深入解析Oracle数据库
  11. httping的使用介绍
  12. 利用Python的PyPDF2库,根据论文标题批量修改pdf的文件名
  13. 蒙特卡洛(Monte Carlo)
  14. 团队项目:即时聊天软件 需求分析、用例、UI原型
  15. Android 模拟器(window/Mac)
  16. Unity分屏显示效果
  17. 宝石熔炼设备可以融化黄金吗?
  18. Hard-Margin SVM(支持向量机)
  19. IT运维和自动化运维以及运维开发有啥不同?能解释下吗?
  20. DOM实现元素拖拽,滚轮事件和特效动画缓冲运动处理

热门文章

  1. JMX和Spring –第3部分
  2. ZK的实际应用:MVVM –加载和渲染数据
  3. 带有Jersey和Spring的RESTful Web应用程序
  4. LeWeb – 2011 –综述
  5. 为什么线程池里的方法会执行两次_面试官问你java都有哪些线程池,自己是否自定义过线程池...
  6. docker 删除所有镜像_关于 Docker 镜像的操作,看完这篇就够啦 !(下)| 文末福利...
  7. 计算机二级access模考软件_计算机二级考前通关大礼包来啦!各科目模考软件、视频教程,更有往年真题、最新考纲等打包送!...
  8. java int integer内存_java中一个integer对象的内存占用是多少?可以通过java方法输出吗?...
  9. ios html正则表达式,ios 正则表达式去html标签
  10. python中如何调用或修改元组中的元素_python 元组的使用方法