Jump to content

Custom control don't work correctly


NHD
 Share

Recommended Posts

Hi,

I've been translated code from FreeBasic to AutoIt. And it didn't work correctly.

Please help me!

FreeBasic:

#Include Once "windows.bi"

#Define _RGB(r,g,b)  BGR(b,g,r)

CONST GRADIENT_FILL_RECT_H  =  0
CONST GRADIENT_FILL_RECT_V  =  1

Dim Shared hInstance As HINSTANCE

  ' This dll is located in Windows directory
DECLARE FUNCTION Gradientfill Lib "MSIMG32" ALIAS "GradientFill"           _
(hDC AS HDC, pVertex As PTRIVERTEX, dwNumVertex As Integer,pMesh AS PGRADIENT_RECT, dwNumMesh As Integer, dwMode  As Integer) As Integer

'********************************************************************
'     A FB Control Template  
'********************************************************************
Declare Function NiceButt(ByVal hWnd as HWND,byval Msg as UINT,byval wParam as WPARAM,byval lParam as LPARAM) as LRESULT 
Declare FUNCTION IsMouseOver (hWnd As HWND )As Integer
Declare SUB Draw_Gradient (hdc as HDC, x  As Integer, y  As integer, w  As integer, h  As Integer, r  As integer, g  As integer, b As integer)
Declare FUNCTION Register_NiceButt()As Integer

 ' 'Windows calls this function when the dll is loaded. 
/'Function DllMain alias "MAIN"(byval hModule as HMODULE,byval reason as Integer,byval lpReserved as LPVOID) as BOOL  

   Select case reason
      case DLL_PROCESS_ATTACH
         hInstance=hModule
         Register_NiceButt()
         MessageBox(GetActiveWindow(),"OK","OK",MB_OK)
         Return 0
      case DLL_PROCESS_DETACH
         '
   end select 
   return TRUE 

end function 
'/

FUNCTION Register_NiceButt()As Integer Export
DIM  wc AS WNDCLASSEX
DIM  szClassName As String
szClassName     =  "NiceButt"
wc.cbSize        =  SIZEOF(WNDCLASSEX)
wc.style         =  CS_HREDRAW OR CS_VREDRAW OR CS_GLOBALCLASS
wc.hInstance     =  GetmoduleHandle(0) 'hInstance
wc.hbrBackground =  Cast(HBRUSH,COLOR_BTNFACE+1)
wc.lpszClassName =  StrPtr(szClassName)
wc.lpfnWndProc   =  @NiceButt
wc.cbClsExtra    =  0
wc.cbWndExtra    =  0
wc.hIcon         =  0
wc.hCursor       =  0
wc.lpszMenuName  =  0
wc.hIconSm       =  0
FUNCTION         =  RegisterClassEx(@wc)
END FUNCTION

'********************************************************************
'                      Custom Control Procedure
'********************************************************************

Function NiceButt(ByVal hWnd as HWND,byval Msg as UINT,byval wParam as WPARAM,byval lParam as LPARAM) as LRESULT
STATIC  As Integer ButtDown,mouseover
STATIC Captured AS HWND

SELECT Case Msg

'**************************
  CASE WM_CREATE
'**************************

  DIM   Region AS HRGN
  DIM   Rct AS RECT
  DIM As Integer  x, y, w, h
  ButtDown = FALSE
  GetClientRect (hWnd,@Rct)      ' <<-- Get the size of our control
  x = Rct.left
  y = Rct.top
  w = Rct.right  - Rct.left
  h = Rct.bottom - Rct.top

  'Region = CreateRoundRectRgn(10,10,w,h, h * 0.90 , h * 0.90 )

  'SetWindowRgn (hWnd,Region,True)
  InvalidateRect(hWnd,0,0)
  'EXIT FUNCTION

' *******************
  CASE WM_PAINT
' *******************

  DIM   hDC       AS HDC
  DIM   ps        AS PAINTSTRUCT
  DIM   hPen      AS HPEN
  DIM   hBrush    AS HBRUSH
  DIM   hOldBrush AS HBRUSH
  DIM   Rct       AS RECT
  DIM   Size      AS SIZE
  DIM   T As ZString*2048
  DIM As Integer i
  DIM As Integer  XCtr
  DIM As Integer  YCtr
  DIM As Integer  x,y,w,h
  DIM As Integer  r,g,b

' *******************

  GetClientRect (hWnd,@Rct)      ' <<-- Get the size of our control
  x = Rct.left
  y = Rct.top
  w = Rct.right  - Rct.left
  h = Rct.bottom - Rct.top

  XCtr = (Rct.left + Rct.right)  / 2  ' Horizontal center of our ctrl
  YCtr = (Rct.top  + Rct.bottom) / 2  ' Vertical   center of our ctrl
  GetWindowText(hWnd,T ,255)          ' Grab a copy of control caption

'**********************************
'        Draw our control
'**********************************

  hDC = BeginPaint (hWnd, @ps)
  GetTextExtentPoint32(hDC, T , LEN(T),@Size)    ' Get caption size
  r = 30 : g = 90 : b = 90
  Draw_Gradient (hDC, x, y, w, h, r, g, b)
  SetBkMode (hDC,TRANSPARENT)

  IF ButtDown THEN
    SetTextColor(hDC,_RGB(255,0,0))
    TextOut(hDC, XCtr-(Size.cx/2)+1, YCtr-(Size.cy/2)+1,T,LEN(T))
  ELSE
    SetTextColor(hDC,_RGB(0,0,255))
    TextOut(hDC, XCtr-Size.cx/2, YCtr-Size.cy/2,T,LEN(T))
  END IF

  EndPaint (hWnd,@ps)
  'EXIT FUNCTION

'******************************
  CASE WM_LBUTTONUP
'******************************

  IF hWnd = Captured THEN
    DIM   hParent AS HWND
    ReleaseCapture()
    ButtDown = FALSE
    InvalidateRect(hWnd,0,0)
    hParent=GetParent(hWnd)
    SendMessage(hParent,WM_COMMAND,MAKELONG(GetWindowLong(hWnd,GWL_ID), BN_CLICKED),Cast(LONG,hWnd))
  END IF
  'EXIT FUNCTION

'******************************
  CASE WM_LBUTTONDOWN
'******************************

  SetCapture(hWnd)
  Captured = hWnd
  ButtDown = TRUE
  SetFocus (hWnd)
  InvalidateRect(hWnd,0,0)
  'EXIT FUNCTION

'******************************
  CASE WM_MOUSEMOVE
'******************************

  IF ButtDown THEN
    IF IsMouseOver(hWnd) THEN
      ButtDown = TRUE
      InvalidateRect(hWnd,0,0)
    ELSE
      ReleaseCapture()
      ButtDown = FALSE
      InvalidateRect(hWnd,0,0)
    END IF
  END IF
  'EXIT FUNCTION

'******************************
  CASE WM_MOVING
'******************************

  ReleaseCapture()
  ButtDown = FALSE
  InvalidateRect(hWnd,0,0)
  'EXIT FUNCTION

'******************************
  CASE WM_SIZE
'******************************

  ReleaseCapture()
  ButtDown = FALSE
  InvalidateRect(hWnd,0,0)
  'EXIT FUNCTION

END Select
Return DefWindowProc(hwnd,Msg,wparam,lparam)
END FUNCTION







SUB Draw_Gradient (hdc as HDC, x  As Integer, y  As integer, w  As integer, h  As Integer, r  As integer, g  As integer, b As integer)
DIM  Vert(2) AS TRIVERTEX
DIM   Rect    AS GRADIENT_RECT
'******************************************************
Vert (0).x      =    0
Vert (0).y      =    0
Vert (0).Red    =    65535-(65535-(r*256))
Vert (0).Green  =    65535-(65535-(g*256))
Vert (0).Blue   =    65535-(65535-(b*256))
Vert (0).Alpha  =    0
'******************************************************
Vert (1).x      =    w
Vert (1).y      =    h/2
Vert (1).Red    =    65535-(65535-(255*256))
Vert (1).Green  =    65535-(65535-(255*256))
Vert (1).Blue   =    65535-(65535-(255*256))
Vert (1).Alpha  =    0
'******************************************************
Rect.UpperLeft  =    0
Rect.LowerRight =    1
'******************************************************
Gradientfill(hdc,@Vert(0),2,@Rect,1,GRADIENT_FILL_RECT_V)
'******************************************************
Vert (0).x      =    0
Vert (0).y      =    h/2
Vert (0).Red    =    65535-(65535-(255*256))
Vert (0).Green  =    65535-(65535-(255*256))
Vert (0).Blue   =    65535-(65535-(255*256))
Vert (0).Alpha  =    0
'******************************************************
Vert (1).x      =    w
Vert (1).y      =    h
Vert (1).Red    =    65535-(65535-(r*256))
Vert (1).Green  =    65535-(65535-(g*256))
Vert (1).Blue   =    65535-(65535-(b*256))
Vert (1).Alpha  =    0
'******************************************************
Rect.UpperLeft  =    0
Rect.LowerRight =    1
'******************************************************
Gradientfill(hdc,@Vert(0),2,@Rect,1,GRADIENT_FILL_RECT_V)
END SUB

FUNCTION IsMouseOver (hWnd As HWND )As Integer
DIM  Rect As RECT
DIM  Pt   As POINT
GetWindowRect (hWnd, @Rect)
GetCursorPos(@Pt)
FUNCTION = PtInRect (@Rect, Pt)
END FUNCTION

 

AutoIt:

#include-once
#include <WinAPI.au3>
#include <WinAPIGdi.au3>
#include <WinAPISys.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
;~ #Include <windows.bi>

Global Const $_tagRect              = "struct;long left;long top;long right;long bottom;endstruct"
Global Const $_tagSize              = "struct;long cx;long cy;endstruct"
Global Const $_tagGradient_Rect     = "struct;ulong UpperLeft;ulong LowerRight;endstruct"
Global Const $_tagPoint             = "struct;long x;long y;endstruct"
Global Const $_tagTrivertex         = "struct;long x;long y;int Red;int Greed;int Blue;int Alpha;endstruct"
Global Const $_tagPaintStruct       = "struct;handle hdc;bool fErase;long left;long top;long right;long bottom;bool fRestore;bool fIncUpdate;byte rgbReserved[32];endstruct"
Global Const $_tagWNDCLASSEX        = "struct;uint cbSize;uint style;ptr lpfnWndProc;int cbClsExtra;int cbWndExtra;ptr hInstance;ptr hIcon;" & _
                                    "ptr hCursor; ptr hbrBackground; ptr lpszMenuName;ptr lpszClassName;ptr hIconSm;endstruct"
Global Const $CS_VREDRAW            = 0x0001, $CS_HREDRAW =0x0002, $CS_GLOBALCLASS = 0x4000
Global Const $BN_CLICKED            = 0
;~ #Define _RGB(r,g,b)  BGR(b,g,r)

Global Const $GRADIENT_FILL_RECT_H  =  0
Global Const $GRADIENT_FILL_RECT_V  =  1

;~ Dim Shared hInstance As HINSTANCE

;~   ' This dll is located in Windows directory
;~ DECLARE FUNCTION Gradientfill Lib "MSIMG32" ALIAS "GradientFill"           _
;~ (hDC AS HDC, pVertex As PTRIVERTEX, dwNumVertex As Integer,pMesh AS PGRADIENT_RECT, dwNumMesh As Integer, dwMode  As Integer) As Integer

;~ '********************************************************************
;~ '     A FB Control Template
;~ '********************************************************************
;~ Declare Function NiceButt(ByVal hWnd as HWND,byval Msg as UINT,byval wParam as WPARAM,byval lParam as LPARAM) as LRESULT
;~ Declare FUNCTION IsMouseOver (hWnd As HWND )As Integer
;~ Declare SUB Draw_Gradient (hdc as HDC, x  As Integer, y  As integer, w  As integer, h  As Integer, r  As integer, g  As integer, b As integer)
;~ Declare FUNCTION Register_NiceButt()As Integer

#cs
 ' 'Windows calls this function when the dll is loaded.
/'Function DllMain alias "MAIN"(byval hModule as HMODULE,byval reason as Integer,byval lpReserved as LPVOID) as BOOL

   Select case reason
      case DLL_PROCESS_ATTACH
         hInstance=hModule
         Register_NiceButt()
         MessageBox(GetActiveWindow(),"OK","OK",MB_OK)
         Return 0
      case DLL_PROCESS_DETACH
         '
   end select
   return True

end function
'/
#ce



#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 615, 437, 192, 124)

RegisterButton()
Global $Ctrl = _winapi_CreateWindowEx(0, "TestButton", "Test", BitOR($WS_VISIBLE, $WS_CHILD), 10, 10, 80, 30, $Form1)



ConsoleWrite(@CRLF & $Ctrl)
GUISetState(@SW_SHOW)

_WinAPI_UpdateWindow($Form1)
#EndRegion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit

    EndSwitch
WEnd


Func RegisterButton()

    Local $hDll = DllCallbackRegister('TestButtonProc', 'lresult', 'hwnd;uint;wparam;lparam')

;~  DIM  wc AS WNDCLASSEX
;~  DIM  szClassName As String
    Local $sClass = "TestButton"
    Local $wc = DllStructCreate($_tagWNDCLASSEX & ';wchar szClassName[' & (StringLen($sClass) + 1) & ']')

;~  szClassName         =  "NiceButt"

;~  wc.cbSize           =  SIZEOF(WNDCLASSEX)
    $wc.cbSize          =  DllStructGetPtr($wc, 'szClassName') - DllStructGetPtr($wc)

;~  wc.style            =  CS_HREDRAW OR CS_VREDRAW OR CS_GLOBALCLASS
    $wc.style           =  BitOR($CS_HREDRAW, $CS_VREDRAW, $CS_GLOBALCLASS)

;~  wc.hInstance        =  GetmoduleHandle(0) 'hInstance
    $wc.hInstance       =  _WinAPI_GetModuleHandle(0)

;~  wc.hbrBackground    =  Cast(HBRUSH,COLOR_BTNFACE+1) ;///
    $wc.hbrBackground   =  _WinAPI_CreateSolidBrush(_WinAPI_GetSysColor($COLOR_BTNFACE))

;~  wc.lpszClassName    =  StrPtr(szClassName)
    $wc.lpszClassName   =  DllStructGetPtr($wc, 'szClassName')

;~  wc.lpfnWndProc      =  @NiceButt
    $wc.lpfnWndProc     =  DllCallbackGetPtr($hDll)

;~  wc.cbClsExtra       =  0
    $wc.cbClsExtra      =  0

;~  wc.cbWndExtra       =  0
    $wc.cbWndExtra      =  0

;~  wc.hIcon            =  0
    $wc.hIcon           =  0

;~  wc.hCursor          =  0
    $wc.hCursor         =  0

;~  wc.lpszMenuName     =  0
    $wc.lpszMenuName    =  0

;~  wc.hIconSm          =  0
    $wc.hIconSm         =  0

    $wc.szClassName     =  $sClass

;~  FUNCTION            =  RegisterClassEx(@wc)
    Local $aRet = _WinAPI_RegisterClassEx($wc)
    Return $aRet
;~ END FUNCTION
EndFunc

;********************************************************************
;                      Custom Control Procedure
;********************************************************************

;~ Function NiceButt(ByVal hWnd as HWND,byval Msg as UINT,byval wParam as WPARAM,byval lParam as LPARAM) as LRESULT
Func TestButtonProc($hWnd, $iMsg, $wParam, $lParam)
    Static $bBtnDown, $bMouseOver, $hCaptured

    Switch $iMsg
        Case $WM_CREATE
            Local $Rct = DllStructCreate($_tagRect)
            Local $iX, $iY, $iW, $iH
            $bBtnDown = False
            GetClientRect($hWnd, $Rct)

            $iX = $Rct.left
            $iY = $Rct.top
            $iW = $Rct.right - $Rct.left
            $iH = $Rct.bottom - $Rct.top

            InvalidateRect($hWnd, 0, False)
;~          EXIT FUNCTION
;~          Return 0

        Case $WM_PAINT
            Local $ps ;= DllStructCreate($_tagPaintStruct)
            Local $hPen, $hBrush, $hOldBrush
            Dim $Rct = DllStructCreate($_tagRect)
            Dim $Size = DllStructCreate($_tagSize)
            Dim $T = "", $i
            Dim $XCtr, $YCtr
            Dim $iX, $iY, $iW, $iH
            Dim $iR, $iG, $iB

            GetClientRect($hWnd, $Rct)

            $iX = $Rct.left
            $iY = $Rct.top
            $iW = $Rct.right  - $Rct.left
            $iH = $Rct.bottom - $Rct.top

            $XCtr = ($Rct.left + $Rct.right)  / 2
            $YCtr = ($Rct.top  + $Rct.bottom) / 2
;~          GetWindowText(hWnd,T ,255)          ' Grab a copy of control caption

;~          DllCall("user32.dll", "int", "GetWindowTextW", "hwnd", $hWnd, "LPTSTR ", $T, "int", 255) ; not work
            $T = "Test"
            ;**********************************
            ;        Draw our control
            ;**********************************

            Local $hDC = BeginPaint($hWnd, $ps)
;~          GetTextExtentPoint32(hDC, T , LEN(T),@Size)    ' Get caption size
            GetTextExtentPoint32($hDC, $T, StringLen($T), $Size)

            $iR = 30
            $iG = 90
            $iB = 90
            Draw_Gradient($hDC, $iX, $iY, $iW, $iH, $iR, $iG, $iB)
            SetBkMode($hDC, $TRANSPARENT)

            If $bBtnDown Then
;~              SetTextColor(hDC,_RGB(255,0,0))
                SetTextColor($hDC, Dec(0xFF0000))
                TextOut($hDC, $XCtr-($Size.cx/2)+1, $YCtr-($Size.cy/2)+1, $T)

            Else
;~              SetTextColor(hDC,_RGB(0,0,255))
                SetTextColor($hDC, Dec(0x0000FF))
                TextOut($hDC, $XCtr-$Size.cx/2, $YCtr-$Size.cy/2, $T)


            EndIf
            EndPaint($hWnd, $ps)

;~          EXIT FUNCTION
;~          Return 0

        Case $WM_LBUTTONUP
            If $hWnd = $hCaptured Then
                ReleaseCapture()
                $bBtnDown = False
                InvalidateRect($hWnd, 0, 0)
                Local $hParent = GetParent($hWnd)
;~              SendMessage(hParent,WM_COMMAND,MAKELONG(GetWindowLong(hWnd,GWL_ID), BN_CLICKED),Cast(LONG,hWnd))
                DllCall("user32.dll", "LRESULT", "SendMessageW", _
                        "hwnd",     $hParent, _
                        "uint",     $WM_COMMAND, _
                        "WPARAM",   _WinAPI_MakeLong(_WinAPI_GetWindowLong($hWnd, $GWL_ID), $BN_CLICKED), _
                        "LPARAM",   $hWnd)
            EndIf
;~          EXIT FUNCTION
            Return 0

        Case $WM_LBUTTONDOWN
            SetCapture($hWnd)
            $hCaptured = $hWnd
            $bBtnDown = True
            SetFocus($hWnd)
            InvalidateRect($hWnd, 0, False)

;~          EXIT FUNCTION
            Return 0

        Case $WM_MOUSEMOVE
            If $bBtnDown Then
                If IsMouseOver($hWnd) Then
                    $bBtnDown = True
                    InvalidateRect($hWnd, 0, False)
                ELSE
                    ReleaseCapture()
                    $bBtnDown = False
                    InvalidateRect($hWnd, 0, False)
                EndIf
            EndIf

;~          EXIT FUNCTION
;~          Return 0

        Case $WM_MOVING
            ReleaseCapture()
            $bBtnDown = False
            InvalidateRect($hWnd, 0, False)

;~          EXIT FUNCTION
;~          Return 0

        Case $WM_SIZE
            ReleaseCapture()
            $bBtnDown = False
            InvalidateRect($hWnd, 0, False)

;~          EXIT FUNCTION
;~          Return 0

    EndSwitch
;~  Return _WinAPI_DefWindowProc($hWnd, $iMsg, $wParam, $lParam)
    Return DllCall("user32.dll", "lresult", "DefWindowProcW", "hwnd", $hWnd, "uint", $iMsg, "wparam", $wParam, _
            "lparam", $lParam)[0]
EndFunc

;~ SUB Draw_Gradient (hdc as HDC, x  As Integer, y  As integer, w  As integer, h  As Integer, r  As integer, g  As integer, b As integer)
Func Draw_Gradient($hDC, $iX, $iY, $iW, $iH, $iR, $iG, $iB)
;~  DIM  Vert(2) AS TRIVERTEX
    Local $Vert[2]
    $Vert[0] = DllStructCreate($_tagTrivertex)
    $Vert[1] = DllStructCreate($_tagTrivertex)
;~  DIM  Rect    AS GRADIENT_RECT
    Local $Rect = DllStructCreate($_tagGradient_Rect)

;~  Vert (0).x          =   0
    $Vert[0].x          =   0
;~  Vert (0).y          =   0
    $Vert[0].y          =   0
;~  Vert (0).Red        =   65535-(65535-(r*256))
    $Vert[0].Red        =   65535-(65535-($iR*256))
;~  Vert (0).Green      =   65535-(65535-(g*256))
    $Vert[0].Green      =   65535-(65535-($iG*256))
;~  Vert (0).Blue       =   65535-(65535-(b*256))
    $Vert[0].Blue       =   65535-(65535-($iB*256))
;~  Vert (0).Alpha      =   0
    $Vert[0].Alpha      =   0
;~ '******************************************************
;~  Vert (1).x          =    w
    $Vert[1].x          =    $iW
;~  Vert (1).y          =    h/2
    $Vert[1].y          =    $iH/2
;~  Vert (1).Red        =    65535-(65535-(255*256))
    $Vert[1].Red        =    65535-(65535-(255*256))
;~  Vert (1).Green      =    65535-(65535-(255*256))
    $Vert[1].Green      =    65535-(65535-(255*256))
;~  Vert (1).Blue       =    65535-(65535-(255*256))
    $Vert[1].Blue       =    65535-(65535-(255*256))
;~  Vert (1).Alpha      =    0
    $Vert[1].Alpha      =    0
;~ '******************************************************
;~  Rect.UpperLeft      =    0
    $Rect.UpperLeft     =    0
;~  Rect.LowerRight     =    1
    $Rect.LowerRight    =    1
;~ '******************************************************
;~  Gradientfill(hdc,@Vert(0),2,@Rect,1,GRADIENT_FILL_RECT_V)
    GradientFill($hDC, $Vert[0], 2, $Rect, 1, $GRADIENT_FILL_RECT_V)
;~ '******************************************************
;~  Vert (0).x          =    0
    $Vert[0].x          =    0
;~  Vert (0).y          =    h/2
    $Vert[0].y          =    $iH/2
;~  Vert (0).Red        =    65535-(65535-(255*256))
    $Vert[0].Red        =    65535-(65535-(255*256))
;~  Vert (0).Green      =    65535-(65535-(255*256))
    $Vert[0].Green      =    65535-(65535-(255*256))
;~  Vert (0).Blue       =    65535-(65535-(255*256))
    $Vert[0].Blue       =    65535-(65535-(255*256))
;~  Vert (0).Alpha      =    0
    $Vert[0].Alpha      =    0
;~ '******************************************************
;~  Vert (1).x          =    w
    $Vert[1].x          =    $iW
;~  Vert (1).y          =    h
    $Vert[1].y          =    $iH
;~  Vert (1).Red        =    65535-(65535-(r*256))
    $Vert[1].Red        =    65535-(65535-($iR*256))
;~  Vert (1).Green      =    65535-(65535-(g*256))
    $Vert[1].Green      =    65535-(65535-($iG*256))
;~  Vert (1).Blue       =    65535-(65535-(b*256))
    $Vert[1].Blue       =    65535-(65535-($iB*256))
;~  Vert (1).Alpha      =    0
    $Vert[1].Alpha      =    0
;~ '******************************************************
;~  Rect.UpperLeft      =    0
    $Rect.UpperLeft     =    0
;~  Rect.LowerRight     =    1
    $Rect.LowerRight    =    1
;~ '******************************************************
;~  Gradientfill(hdc,@Vert(0),2,@Rect,1,GRADIENT_FILL_RECT_V)
    GradientFill($hDC, $Vert[0], 2, $Rect, 1, $GRADIENT_FILL_RECT_V)
;~ END SUB
EndFunc

Func IsMouseOver($hWnd)
    Local $Rect = DllStructCreate($_tagRect)
    Local $Pt = DllStructCreate($_tagPoint)
    GetWindowRect ($hWnd, $Rect)
    GetCursorPos($Pt)
    Return PtInRect($Rect, $Pt)
EndFunc

Func _RGB($iR, $iG, $iB)
    Return ('0x' & Hex($iR, 2) & Hex($iG, 2) & Hex($iB, 2))
EndFunc

Func _BGR($iB, $iG, $iR)
    Return ('0x' & Hex($iB, 2) & Hex($iG, 2) & Hex($iR, 2))
EndFunc

Func InvalidateRect($hWnd, $tRECT = 0, $bErase = True)
    DllCall("user32.dll", "bool", "InvalidateRect", "hwnd", $hWnd, "struct*", $tRECT, "bool", $bErase)
EndFunc

Func SetFocus($hWnd)
    DllCall("user32.dll", "hwnd", "SetFocus", "hwnd", $hWnd)
EndFunc

Func PtInRect($tRect, $tPoint)
    Local $aRet = DllCall("user32.dll", "bool", "PtInRect", "ptr", DllStructGetPtr($tRect), "struct*", $tPoint)
    If IsArray($aRet) Then Return $aRet[0]
    Return False
EndFunc

Func GetWindowRect($hWnd, ByRef $tRect)
    DllCall("user32.dll", "bool", "GetWindowRect", "hwnd", $hWnd, "struct*", $tRect)
EndFunc

Func GetCursorPos(ByRef $tPoint)
    DllCall("user32.dll", "bool", "GetCursorPos", "struct*", $tPoint)
EndFunc

Func SetCapture($hWnd)
    DllCall("user32.dll", "hwnd", "SetCapture", "hwnd", $hWnd)
EndFunc

Func ReleaseCapture()
    DllCall("user32.dll", "bool", "ReleaseCapture")
EndFunc

Func SetTextColor($hDC, $iColor)
    DllCall("gdi32.dll", "INT", "SetTextColor", "handle", $hDC, "INT", $iColor)
EndFunc

Func BeginPaint($hWnd, ByRef $tPAINTSTRUCT)
    $tPAINTSTRUCT = DllStructCreate($tagPAINTSTRUCT)
    Local $aRet = DllCall('user32.dll', 'handle', 'BeginPaint', 'hwnd', $hWnd, 'struct*', $tPAINTSTRUCT)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aRet[0]
EndFunc

Func GetTextExtentPoint32($hDC, $sText, $iTextLen, ByRef $tSize)
    DllCall("gdi32.dll", "bool", "GetTextExtentPoint32W", "handle", $hDC, "wstr", $sText, "int", $iTextLen, "struct*", $tSize)
EndFunc

Func GradientFill($hDC, $tVertex, $nVertex, $tMesh, $nMesh, $ulMode)
    DllCall("Msimg32.dll", "BOOL", "GradientFill", _
            "handle",   $hDC, _
            "struct*",  $tVertex, _
            "ulong",    $nVertex, _
            "struct*",  $tMesh, _
            "ulong",    $nMesh, _
            "ulong",    $ulMode)
EndFunc

Func GetParent($hWnd)
    Local $aResult = DllCall("user32.dll", "hwnd", "GetParent", "hwnd", $hWnd)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aResult[0]
EndFunc

Func SetBkMode($hDC, $iBkMode)
    Local $aResult = DllCall("gdi32.dll", "int", "SetBkMode", "handle", $hDC, "int", $iBkMode)
    If @error Then Return SetError(@error, @extended, 0)

    Return $aResult[0]
EndFunc

Func EndPaint($hWnd, ByRef $tPAINTSTRUCT)
    Local $aRet = DllCall('user32.dll', 'bool', 'EndPaint', 'hwnd', $hWnd, 'struct*', $tPAINTSTRUCT)
    If @error Then Return SetError(@error, @extended, False)
    Return $aRet[0]
EndFunc

Func GetClientRect($hWnd, ByRef $tRect)
    Local $aRet = DllCall("user32.dll", "bool", "GetClientRect", "hwnd", $hWnd, "struct*", $tRect)
    If @error Or Not $aRet[0] Then Return SetError(@error + 10, @extended, 0)
    Return $tRect
EndFunc

Func TextOut($hDC, $iX, $iY, $sText, $iTextLen = Default)
    If $iTextLen = Default Then $iTextLen = StringLen($sText)
    DllCall('gdi32.dll', 'bool', 'TextOutW', 'handle', $hDC, 'int', $iX, 'int', $iY, 'wstr', $sText, 'int', $iTextLen)
EndFunc

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...