MFC第二十三天 HBrush对闭合图形的填充、CPen、CFont类常用功能与LOGFONT和LOGPEN结构体

这篇具有很好参考价值的文章主要介绍了MFC第二十三天 HBrush对闭合图形的填充、CPen、CFont类常用功能与LOGFONT和LOGPEN结构体。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

HBrush对闭合图形的填充

HBRUSH创建:
a)实色填充:

HBRUSH CreateSolidBrush( COLORREF color);

b)栅格线填充:

HBRUSH CreateHatchBrush( int iHatch, COLORREF color);

c)平铺图填充:

HBRUSH CreatePatternBrush( HBITMAP hbm);
HBITMAP hBitmap = LoadBitmap(g_hInst, MAKEINTRESOURCE(IDB_LOGO));

d)空填充:可以创建前三种任何一种,也可以创建第四种(空中)

HBRUSH CreateBrushIndirect(  [in] const LOGBRUSH *plbrush);

对应的CBrush

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 //Initializes a brush with the specified hatched pattern and color.
CBrush::CreatePatternBrush	//Initializes a brush with a pattern specified by a bitmap 图片
CBrush::CreateSolidBrush	// Initializes a brush with the specified solid color. 实色
CBrush::CreateSysColorBrush		// Creates a brush that is the default system color.
 
CBrush::FromHandle
 Returns a pointer to a CBrush object when given a handle to a Windows HBRUSH object.
 
CBrush::GetLogBrush		// Gets a LOGBRUSH structure.
 /* Hatch Styles */  填充风格
#define HS_HORIZONTAL       0       /* ----- */
#define HS_VERTICAL         1       /* ||||| */
#define HS_FDIAGONAL        2       /* \\\\\ */
#define HS_BDIAGONAL        3       /* / */
#define HS_CROSS            4       /* +++++ */
#define HS_DIAGCROSS        5       /* xxxxx */
#define HS_API_MAX          12
typedef struct tagLOGBRUSH {
  UINT      lbStyle;
  COLORREF  lbColor;
  ULONG_PTR lbHatch;
} LOGBRUSH, *PLOGBRUSH, *NPLOGBRUSH, *LPLOGBRUSH;
	CBrush br1;
	br1.CreateSolidBrush(0xffff00); //纯色填充
	dc.SelectObject(&br1);
	dc.SelectObject(&pOldPen); //默认pen 接近0的黑色
	dc.Pie(296, 80, 800, 400, 600, 134, 600, 400);

	LOGBRUSH lb{ BS_NULL };
	CBrush br3;
	br3.CreateBrushIndirect(&lb);
	dc.SelectObject(&br3);
	POINT pts[] = { {40,200},{130,30},{300,250},{150,300} };
	dc.Polygon(pts, _countof(pts));

HBITMAP位图资源的加载和平铺填充

	CBitmap bitmap;
	bitmap.LoadBitmap(IDB_LOGO);
	CBrush br;
	br.CreatePatternBrush(&bitmap);   
	dc.SelectObject(&br);
	dc.Rectangle(rect.left, rect.top, rect.right, rect.bottom);

CFont类常用功能与LOGFONT结构体

CFont类的主要函数:
a)CFont::CreateFont:参数太多没法用
b)使用结构体创建比较方便:

BOOL CreateFontIndirect( const LOGFONT* lpLogFont );

c)GetLogFont:获取字体信息,是以上函数的反函数。
d)简易创建函数:他的大小是以上函数的十分之一,所以调用时要乘以10。文章来源地址https://www.toymoban.com/news/detail-620275.html

CreateFont和CreateFontIndirect中间加Point。

Requested font height in tenths of a point. 
	(For instance, pass 120 to request a 12-point font.)
typedef struct tagLOGFONT { 
  LONG lfHeight;   LONG lfWidth; 
  LONG lfEscapement;  //书写角度
  LONG lfOrientation; 	//基线角度
  LONG lfWeight; 
  BYTE lfItalic; 
  BYTE lfUnderline; 
  BYTE lfStrikeOut;  //删除线
  BYTE lfCharSet;  //字符集表示 
  BYTE lfOutPrecision; //输出精度
  BYTE lfClipPrecision; //剪辑精度
  BYTE lfQuality; //字体质量
  BYTE lfPitchAndFamily; //字体的字符间距和族标识
  TCHAR lfFaceName[LF_FACESIZE]; //字体名称
} LOGFONT;
	CFont font;
	//font.CreatePointFont(100 * 3 / 2, _T("黑体"));  //简易函数
	LOGFONT lf{ 15 * 3 / 2 };
	lf.lfItalic = TRUE;
	lf.lfWeight = 700;
	lf.lfCharSet = GB2312_CHARSET;
	lf.lfEscapement = 200;
	_tcscpy_s(lf.lfFaceName, LF_FACESIZE, _T("黑体"));
	font.CreateFontIndirect(&lf);
	
	auto pOldFont = dc.SelectObject(&font);
	//dc.SetBkMode(TRANSPARENT); //设置文字的透明色 //真透明 	//dc.SetTextColor(0xff);
	dc.SetBkColor(0xffff00); //假透明
	dc.DrawText(_T("这世间本没有佛"), rect, DT_CENTER|DT_VCENTER|DT_SINGLELINE);
	pOldFont->GetLogFont(&lf);

CPen类简介

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::GetExtLogPen	//Gets an EXTLOGPEN underlying structure.
CPen::GetLogPen		//Gets a LOGPEN underlying structure. 
CPen::operator HPEN		//Returns the Windows handle attached to the CPen object.
/* Pen Styles */
#define PS_SOLID            0						实线
#define PS_DASH             1       /* -------  */  破折线	
#define PS_DOT              2       /* .......  */ 
#define PS_DASHDOT          3       /* _._._._  */ 点划线
#define PS_DASHDOTDOT       4       /* _.._.._  */双点划线
#define PS_NULL             5					  无线条
typedef struct tagLOGPEN {
  UINT  lopnStyle;   // 线条样式
  POINT lopnWidth;   // 线条宽度
  COLORREF lopnColor;   // 线条颜色
} LOGPEN, *PLOGPEN
	CRect rect;
	GetClientRect(&rect);
	CPen pen;  //用来绘制边框的
	pen.CreatePen(PS_SOLID, 5, RGB(0, 255, 255));
	auto pOldPen = dc.SelectObject(&pen); //返回之前选入的画笔的句柄
	//绘图操作结束后,会使用SelectObject函数将之前的画笔 重新选入 DC,以保证 DC 的状态不受影响
	LOGPEN logPen;
	GetObject(pOldPen->GetSafeHandle(), sizeof(logPen), &logPen);
	
	CPen p2;
	p2.CreatePen(PS_DOT, 1, 0xff00);
	dc.SelectObject(&p2); 
	dc.MoveTo(594, 31);
	dc.LineTo((196 + 710) / 2, (72 + 301) / 2);
	dc.LineTo(517, 414);

到了这里,关于MFC第二十三天 HBrush对闭合图形的填充、CPen、CFont类常用功能与LOGFONT和LOGPEN结构体的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [C国演义] 第二十三章

    力扣链接 求 删除字符的ASCLL和的最小值 ⇒ 正难则反 ⇒ 求公共子序列的ASCLL和的最大值 两个数组的dp问题 ⇒ 分区间讨论 ⇒ dp[i][j] -- nums1数组的[0, i] 区间 和 nums2数组的[0, j] 区间, 公共子序列的ASCLL和的最大值 转态转移方程 — 根据最后一个位置进行讨论 遍历顺序 初始化 需

    2024年02月04日
    浏览(35)
  • 第二十三回:Flutter中的事件处理

    我们在上一章回中介绍了对齐和边距类Widget相关的内容,,本章回中将介绍 事件处理相关的知识 .闲话休提,让我们一起Talk Flutter吧。 我们在这里说的事件表示点击和滑动屏幕时触发的事件,类似Android中的TouchEvent.Flutter提供了 PointerEvent 类及其子类来封装不同类型的事件。同

    2024年02月02日
    浏览(36)
  • 二十三种设计模式第二十篇--备忘录模式

    备忘录模式,备忘录模式属于行为型模式。它允许在不破坏封装的情况下捕获和恢复对象的内部状态。 保存一个对象的某个状态,以便在适当的时候恢复对象,该模式通过创建一个备忘录对象来保存原始对象的状态,并将其存储在一个负责管理备忘录的负责人对象中。 备忘

    2024年02月14日
    浏览(42)
  • 【LeetCode 75】第二十三题(2352)相等行列对

    目录 题目: 示例: 分析: 代码+运行结果: 题目很简洁,就是要我们寻找行与列相同的对数。相同行与列不仅是要元素相同,还需要顺序也一样(难度变小了,如果不要求顺序一样的话,还需要单独统计元素以及出现次数,会稍微麻烦一点) 一般要寻找相同的数的时候,我

    2024年02月13日
    浏览(39)
  • Nodejs 第二十三章(Markdown 转 html)

    Markdown 转换html 是一个非常常见的需求 什么是 Markdown ? Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档。 我们需要用到三个库实现 EJS :一款强大的JavaScript模板引擎,它可以帮助我们在HTML中嵌入动态内容。使用EJS,您可以轻松地将Markdown转换为

    2024年02月04日
    浏览(38)
  • MFC第二十九天 CView类的分支(以及其派生类的功能)、MFC六大关键技术

    对CMainView使用了CEditView类的派生,对其默认字体进行改变。 需要添加#include afxhtml.h头文件 MainFrm.h CMainFrame 类的接口 CMainView .h a)CListCtrl的内部创建原理是通过CWnd::Create(sClassName,…)来实现的。 b)CStatic,CEdit,CButton的内部创建原理无一不是这个原理,即使是拖入对话框的控件底层也

    2024年02月13日
    浏览(43)
  • 二十三种设计模式第二十四篇--访问者模式(完结撒花)

    在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。 通过这种方式,元素的执行算法可以随着访问者改变而改变。 这种类型的设计模式属于行为型模式。根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的

    2024年02月14日
    浏览(44)
  • STM32开发(二十三)STM32F103 高级外设 —— TFT_LCD屏框架以及填充颜色 详解

    👈《上一篇》  🏡《主目录》  👉《下一篇》

    2024年02月06日
    浏览(43)
  • MFC第三十天 通过CToolBar类开发文字工具栏和工具箱、GDI+边框填充以及基本图形的绘制方法、图形绘制过程的反色线模型和实色模型

    CBRS_控制条属性 高级工具栏的开发 a)文字工具栏开发:调用CToolBar::SetButtonText和CBoolBar::SetSizes方法; b)工具箱创建时要指定:CBRS_SIZE_FIXED 调用CToolBar::SetButtonStyle方法,为n个按钮一行做分行属性。

    2024年02月13日
    浏览(56)
  • 【从零开始学习JAVA | 第二十三篇】集合体系结构

    目录 前言: 单列集合:      set与list的区别: 双列集合: map的特点: 总结:                   JAVA中为我们提供了很多集合,这些集合都有自己很独特的特点,因此我们要学习所有的集合,但是在学习所有的集合之前,我们还是先为大家介绍一下JAVA的集合体系结构,这

    2024年02月16日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包