首页 > 其他分享 >GDI+画刷(HatchBrush)

GDI+画刷(HatchBrush)

时间:2023-07-19 09:33:09浏览次数:38  
标签:pForeColor 画刷 HatchBrush pBackColor AddItem pStyle RGB GDI 255

  HatchBrush在构造过程中需要指定画刷类型、前景色、后景色三项内容,其中画刷类型在官方文档中给出的枚举类型如下所示:

 1 typedef enum HatchStyle {
 2 HatchStyleHorizontal,
 3 HatchStyleVertical,
 4 HatchStyleForwardDiagonal,
 5 HatchStyleBackwardDiagonal,
 6 HatchStyleCross,
 7 HatchStyleDiagonalCross,
 8 HatchStyle05Percent,
 9 HatchStyle10Percent,
10 HatchStyle20Percent,
11 HatchStyle25Percent,
12 HatchStyle30Percent,
13 HatchStyle40Percent,
14 HatchStyle50Percent,
15 HatchStyle60Percent,
16 HatchStyle70Percent,
17 HatchStyle75Percent,
18 HatchStyle80Percent,
19 HatchStyle90Percent,
20 HatchStyleLightDownwardDiagonal,
21 HatchStyleLightUpwardDiagonal,
22 HatchStyleDarkDownwardDiagonal, HatchStyleDarkUpwardDiagonal,
23 HatchStyleWideDownwardDiagonal, HatchStyleWideUpwardDiagonal,
24 HatchStyleLightVertical,
25 HatchStyleLightHorizontal,
26 HatchStyleNarrowVertical,
27 HatchStyleNarrowHorizontal,
28 HatchStyleDarkVertical,
29 HatchStyleDarkHorizontal,
30 HatchStyleDashedDownwardDiagonal,
31 HatchStyleDashedUpwardDiagonal,
32 HatchStyleDashedHorizontal,
33 HatchStyleDashedVertical,
34 HatchStyleSmallConfetti,
35 HatchStyleHorizontal,
36 HatchStyleVertical,
37 HatchStyleLargeConfetti,
38 HatchStyleZigZag,
39 HatchStyleWave,
40 HatchStyleDiagonalBrick,
41 HatchStyleHorizontalBrick,
42 HatchStyleWeave,
43 HatchStylePlaid,
44 HatchStyleDivot,
45 HatchStyleDottedGrid,
46 HatchStyleDottedDiamond,
47 HatchStyleShingle,
48 HatchStyleTrellis,
49 HatchStyleSphere,
50 HatchStyleSmallGrid,
51 HatchStyleSmallCheckerBoard,
52 HatchStyleLargeCheckerBoard,
53 HatchStyleOutlinedDiamond,
54 HatchStyleSolidDiamond,
55 HatchStyleTotal,
56 HatchStyleLargeGrid,
57 HatchStyleMin,
58 HatchStyleMax
59 } ;

  针对画刷样式代码效果如下所示:

1、变量定义

1 CComboBox m_pStyle;
2 CColorCombo m_pForeColor;
3 COLORREF m_pForeColorRef;
4 CColorCombo m_pBackColor;
5 COLORREF m_pBackColorRef;
6 HatchStyle m_pHatchStyle;

2、关键代码

  1 void PenTest::DoDataExchange(CDataExchange* pDX)
  2 {
  3     CDialogEx::DoDataExchange(pDX);
  4     DDX_Control(pDX, IDC_COMBO1, m_pStyle);
  5     DDX_Control(pDX, IDC_COMBO_FORECOLOR, m_pForeColor);
  6     DDX_Control(pDX, IDC_COMBO_BACKCOLOR, m_pBackColor);
  7 }
  8 
  9 
 10 BEGIN_MESSAGE_MAP(PenTest, CDialogEx)
 11     ON_WM_PAINT()
 12     ON_CBN_SELCHANGE(IDC_COMBO_FORECOLOR, &PenTest::OnSelchangeComboForecolor)
 13     ON_CBN_SELCHANGE(IDC_COMBO_BACKCOLOR, &PenTest::OnSelchangeComboBackcolor)
 14     ON_CBN_SELCHANGE(IDC_COMBO1, &PenTest::OnSelchangeCombo1)
 15 END_MESSAGE_MAP()
 16 
 17 void PenTest::OnPaint()
 18 {
 19     CPaintDC dc(this); 
 20     CRect crt;
 21     GetClientRect(&crt);
 22     Graphics graphics(dc);
 23     Gdiplus::HatchBrush hra(m_pHatchStyle, 
 24         Color(GetRValue(m_pForeColorRef), GetGValue(m_pForeColorRef), GetBValue(m_pForeColorRef)), 
 25         Color(GetRValue(m_pBackColorRef), GetGValue(m_pBackColorRef), GetBValue(m_pBackColorRef)));
 26 
 27     graphics.FillEllipse(&hra, 0, crt.Height() / 2, crt.Width(), crt.Height() / 2);
 28 }
 29 
 30 BOOL PenTest::OnInitDialog()
 31 {
 32     CDialogEx::OnInitDialog();
 33     
 34     m_pStyle.InsertString(0, _T("HatchStyleHorizontal"));
 35     m_pStyle.InsertString(1, _T("HatchStyleForwardDiagonal"));
 36     m_pStyle.InsertString(2, _T("HatchStyleDiagonalCross"));
 37     m_pStyle.InsertString(3, _T("HatchStyle50Percent"));
 38     m_pStyle.InsertString(4, _T("HatchStyleLightDownwardDiagonal"));
 39     m_pStyle.InsertString(5, _T("HatchStyleDarkDownwardDiagonal"));
 40     m_pStyle.InsertString(6, _T("HatchStyleWideDownwardDiagonal"));
 41     m_pStyle.InsertString(7, _T("HatchStyleLightVertical"));
 42     m_pStyle.InsertString(8, _T("HatchStyleNarrowVertical"));
 43     m_pStyle.SetCurSel(0);
 44 
 45     m_pForeColor.AddItem(_T("紫色"), RGB(128, 0, 128));
 46     m_pForeColor.AddItem(_T("青色"), RGB(0, 255, 255));
 47     m_pForeColor.AddItem(_T("红色"), RGB(255, 0, 0));
 48     m_pForeColor.AddItem(_T("蓝色"), RGB(0, 0, 255));
 49     m_pForeColor.AddItem(_T("绿色"), RGB(0, 255, 0));
 50     m_pForeColor.AddItem(_T("黄色"), RGB(255, 255, 0));
 51     m_pForeColor.AddItem(_T("粉色"), RGB(255, 0, 255));
 52     m_pForeColor.AddItem(_T("棕色"), RGB(255, 128, 64));
 53     m_pForeColor.SetCurSel(0);
 54 
 55     m_pBackColor.AddItem(_T("紫色"), RGB(128, 0, 128));
 56     m_pBackColor.AddItem(_T("青色"), RGB(0, 255, 255));
 57     m_pBackColor.AddItem(_T("红色"), RGB(255, 0, 0));
 58     m_pBackColor.AddItem(_T("蓝色"), RGB(0, 0, 255));
 59     m_pBackColor.AddItem(_T("绿色"), RGB(0, 255, 0));
 60     m_pBackColor.AddItem(_T("黄色"), RGB(255, 255, 0));
 61     m_pBackColor.AddItem(_T("粉色"), RGB(255, 0, 255));
 62     m_pBackColor.AddItem(_T("棕色"), RGB(255, 128, 64));
 63     m_pBackColor.SetCurSel(0);
 64 
 65     m_pForeColorRef = RGB(255, 0, 0);
 66     m_pBackColorRef = RGB(0, 0, 0);
 67     m_pHatchStyle = HatchStyleNarrowVertical;
 68     return TRUE;
 69                 
 70 }
 71 
 72 void PenTest::OnSelchangeComboForecolor()
 73 {
 74     m_pForeColorRef = m_pForeColor.GetItemData(m_pForeColor.GetCurSel());
 75     Invalidate();
 76 }
 77 
 78 
 79 void PenTest::OnSelchangeComboBackcolor()
 80 {
 81     m_pBackColorRef = m_pBackColor.GetItemData(m_pBackColor.GetCurSel());
 82     Invalidate();
 83 }
 84 
 85 
 86 void PenTest::OnSelchangeCombo1()
 87 {
 88     switch (m_pStyle.GetCurSel()) {
 89     case 0:
 90         m_pHatchStyle = HatchStyleHorizontal;
 91         break;
 92     case 1:
 93         m_pHatchStyle = HatchStyleForwardDiagonal;
 94         break;
 95     case 2:
 96         m_pHatchStyle = HatchStyleDiagonalCross;
 97         break;
 98     case 3:
 99         m_pHatchStyle = HatchStyle50Percent;
100         break;
101     case 4:
102         m_pHatchStyle = HatchStyleLightDownwardDiagonal;
103         break;
104     case 5:
105         m_pHatchStyle = HatchStyleDarkDownwardDiagonal;
106         break;
107     case 6:
108         m_pHatchStyle = HatchStyleWideDownwardDiagonal;
109         break;
110     case 7:
111         m_pHatchStyle = HatchStyleLightVertical;
112         break;
113     case 8:
114         m_pHatchStyle = HatchStyleNarrowVertical;
115         break;
116     }
117     Invalidate();
118 }

 

标签:pForeColor,画刷,HatchBrush,pBackColor,AddItem,pStyle,RGB,GDI,255
From: https://www.cnblogs.com/missyou0813/p/17564706.html

相关文章

  • GDI+颜色(Color)
    构造方法1:Color::Color(BYTEr,BYTEg,BYTEb)构造方法中三个参数分别为RGB值,取值范围(0-255),下面代码呈现在RGB取值下进行线的绘制: 1Graphicsgraphics(dc);23Colorclr(255,0,0);4Colorclg(0,255,0);5Colorclb(0,0,255);67Penpr(clr,2.0......
  • GDI+配置(MFC)
    什么是GDI+?GDI+是WinXP系统与WinServer2003系统的一部分,为系统二维绘图提供支撑,GDI+是对GDI(GraphicsDeviceInterface)的升级,增加了相关属性及优化了相关属性。GDI+在MFC中配置: /**********************GDI预定义****************************/#ifndefULONG_PTR#def......
  • aardio中获取网络图片经GDI处理后保存到本地
    下面的代码是将图片保存到/img目录下:代码如下:importprocess;importfsys.stream;importgdip.bitmap;importinet.http;//获取一个网络图片varpngData=inet.http().get("http://www.baidu.com/img/baidu_logo.gif");//转换为GDI对象处理varbitmap=gdip.bitm......
  • 19cRAC更换ocr_votingdisk所在的磁盘组
    0.需求OCR和Votingdisk目前存放在+DG_GRID磁盘组中,计划将OCR和Votingdisk临时迁移至+DG_DATA磁盘组,然后重建+DG_GRID磁盘组,等+DG_GRID磁盘组重建完成后,再将OCR和Votingdisk最终迁移回+DG_GRID磁盘组1.磁盘组信息[grid@19crac1~]$asmcmdlsdgState   Type   Rebal Se......
  • 如何洞察 C# 程序的 GDI 句柄泄露
    一:背景1.讲故事前段时间有位朋友找到我,说他的程序界面操作起来很慢并且卡顿等一些不正常现象,从任务管理器看了下GDI句柄已经到1w了,一时也找不出什么代码中哪里有问题,让我帮忙看下,其实这种问题看内存dump作用不是很大,主要是写脚本很麻烦,这一篇我们就来简单聊聊如何洞察此类问题......
  • 如何洞察 C# 程序的 GDI 句柄泄露
    一:背景1.讲故事前段时间有位朋友找到我,说他的程序界面操作起来很慢并且卡顿等一些不正常现象,从任务管理器看了下GDI句柄已经到1w了,一时也找不出什么代码中哪里有问题,让我帮忙看下,其实这种问题看内存dump作用不是很大,主要是写脚本很麻烦,这一篇我们就来简单聊聊如何洞察此类问题......
  • 记一次ubuntu系统磁盘无法挂载之gdisk命令的使用
    可以使用fdisk-l查看到磁盘分区信息但实际上并未成功(base)root@ywb:~#fdisk-l......TheprimaryGPTtableiscorrupt,butthebackupappearsOK,sothatwillbeused.Disk/dev/sde:4.6TiB,5000981077504bytes,9767541167sectorsUnits:sectorsof1*51......
  • 如何洞察 C# 程序的 GDI 句柄泄露
    一:背景1.讲故事前段时间有位朋友找到我,说他的程序界面操作起来很慢并且卡顿等一些不正常现象,从任务管理器看了下GDI句柄已经到1w了,一时也找不出什么代码中哪里有问题,让我帮忙看下,其实这种问题看内存dump作用不是很大,主要是写脚本很麻烦,这一篇我们就来简单聊聊如何洞察此类......
  • 绘制Bezier曲线(Windows GDI)
    本文仅记录绘制贝塞尔曲线的代码写法,不解释贝塞尔曲线本身。若要了解贝塞尔曲线本身你需要具备一些基础知识:基本空间几何知识排列组合常用等式贝塞尔曲线的数学表达式了解Bernstein基函数贝塞尔曲线的各种绘制方法本文使用递推方法绘制。就像这图上显示的:代码的核心部分......
  • GroundingDINO(一种开集目标检测算法)服务化,根据文本生成检测框
    背景最近发现一个叫GroundingDINO的开集目标检测算法,所谓开集目标检测就是能检测的目标类别不局限于训练的类别,这个算法可以通过输入文本的prompt然后输出对应的目标框。可以用来做预标注或者其他应用,比如我们要训练某个细分场景的算法时,我们找不到足够的已经标注的数据,就可以先......