- Сообщения
- 5,379
- Репутация
- 2,724
Способ создания красивых градиентов средствами WinAPI. Для запуска примера необходимо скачать библиотеку WinAPIEx.au3.
Код:
#Include <WinAPIEx.au3>
Opt('MustDeclareVars', 1)
Global Const $STM_SETIMAGE = 0x0172
Global Const $STM_GETIMAGE = 0x0173
Global $hForm, $Pic, $hPic, $hObj, $hBitmap, $hDC, $hMemDC, $hMemSv
Dim $aVertex[6][3] = [[0, 0, 0xFF0000], [400, 400, 0x00FF00], [ 0, 400, 0x0000FF], _
[0, 0, 0xFF0000], [400, 0, 0xFFFF00], [400, 400, 0x00FF00]]
; Create GUI
$hForm = GUICreate('MyGUI', 400, 400)
$Pic = GUICtrlCreatePic('', 0, 0, 400, 400)
$hPic = GUICtrlGetHandle($Pic)
; Create gradient
$hDC = _WinAPI_GetDC($hPic)
$hMemDC = _WinAPI_CreateCompatibleDC($hDC)
$hBitmap = _WinAPI_CreateCompatibleBitmap($hDC, 400, 400)
$hMemSv = _WinAPI_SelectObject($hMemDC, $hBitmap)
_WinAPI_GradientFill($hMemDC, $aVertex, 0, 2)
_WinAPI_GradientFill($hMemDC, $aVertex, 3, 5)
_WinAPI_ReleaseDC($hPic, $hDC)
_WinAPI_SelectObject($hMemDC, $hMemSv)
_WinAPI_DeleteDC($hMemDC)
; Set gradient to control
_SendMessage($hPic, $STM_SETIMAGE, 0, $hBitmap)
$hObj = _SendMessage($hPic, $STM_GETIMAGE)
If $hObj <> $hBitmap Then
_WinAPI_DeleteObject($hBitmap)
EndIf
GUISetState()
Do
Until GUIGetMsg() = -3