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

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);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/346977.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Data JPA教程

在Java类或对象与关系数据库之间管理数据是一项非常繁琐且棘手的任务。 DAO层通常包含许多样板代码,应简化这些样板代码,以减少代码行数并使代码可重复使用。 在本教程中,我们将讨论Spring数据的JPA实现。 1.简介 1.1什么是JPA?…

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

21.1 Caption过渡色实现 // 方法一 void CCaptionDlg::DrawColorTitle(CRect rect, COLORREF col1, COLORREF col2,CDC* pDC) {int cx rect.Width();int red GetRValue(col2) - GetRValue(col1);int green GetGValue(col2) - GetGValue(col1);int blue GetBValue(col2) -…

在Spring MVC中处理域对象

最近,我惊讶于一个代码库在其所有域实体中都具有公共默认构造函数(即零参数构造函数),并且所有字段都具有getter和setter。 当我深入研究时,我发现域实体之所以如此,主要是因为该团队认为Web / MVC框架需要…

【有限域元素加法和乘法】有限域元素加法和乘法的原理及MATLAB实现

关注公号【逆向通信猿】更精彩!!! 有限域 仍然以 r = 4 r=4 r=4,

使用storm 实时计算_使用Storm进行可扩展的实时状态更新

使用storm 实时计算在本文中,我将说明如何借助Storm框架以可扩展且无锁定的方式在数据库中维护实时事件驱动流程的当前状态。 Storm是基于事件的数据处理引擎。 它的模型依赖于基本原语,例如事件转换,过滤,聚合……,我…

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

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

无服务器:不费吹灰之力!

几年前, 集装箱横扫开发人员,而开发人员的土地就像6级飓风一样 。 码头工人 Rkt 。 其他 。 Docker Swarm 。 K8s 。 OpenShift 。 现在,我们实际上处于震中,但是当我们瞥见地平线时,我们看到另一个人来了&#x…

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

CDC(HDC)绘图类: 五大GDI对象类:CPen,CBrush,CFont,CBitmap,CRgn 23.1 LoadImage API HANDLE LoadImage(HINSTANCE hinst,LPCTSTR lpszName, UINT uType, int cxDesired,int cyDesired,UINT fuLoad );uT…

JDK 8与JDK 10:三元/拆箱的区别

最近的Nicolai Parlog ( nipafx ) 鸣叫引起了我的注意,因为它引用了关于JDK 8和JDK 10之间行为更改的有趣StackOverflow讨论 ,并询问“为什么?” SerCe 在StackOverflow线程上引用的问题最终归结为在JDK 8和JDK 10之间…

【多元域乘法】多项式乘法电路原理及MATLAB详解

关注公号【逆向通信猿】更精彩!!! 关于二元域上的两个元素的乘法、多项式除法,在之前的博客 【有限域除法】二元多项式除法电路原理及MATLAB详解 子程序:sub_poly_div.m 【有限域元素加法和乘法】有限域元素加法和乘法的原理及MATLAB实现 子程序:sub_gf_add.m、sub_gf_…

my CSAPP Attack lab堆栈详解

关注公号【逆向通信猿】更精彩!!! 这个实验时学习了简书上的一篇文章后,自己根据课程例子进行的一次小测试,phase 4和5的堆栈图解还没有画,等后续有时间会进行补充。 本人转载的简书原文: https://blog.csdn.net/wlwdecs_dn/article/details/121249364#comments_19237…

Spring MVC教程

1.简介 作为企业Java开发人员,这项工作的主要重点之一是开发Web应用程序。 对于Web应用程序,后果还包括许多挑战。 具体来说,其中一些是状态管理,工作流和验证。 HTTP协议的无状态性质只会使事情变得更加复杂。 Spring的Web框架旨…

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

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

ubuntu22.04 下载路径

ftp下载路径 csdn下载 ubuntu22.04下载路径ubuntu-22.04-desktop-amd64.7z.001资源-CSDN文库 ubuntu22.04下载路径ubuntu-22.04-desktop-amd64.7z.002资源-CSDN文库 【免费】ubuntu-22.04-desktop-amd64.7z.003资源-CSDN文库 【免费】ubuntu-22.04-desktop-amd64.7z.004资源-…

camel seda 协议_探索Apache Camel Core – Seda组件

camel seda 协议Apache Camel中的seda组件与我在先前的博客中介绍的direct组件非常相似,但是以异步的方式。 为此,它使用java.util.concurrent.BlockingQueue作为默认实现来使消息排队并与主Route线程断开连接,然后在单独的线程中处理消息。 …

【MFC系列-第25、26天】绘图软件

25.1 绘图软件的绘制原理 纯虚函数:抽象函数,强制在派生类中进行实现; 虚函数:有函数体,可在基类也可在派生类中实现。 基类CLayer class CLayer {//抽象类 public:CLayer();~CLayer();virtual void OnDraw(CDC* pDC…

Java 10:“ var”关键字

Java 10使用关键字var引入了局部变量类型推断 。 这意味着无需编写&#xff1a; Map<Department, List<Employee>> map new HashMap<>(); // ... for (Entry<Department, List<Employee>> dept : map.entrySet()) {List<Employee> emplo…

【MFC系列-第32天】控件自绘技术

32.1 对话框背景设置 方法一 BOOL CClDlg::OnEraseBkgnd(CDC* pDC) {CRect rect;GetClientRect(rect);pDC->FillSolidRect(rect, RGB(200, 255, 255));return TRUE; }方法二&#xff1a;WM_CTRLCOLOR消息 按类型按句柄按控件ID HBRUSH CMFCApplication1Dlg::OnCtlColor(…

Spring Reactor教程

在RESTful服务的世界中&#xff0c;实际上实际上是在幕后进行许多工作&#xff0c;我们通常必须在应用程序中进行很多处理&#xff0c;而实际上并不会影响需要发送给真实用户的响应。 可以被动地做出这些业务决策&#xff0c;以便它们对与应用程序交互的用户没有任何影响。 Spr…

MFC多线程处理界面假死之红外图像数据获取和excel写入

在MFC主界面某个Button Click事件中起一个线程去做处理一些事情,在起的线程运行完毕后,接着跑Click起线程后的代码,已达到按顺序执行,保证时许正确的目的。 问题 通常处理一个线程等待用 WaitForSingleObject,这个放在主界面线程成中会造成主界面“卡死”,其原因是它将…