GUIGetCursorInfo mit GDI+

  • Hallo,

    ich habe ein GDI+ Polygon ( Dreieck ) und möchte, wenn sich der Mauszeiger über dem Dreieck befindet, dass sich dann eine MassageBox auftut. Mit GUIGetCursorInfo habe cih es noch nciht hinbekommen, geht das überhaupt, und wenn nicht, gibt es eine andere Möglichkeit?

    mfg
    hauke96

  • Sofern du die Grundrechenarten beherrschst, solltest du in der Lage sein, zu überprüfen ob sich die Koordinaten des Cursors innerhalb eines bestimmten Rechtecks befinden. Falls du aber wirklich die genaue Fläche des Dreiecks übrprüfen willst, hätte ich hier noch ein altes Testscript von mir. Das funktioniert mit allen möglichen Formen. ;) Allerdings benötigst du die GDIP.au3.

    Spoiler anzeigen
    [autoit]

    #include <GDIP.au3>
    #include <GUIConstants.au3>
    #include <Misc.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt("GUIOnEventMode", 1)

    [/autoit] [autoit][/autoit] [autoit]

    $iGUIColorBG = 0xFFFFFFFF
    $iGUIWidth = 400
    $iGUIHeight = 400

    [/autoit] [autoit][/autoit] [autoit]

    $hWnd = GUICreate("Test", $iGUIWidth, $iGUIHeight)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_Startup()

    [/autoit] [autoit][/autoit] [autoit]

    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hWnd)
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics($iGUIWidth, $iGUIHeight, $hGraphic)
    $hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    _GDIPlus_GraphicsSetSmoothingMode($hBuffer, 2)

    [/autoit] [autoit][/autoit] [autoit]

    $hPenRed = _GDIPlus_PenCreate(0xFFFF0000)
    $hPenGreen = _GDIPlus_PenCreate(0xFF00FF00)

    [/autoit] [autoit][/autoit] [autoit]

    $hPath = _GDIPlus_PathCreate()
    _GDIPlus_PathAddLine($hPath, 50, 50, 100, 50)
    _GDIPlus_PathAddLine($hPath, 100, 50, 75, 100)
    _GDIPlus_PathAddLine($hPath, 75, 100, 50, 50)

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_GraphicsDrawPath($hGraphic, $hPath)

    [/autoit] [autoit][/autoit] [autoit]

    $hRegion = _GDIPlus_RegionCreateFromPath($hPath)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")

    [/autoit] [autoit][/autoit] [autoit]

    While Sleep(20)
    _GDIPlus_GraphicsClear($hBuffer, $iGUIColorBG)

    [/autoit] [autoit][/autoit] [autoit]

    $aMousePos = GUIGetCursorInfo()
    Switch _GDIPlus_RegionIsVisiblePoint($hRegion, $aMousePos[0], $aMousePos[1], $hBuffer)
    Case True
    _GDIPlus_GraphicsDrawPath($hBuffer, $hPath, $hPenGreen)
    Case False
    _GDIPlus_GraphicsDrawPath($hBuffer, $hPath, $hPenRed)
    EndSwitch

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 0, 0, $iGUIWidth, $iGUIHeight)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _Exit()
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_GraphicsDispose($hBuffer)
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_RegionDispose($hRegion)
    _GDIPlus_PathDispose($hPath)
    _GDIPlus_PenDispose($hPenGreen)
    _GDIPlus_PenDispose($hPenRed)
    _GDIPlus_Shutdown()
    Exit
    EndFunc

    [/autoit]