热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:windows核心编程2windows的画笔画刷以及一些简单的应用

篇首语:本文由编程笔记#小编为大家整理,主要介绍了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函数将该画笔选入。
????接着就是利用LineToArc等函数绘制图形,这些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}‘)

推荐阅读
author-avatar
陈豪韦小宝_517
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有