seniors 发表于 2013-5-15 21:05:43

第四讲 GDI画刷

本帖最后由 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

lpxx 发表于 2013-5-15 21:18:49

非常感谢,慢慢学习了。

楼上风云 发表于 2013-5-15 21:53:06

回复 1# seniors


    根据啃第四讲

haijie1223 发表于 2013-5-15 23:55:18

迟到了 今天晚上喝酒了没法学习了明天补上~

xms77 发表于 2013-5-16 12:34:35

学习第四讲了,不知Seniors大侠会出多少讲?

xms77 发表于 2013-5-16 12:35:25

回复 4# haijie1223
酒后学习或许效果更佳也未必?

haijie1223 发表于 2013-5-16 12:46:52

回复 6# xms77


    今天还没时间啊,晚上还有一场应酬~

xms77 发表于 2013-5-16 16:21:47

回复 7# haijie1223
发哥我猜你一定是公务员,要不肿么这么多应酬呢?

sniperone 发表于 2013-5-16 16:32:06

膜拜大师~   先收藏慢慢学习~{:face (270):}

komaau3 发表于 2013-5-16 16:52:40

首页支持 LZ辛苦

haijie1223 发表于 2013-5-16 16:59:52

回复 8# xms77


    非也,我在化工厂上班。朋友多,感情逼的~没办法的

jasonyan97 发表于 2013-5-20 04:05:59

辛苦了,大大!

pccp 发表于 2013-7-27 10:30:35

继续学习中......

flyself 发表于 2015-9-3 13:40:20

继续学习中......

zmdzhxj 发表于 2019-8-17 12:31:24

学习了画刷,解决了一些问题。讲的真好!
页: [1]
查看完整版本: 第四讲 GDI画刷