Jump to content

CreateWindowFromShapes


Andreik
 Share

Recommended Posts

This is a nice example of window created from shapes using written by Authenticity.

#include-once
#include <GDIPlus.au3>
#include <GDIP.au3>

Global $HEAD[5] = ["Ellipse",0,0,399,399]
Global $EYE_LEFT[5] = ["Ellipse",75,100,50,50]
Global $EYE_RIGHT[5] = ["Ellipse",275,100,50,50]
Global $NOSE_POINTS[6][2] = [[5,0],[200,150],[185,200],[200,250],[215,200],[200,150]]
Global $NOSE[2] = ["Polygon",$NOSE_POINTS]
Global $MOUTH[9] = ["Bezier",100,300,150,350,250,350,300,300]
Global $TOOTH_LEFT[5] = ["Rectangle",175,300,20,20]
Global $TOOTH_RIGHT[5] = ["Rectangle",205,300,20,20]
Global $SHAPES[8] = [7,$HEAD,$EYE_LEFT,$EYE_RIGHT,$NOSE,$MOUTH,$TOOTH_LEFT,$TOOTH_RIGHT]

$GUI = CreateWindowFromShapes("Example",400,400,$SHAPES)
GUISetBkColor(0x000080,$GUI)
GUISetState(@SW_SHOW,$GUI)
While True
    Switch GUIGetMsg()
        Case -3
            Exit
        Case -7
            _SendMessage($GUI,0x0112,0xF012,0)
    EndSwitch
    Sleep(10)
WEnd

Func CreateWindowFromShapes($sTitle,$iWidth,$iHeight,$aShape)
    Local $aCurrentShape
    _GDIPlus_Startup()
    Local $hWnd = GUICreate($sTitle,$iWidth,$iHeight,Default,Default,0x80000000)
    Local $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hWnd)
    Local $hPath = _GDIPlus_PathCreate()
    If IsArray($aShape) Then
        For $iIndex = 1 To $aShape[0]
            If IsArray($aShape[$iIndex]) Then
                $aCurrentShape = $aShape[$iIndex]
                Switch $aCurrentShape[0]
                    Case "Ellipse"
                        _GDIPlus_PathAddEllipse($hPath,$aCurrentShape[1],$aCurrentShape[2],$aCurrentShape[3],$aCurrentShape[4])
                    Case "Pie"
                        _GDIPlus_PathAddPie($hPath,$aCurrentShape[1],$aCurrentShape[2],$aCurrentShape[3],$aCurrentShape[4],$aCurrentShape[5],$aCurrentShape[6])
                    Case "Polygon"
                        _GDIPlus_PathAddPolygon($hPath,$aCurrentShape[1])
                    Case "Rectangle"
                        _GDIPlus_PathAddRectangle($hPath,$aCurrentShape[1],$aCurrentShape[2],$aCurrentShape[3],$aCurrentShape[4])
                    Case "Bezier"
                        _GDIPlus_PathAddBezier($hPath,$aCurrentShape[1],$aCurrentShape[2],$aCurrentShape[3],$aCurrentShape[4],$aCurrentShape[5],$aCurrentShape[6],$aCurrentShape[7],$aCurrentShape[8])
                EndSwitch
            EndIf
        Next
    EndIf
    Local $pRegion = _GDIPlus_RegionCreateFromPath($hPath)
    Local $hRegion = _GDIPlus_RegionGetHRgn($pRegion,$hGraphics)
    DllCall("user32.dll","long","SetWindowRgn","hwnd",$hWnd,"hwnd",$hRegion,"int",1)
    _GDIPlus_PathDispose($hPath)
    _GDIPlus_RegionDispose($pRegion)
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_Shutdown()
    Return $hWnd
EndFunc

Enjoy!

Edited by Andreik

When the words fail... music speaks.

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

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...