[教程] 第四讲 GDI画刷
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也没找到例子,以后有空研究
这讲较复杂,大家自己调调参数试试吧
效果图
源码
#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://jianyiit.com/post-39.html
发表评论
木有头像就木JJ啦!还木有头像吗?点这里申请属于你的个性Gravatar头像吧!