当前位置: 首页 > news >正文

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

文章目录

  • HBrush对闭合图形的填充
  • HBITMAP位图资源的加载和平铺填充
  • CFont类常用功能与LOGFONT结构体
  • CPen类简介

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::CreateBrushIndirectInitializes a brush with the style, color, and pattern specified in a LOGBRUSH structure.CBrush::CreateDIBPatternBrushInitializes 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::FromHandleReturns 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。

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::CreatePenIndirectCreates 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);
http://www.lryc.cn/news/103447.html

相关文章:

  • 深入学习 Redis - 渐进式遍历 scan 命令、数据库管理命令
  • python+opencv实现显示摄像头,截取相关图片,录取相关视频
  • 第十章:重新审视扩张卷积:一种用于弱监督和半监督语义分割的简单方法
  • 指令收集:DOCKER+K8S
  • Minecraft 1.20.x Forge模组开发 05.矿石生成
  • 运维面试大全
  • 【线程安全的讨论(一)】CPU多核缓存架构和JMM
  • 以太网交换机的生成树协议STP
  • 手机照片转换成pdf怎么做?了解这几种方法就可以了
  • 跨境电商还有人在做吗,这十大选品技巧建议收藏!
  • HTML快速学习
  • centos7搭建k8s环境并部署springboot项目
  • nuitka打包软件程序
  • 12-3_Qt 5.9 C++开发指南_创建和使用静态链接库
  • conda模式安装paddlepaddle2.4.2版本
  • 英语疑问句
  • k8s证书更新,kubeadm安装的K8S证书过期后无法使用后证书更新方法
  • java实现日期拆分的方法
  • Ansible之playbook剧本编写
  • 【ChatGPT辅助学Rust | 基础系列 | Hello, Rust】编写并运行第一个Rust程序
  • 自监督去噪:Noise2Noise原理及实现(Pytorch)
  • BES2700 SDK绝对时间获取方法
  • Closure Table-树形多级关系数据库设计(MySql)
  • 【SQL应知应会】表分区(一)• MySQL版
  • java语法基础-- 变量、标识符、关键字
  • [STL]stack和queue模拟实现
  • 汽车销售企业消费税,增值税高怎么合理解决?
  • flask数据库操作
  • 【C++】 哈希
  • TCP三次握手和四次挥手以及11种状态(二)