绿色风's Blog
专注AutoIT(Au3)
  • 首页
  • 流●年
  • 笔●记
    • 学习随记
    • 源码示例
  • 脚●本
    • UDF(收集)
    • 工作室UDF
    • 工具●教程
    • 教程之GDI
  • 作●品
  • 下●载
  • 情怀ExcelTip
12月32014

[教程] 第四讲 GDI画刷

作者:绿色风   发布:2014-12-3 12:38 Wednesday   分类:   阅读:5284次   评论:0条  

ACN论坛.讲师:seniors   转载请说明此文出处所在:<<简易工作室>>,谢谢!

GDI之画刷
1、系统定义好的画刷,使用_WinAPI_GetStockObject获取,只有6种
2、实心画刷,使用_WinAPI_CreateSolidBrush($nColor)设置
3、自定义画刷,使用_WinAPI_CreateBrushIndirect ($iStyle, $iRGB, $iHatch)
第一个参数$iStyle参数是指画刷样式,有

BS_DIBPATTERN 设备无关DIB位图句柄
BS_DIBPATTERN8X8 设备无关DIB位图句柄8*8大小
BS_DIBPATTERNPT 设备无关DIB位图句柄指针
BS_HATCHED 阴影画刷
BS_HOLLOW 空画刷
BS_NULL 空画刷
BS_PATTERN 位图填充
BS_PATTERN8X8 8*8位图填充
BS_SOLID 纯色填充

DIB位图填充,没有帮助,我以后尽力去找找看,对不住,还没弄懂呢
第二个参数$iRGB,画刷颜色,直接填RGB颜色
如果是DIB位图填充则只能是
DIB_PAL_COLORS = 1 索引颜色
DIB_RGB_COLORS = 0 RGB颜色

第三个参数$iHatch阴影样式 直接填句柄或者指针
以下参数只对阴影画刷起作用
HS_BDIAGONAL = 3 右斜线
HS_CROSS = 4 十字
HS_DIAGCROSS = 5 网状
HS_FDIAGONAL = 2 左斜线
HS_HORIZONTAL = 0 水平线
HS_VERTICAL = 1 竖直线

上一讲,讲到画笔,画笔也有自定义画笔
_WinAPI_ExtCreatePen ( $iPenStyle, $iWidth, $iBrushStyle, $iRGB [, $iHatch [, $aUserStyle [, $iStart [, $iEnd]]]] )
$iPenStyle参数比createpen多了
PS_GEOMETRIC 几何画笔
PS_COSMETIC 装饰画笔(线宽一定是1)
PS_ALTERNATE 创建一个设置其他像素的画笔
PS_USERSTYLE 创建一个使用由用户提供的风格矩阵的画笔
PS_ENDCAP_ROUND 尾帽为圆形的
PS_ENDCAP_SQUARE 尾帽为方形的
PS_ENDCAP_FLAT 尾帽为平坦的
PS_JOIN_BEVEL 成尖角连接
PS_JOIN_MITET 通过setMiterLimit函数设置的当前极限值范围内斜接;否则,成尖角连接
PS_JOIN_ROUND 成圆角连接

其它参数和画刷类似
PS_ALTERNATE也没找到例子,以后有空研究
这讲较复杂,大家自己调调参数试试吧
效果图

未命名.JPG

源码

#include <APIConstants.au3>
#include <WinAPIEx.au3>

GUICreate("第四讲", 300, 200)
$ctrlId = GUICtrlCreatePic("", 0, 0, 300, 200)
$hWnd = GUICtrlGetHandle($ctrlId)
GUISetState()
gditest()

While 1
        $Msg = GUIGetMsg()
        Switch $Msg
                Case -3
                        ExitLoop
        EndSwitch
WEnd
GUIDelete()
Exit

Func gditest()
        $hDC = _WinAPI_GetDC($hWnd)
        Local $au3Dir = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\Autoit", "InstallDir");au3安装目录

        $hPen_PS_SOLID = _WinAPI_CreatePen($PS_SOLID, 1, 0xCC6600)
        $grayBrusg = _WinAPI_GetStockObject($GRAY_BRUSH);灰色画刷
        $DIAGCROSSBrush = _WinAPI_CreateBrushIndirect($BS_HATCHED, 0x99CC33, $HS_DIAGCROSS);网状阴影画刷

        $hPattern = _WinAPI_LoadImage(0, $au3Dir & '\Examples\WinAPIEx\Extras\Pattern.bmp', $IMAGE_BITMAP, 0, 0, $LR_LOADFROMFILE);读取填充位图一
        $XPPattern = _WinAPI_LoadBitmap(_WinAPI_GetModuleHandle(@SystemDir & '\shell32.dll'), 138);读取填充位图二
        $hBrush1 = _WinAPI_CreateBrushIndirect($BS_PATTERN, 0, $hPattern)
        $hBrush2 = _WinAPI_CreateBrushIndirect($BS_PATTERN, 0, $XPPattern)

        $oldPen = _WinAPI_SelectObject($hDC, $hPen_PS_SOLID)

        _WinAPI_SelectObject($hDC, $grayBrusg);选择灰色画刷
        $tRECT = _WinAPI_CreateRect(10, 10, 90, 60)
        _WinAPI_Rectangle($hDC, $tRECT);画矩形框,中间填充灰色

        _WinAPI_SelectObject($hDC, $DIAGCROSSBrush);选择网状阴影画刷
        _WinAPI_OffsetRect($tRECT, 100, 0);矩形区域右移100
        _WinAPI_Rectangle($hDC, $tRECT);画矩形框,中间填充网状阴影

        _WinAPI_SelectObject($hDC, $hBrush1);选择填充位图一画刷
        _WinAPI_OffsetRect($tRECT, 100, 0);矩形区域右移100
        _WinAPI_Rectangle($hDC, $tRECT);画矩形框,中间填充填充位图一

        $tRECT = _WinAPI_CreateRect(10, 75, 290, 77)
        _WinAPI_FillRect($hDC, DllStructGetPtr($tRECT), $hBrush2);画矩形框,中间填充填充位图二

        $hExtPen = _WinAPI_ExtCreatePen(BitOR($PS_GEOMETRIC, $PS_DOT, $PS_ENDCAP_SQUARE), 5, $BS_PATTERN, 0, $hPattern)
        _WinAPI_SelectObject($hDC, $hExtPen)
        _WinAPI_DrawLine($hDC, 10, 90, 290, 90)

        $hExtPen = _WinAPI_ExtCreatePen(BitOR($PS_GEOMETRIC, $PS_SOLID, $PS_ENDCAP_SQUARE, $PS_JOIN_BEVEL), 6, $BS_SOLID, 0xFF0000)
        _WinAPI_SelectObject($hDC, $hExtPen)
        $tRECT = _WinAPI_CreateRect(10, 110, 90, 190)
        _WinAPI_Rectangle($hDC, $tRECT)

        $hExtPen = _WinAPI_ExtCreatePen(BitOR($PS_GEOMETRIC, $PS_SOLID, $PS_ENDCAP_SQUARE, $PS_JOIN_MITER), 6, $BS_SOLID, 0xFF0000)
        _WinAPI_SelectObject($hDC, $hExtPen)
        _WinAPI_OffsetRect($tRECT, 100, 0)
        _WinAPI_Rectangle($hDC, $tRECT)

        $hExtPen = _WinAPI_ExtCreatePen(BitOR($PS_GEOMETRIC, $PS_SOLID, $PS_ENDCAP_SQUARE, $PS_JOIN_ROUND), 6, $BS_SOLID, 0xFF0000)
        _WinAPI_SelectObject($hDC, $hExtPen)
        _WinAPI_OffsetRect($tRECT, 100, 0)
        _WinAPI_Rectangle($hDC, $tRECT)

        _WinAPI_ReleaseDC($hWnd, $hDC)
EndFunc   ;==>gditest
```





本文固定链接: http://www.jianyiit.com/post-39.html

blogger
该日志由 绿色风 于2014-12-3 12:38 Wednesday发表在 分类下。
版权所有:《绿色风's Blog》 → 《[教程] 第四讲 GDI画刷》;
除特别标注,本博客很多文章均为原创. 互联分享,尊重版权,转载请以链接形式标明本文地址;
本文标签:

扫描二维码,在手机上阅读
上一篇::手机低头族们要注意的了
下一篇:[教程]第三讲 GDI画笔、线型

热门文章

相关文章

  • [教程]第七讲 GDI自绘一个控件
  • [教程]第十讲之分解2-多色渐变画刷
  • [教程] 第六讲 GDI设置图像到控件
  • [教程]第十讲 GDI+文字,附发光字,阴影字
  • [教程] 第八讲 GDI完全自绘控件,超链接控件
取消回复

发表评论

亲,头像对么?

56 + 80 =

提交中,请稍候……


木有头像就木JJ啦!还木有头像吗?点这里申请属于你的个性Gravatar头像吧!


    站点统计
    • 运行时间: 20254 天
    • 日志总数: 365 篇
    • 评论数量: 7238 条
    • 微语数量: 6 条
    • 附件总量: 388 件
  • 逝出的青春

  • 打赏"绿色风"



      扫码关注本站公众号 可搜本站内容

  • Autoit V3 脚本交流群

      常驻群1:905774875
      常驻群2:40672266


  • 链接

    • AU3中文论坛
    • Excel资料库
    • 完美者博客
    • 顺网小哥'S Blog
    • 猛牛哥的博客
    • 网吧系统下载
  • 分类

    • 流●年(66)
    • 笔●记(0)
    • 脚●本(0)
    • 作品(21)
    • 学习随记(51)
    • 源码示例(68)
    • UDF(收集)(26)
    • 工作室UDF(30)
    • 工具●教程(62)
    • 教程之GDI(24)
Copyright © 2013 绿色风's Blog. Powered by emlog. Theme by 射雕天龙. 鄂ICP备2021011689号-1 鄂公网安备42102302000078号 sitemap