• windows核心编程--2、windows的画笔画刷以及一些简单的应用


    一、前言

        该系列前几篇:
         windows核心编程--1、使用vs2019编写第一个win32项目


    二、相关工具

        IDE:vs2019
        其他格式图片转ico脚本(贴在文末)


    三、实验要求

        1、改变win32程序标题栏图标、鼠标样式以及任务栏图标。
        2、给菜单栏添加一个退出记事本的子项,并实现该功能。
        3、使用自创的画笔以及画刷绘制线、多边形、椭圆等图形并填充。


    四、实现

        1、使用vs2019创建一个windows桌面应用程序,如下所示:

    1.png

        2、找到wcex处,修改wcex.hCursor属性,改变鼠标样式,这里改变成IDC_CROSS即十字形状,如下所示:

    2.png

        3、在vs2019菜单处,打开视图-->其他窗口-->资源视图,点击其右侧Icon(右键点击)-->添加资源,添加ico图标资源,在代码中找到wcex.hIcon改变其属性以改变该窗口任务栏图标,找到wcex.hIconSm改变标题栏的小图标,如下所示:

    3.png

    4.png

    5.png

    6.png

    7.png

        4、在资源视图中,找到Menu-->IDC_MY点击,在其左侧编辑菜单子项和在右下角编辑该子项ID(该ID在我们点击该项时会产生一个这个ID消息传给我们的消息处理函数,以响应用户),最后在消息处理函数中的WM_COMMAND消息中添加相应的事件处理代码,如下所示:

    8.png

    9.png

    11.png

      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即可,会在文末贴一篇写得比较全的博客链接。

    10.png


    五、实验结果截图

    12.png

    六、一些链接和图片转换代码

      绘制图形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}')
  • 相关阅读:
    HDU 5044 Tree 树链剖分
    HDU 3966 Aragorn's Story 动态树 树链剖分
    HDU 2475 BOX 动态树 Link-Cut Tree
    上阶段总结
    HDU 3487 Play with Chain | Splay
    HDU 3726 Graph and Queries 平衡树+前向星+并查集+离线操作+逆向思维 数据结构大综合题
    VIJOS P1081 野生动物园 SBT、划分树模板
    VIJOS P1647 不差钱 SBT
    HDU 1890 Robotic Sort | Splay
    基础练习(VIP部分-持续更新)
  • 原文地址:https://www.cnblogs.com/aWxvdmVseXc0/p/12814023.html
Copyright © 2020-2023  润新知