グラデーション塗り潰し(T)          <TOP>


フォームをグラデーションで塗り潰します。

GdiGradientFill 長方形と三角形構造内を塗り潰す

GetDC 指定されたウィンドウのクライアント領域のデバイスコンテキストのハンドルを取得

ReleaseDC デバイスコンテキストを解放

 

  

 

'================================================================
'= グラデーション塗り潰し
'=    (GdiGradientFill.bas)
'================================================================
#include "Windows.bi"

Type TRIVERTEX
    x     As Long
    y     As Long
    Red   As Integer
    Green As Integer
    Blue  As Integer
    Alpha As Integer
End Type

Type GRADIENT_RECT
    UpperLeft  As Long
    LowerRight As Long
End Type

#define GRADIENT_FILL_RECT_H &H0        '水平方向にグラデーション
#define GRADIENT_FILL_RECT_V &H1        '垂直方向にグラデーション
#define GRADIENT_FILL_TRIANGLE &H2      '三角形グラデーション
#define GRADIENT_FILL_OP_FLAG &HFF

' 長方形と三角形構造内を塗り潰す
Declare Function Api_GdiGradientFill& Lib "gdi32" Alias "GdiGradientFill" (ByVal hDC&, pVertex As TRIVERTEX, ByVal dwNumVertex&, pMesh As GRADIENT_RECT, ByVal dwNumMesh&, ByVal dwMode&)

' 指定されたウィンドウのクライアント領域または画面全体を表すディスプレイデバイスコンテキストのハンドルを取得。その後、GDI 関数を使って、返されたデバイスコンテキスト内で描画を行える
Declare Function Api_GetDC& Lib "user32" Alias "GetDC" (ByVal hWnd&)

' デバイスコンテキストを解放
Declare Function Api_ReleaseDC& Lib "user32" Alias "ReleaseDC" (ByVal hWnd&, ByVal hDC&)

'================================================================
'=
'================================================================
Declare Function Index bdecl () As Integer
Function Index()
    Index = val(Mid$(GETDLGRADIOSELECT("Radio1"), 6)) -1
End Function

'================================================================
'=
'================================================================
Declare Function LongToUShort(Unsigned As Long) As Integer
Function LongToUShort(Unsigned As Long) As Integer
    LongToUShort = int(Unsigned - &H10000)
End Function

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var vert(1) As TRIVERTEX
    Var gRect As GRADIENT_RECT
    Var hDC As Long
    Var Ret As Long

    hDC = Api_GetDC(GethWnd)

    '黒〜
    vert(0).x = 0
    vert(0).y = 0
    vert(0).Red = 0
    vert(0).Green = 0
    vert(0).Blue = 0
    vert(0).Alpha = 0

    '〜赤・緑・青
    Select Case Index
    Case 0
        vert(1).Red = LongToUShort(&HFF00)
        vert(1).Green = 0
        vert(1).Blue = 0
    Case 1
        vert(1).Red = 0
        vert(1).Green = LongToUShort(&HFF00)
        vert(1).Blue = 0
    Case 2
        vert(1).Red = 0
        vert(1).Green = 0
        vert(1).Blue = LongToUShort(&HFF00)
    End Select

    vert(1).x = GetWidth
    vert(1).y = GetHeight
    vert(1).Alpha = 0

    gRect.UpperLeft = 0
    gRect.LowerRight = 1
    Ret = Api_GdiGradientFill(hDC, vert(0), 2, gRect, 1, GRADIENT_FILL_RECT_H)

    Ret = Api_ReleaseDC(GethWnd, hDC)
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End