找回密码
 加入
搜索
查看: 17522|回复: 14

[交流] 第四讲 GDI画刷

 火.. [复制链接]
发表于 2013-5-15 21:05:43 | 显示全部楼层 |阅读模式
本帖最后由 seniors 于 2013-6-16 07:57 编辑

4、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也没找到例子,以后有空研究
这讲较复杂,大家自己调调参数试试吧
效果图

源码
#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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×

评分

参与人数 4威望 +3 金钱 +160 贡献 +18 收起 理由
xms77 + 50 + 2 辛苦了,学习一下
楼上风云 + 30 无私分享
afan + 3 + 50 + 5 +
lpxx + 30 + 11 感谢分享

查看全部评分

发表于 2013-5-15 21:18:49 | 显示全部楼层
非常感谢,慢慢学习了。
发表于 2013-5-15 21:53:06 | 显示全部楼层
回复 1# seniors


    根据啃第四讲
发表于 2013-5-15 23:55:18 | 显示全部楼层
迟到了 今天晚上喝酒了  没法学习了  明天补上~
发表于 2013-5-16 12:34:35 | 显示全部楼层
学习第四讲了,不知Seniors大侠会出多少讲?
发表于 2013-5-16 12:35:25 | 显示全部楼层
回复 4# haijie1223
酒后学习或许效果更佳也未必?
发表于 2013-5-16 12:46:52 | 显示全部楼层
回复 6# xms77


    今天还没时间啊,晚上还有一场应酬~
发表于 2013-5-16 16:21:47 | 显示全部楼层
回复 7# haijie1223
发哥我猜你一定是公务员,要不肿么这么多应酬呢?
发表于 2013-5-16 16:32:06 | 显示全部楼层
膜拜大师~   先收藏慢慢学习~
发表于 2013-5-16 16:52:40 | 显示全部楼层
首页支持 LZ辛苦
发表于 2013-5-16 16:59:52 | 显示全部楼层
回复 8# xms77


    非也,我在化工厂上班。朋友多,感情逼的~没办法的
发表于 2013-5-20 04:05:59 | 显示全部楼层
辛苦了,大大!
发表于 2013-7-27 10:30:35 | 显示全部楼层
继续学习中......
发表于 2015-9-3 13:40:20 | 显示全部楼层
继续学习中......
发表于 2019-8-17 12:31:24 | 显示全部楼层
学习了画刷,解决了一些问题。讲的真好!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-21 16:35 , Processed in 0.083097 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表