作者:陈豪韦小宝_517 | 来源:互联网 | 2023-07-07 12:23
篇首语:本文由编程笔记#小编为大家整理,主要介绍了windows核心编程--2windows的画笔画刷以及一些简单的应用相关的知识,希望对你有一定的参考价值。
篇首语:本文由编程笔记#小编为大家整理,主要介绍了windows核心编程--2windows的画笔画刷以及一些简单的应用相关的知识,希望对你有一定的参考价值。
一、前言
????该系列前几篇:
?????windows核心编程--1、使用vs2019编写第一个win32项目
二、相关工具
????IDE:vs2019
????其他格式图片转ico脚本(贴在文末)
三、实验要求
????1、改变win32程序标题栏图标、鼠标样式以及任务栏图标。
????2、给菜单栏添加一个退出记事本
的子项,并实现该功能。
????3、使用自创的画笔以及画刷绘制线、多边形、椭圆等图形并填充。
四、实现
????1、使用vs2019创建一个windows桌面应用程序,如下所示:
????2、找到wcex
处,修改wcex.hCursor
属性,改变鼠标样式,这里改变成IDC_CROSS
即十字形状,如下所示:
????3、在vs2019菜单处,打开视图-->其他窗口-->资源视图
,点击其右侧Icon(右键点击)-->添加资源
,添加ico图标资源,在代码中找到wcex.hIcon
改变其属性以改变该窗口任务栏图标,找到wcex.hIconSm
改变标题栏的小图标,如下所示:
????4、在资源视图中,找到Menu-->IDC_MY
点击,在其左侧编辑菜单子项和在右下角编辑该子项ID(该ID在我们点击该项时会产生一个这个ID消息传给我们的消息处理函数,以响应用户),最后在消息处理函数中的WM_COMMAND
消息中添加相应的事件处理代码,如下所示:
??5、在代码中找到WM_PAINT
,添加我们要绘制的图形,先说一下绘制的基本过程:
????a、首先利用GetDC
或者BeginPaint
函数获取绘制句柄,其中,GetDC
函数有一个参数,为要绘制的窗口句柄。
????b、接着利用::CreatePen
函数创建一个自创画笔,该函数有3个参数,第一个参数为画笔的形状,第二个参数为画笔的粗细,第三个参数为画笔的颜色,例如HPEN hpen = ::CreatePen(PS_SOLID, 2, RGB(138,43,226));
,创建完画笔后,需要用::SelectObject
函数将该画笔选入,该函数有两个参数,第一个参数为我们用GetDC
函数得到的绘制句柄,第二个参数为要选入的对象,例如::SelectObject(hdc, hpen);
。
????c、接着利用::CreateSolidBrush
函数创建一个自创画刷,该函数只有一个参数,为该画刷的颜色,例如HBRUSH hbrush = ::CreateSolidBrush(RGB(255, 255, 0));
,同样的,创建完画笔后,需要用::SelectObject
函数将该画笔选入。
????接着就是利用LineTo
、Arc
等函数绘制图形,这些api就不再细说了,百度去搜索一些这些api即可,会在文末贴一篇写得比较全的博客链接。
五、实验结果截图
六、一些链接和图片转换代码
??绘制图形api
??图片转换代码:
????使用说明:python conversion.py -P 要转换的图片路径
实验代码:(命名为不是conversion.py请更改上面相应地方)
import PythonMagick
from optparse import OptionParser
store_position=‘‘
start_position=‘‘
parse = OptionParser()
parse.add_option(‘-P‘,action = ‘store‘,type = ‘string‘,dest = ‘position‘,help = ‘输入图片位置‘)
(options,args) = parse.parse_args()
start_position = options.position
x = len(start_position)
store_position = start_position[0:(x - 4)]
store_position += ‘.ico‘
img = PythonMagick.Image(start_position)
img.sample(‘128x128‘)
img.write(store_position)
print(f‘转换完成!{start_position}已经转换到了{store_position}‘)