Bild als Mauscurser

  • Heyho.
    Wie die Überschrift schon sagt, suche ich nach einer guten & rel. simplen Möglichkeit ein Bild als Mauscurser zu benutzen.
    Dieser Mauscurser sollte dann allerdings nur in der GUI das Bild sein.

  • ist mir auch aufgefallen, trotzdem danke :)

    Das löst aber nicht mein Problem, ich will ja, dass ich eine png-Datei als cursor benutzen kann und das auch nur in der gui..

  • ich hab jetzt einfach mal einen standard-cursor genommen... Bei "normalen" Gui's klappt es einwandfrei.
    Hierbei allerdings nicht.. wie kann ich das Problem beheben?

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>
    #include <GDIPlus.au3>
    #include <WinAPI.au3>

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

    Global $pngSrcGUIBK = "map.jpg"
    Global Const $AC_SRC_ALPHA = 1

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

    GUISetCursor(3)

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

    $GUI = GUICreate("", 942, 528, -1, -1, $WS_POPUP, BitOR($WS_EX_CONTROLPARENT, $WS_EX_LAYERED))
    _GDIPlus_Startup()
    Global $hImageGUIBK = _GDIPlus_ImageLoadFromFile($pngSrcGUIBK)
    SetBitmap($GUI, $hImageGUIBK, 255)

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

    $GUIsub = GUICreate("", 942, 528, -1, -1, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD), $GUI)
    GUISetBkColor(0x585858)
    $close = GUICtrlCreatePic("rotesx2.jpg", 293, 6, 19, 17)
    _WinAPI_SetLayeredWindowAttributes($GUIsub, 0x585858)

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

    $Button1 = GUICtrlCreateButton("", 48, 40, 11, 9)
    GUICtrlSetBkColor(-1, 0x000000)
    $Button2 = GUICtrlCreateButton("", 120, 152, 11, 9)
    GUICtrlSetBkColor(-1, 0x000000)
    $Button3 = GUICtrlCreateButton("", 240, 48, 11, 9)
    GUICtrlSetBkColor(-1, 0x000000)
    $Button4 = GUICtrlCreateButton("", 136, 8, 11, 9)
    GUICtrlSetBkColor(-1, 0x000000)
    $Button5 = GUICtrlCreateButton("", 8, 264, 11, 9)
    GUICtrlSetBkColor(-1, 0x000000)
    $Button6 = GUICtrlCreateButton("", 152, 224, 11, 9)
    GUICtrlSetBkColor(-1, 0x000000)
    $Button7 = GUICtrlCreateButton("", 272, 248, 11, 9)
    GUICtrlSetBkColor(-1, 0x000000)
    $Button8 = GUICtrlCreateButton("", 160, 72, 11, 9)
    GUICtrlSetBkColor(-1, 0x000000)
    $Button9 = GUICtrlCreateButton("", 272, 128, 11, 9)
    GUICtrlSetBkColor(-1, 0x000000)
    $Button10 = GUICtrlCreateButton("", 24, 160, 11, 9)
    GUICtrlSetBkColor(-1, 0x000000)

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

    GUISetState(@SW_SHOW, $GUI)
    GUISetState(@SW_SHOW, $GUIsub)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $close
    Exit
    Case $Button1
    Exit
    Case $Button2
    Exit
    Case $Button3
    Exit
    Case $Button4
    Exit
    Case $Button5
    Exit
    Case $Button6
    Exit
    Case $Button7
    Exit
    Case $Button8
    Exit
    Case $Button9
    Exit
    Case $Button10
    Exit

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

    EndSwitch
    WEnd

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

    Func SetBitmap($hGUI, $hImage, $iOpacity)
    Local $hScrDC, $hMemDC, $hBitmap, $hOld, $pSize, $tSize, $pSource, $tSource, $pBlend, $tBlend

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

    $hScrDC = _WinAPI_GetDC(0)
    $hMemDC = _WinAPI_CreateCompatibleDC($hScrDC)
    $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
    $hOld = _WinAPI_SelectObject($hMemDC, $hBitmap)
    $tSize = DllStructCreate($tagSIZE)
    $pSize = DllStructGetPtr($tSize)
    DllStructSetData($tSize, "X", _GDIPlus_ImageGetWidth($hImage))
    DllStructSetData($tSize, "Y", _GDIPlus_ImageGetHeight($hImage))
    $tSource = DllStructCreate($tagPOINT)
    $pSource = DllStructGetPtr($tSource)
    $tBlend = DllStructCreate($tagBLENDFUNCTION)
    $pBlend = DllStructGetPtr($tBlend)
    DllStructSetData($tBlend, "Alpha", $iOpacity)
    DllStructSetData($tBlend, "Format", $AC_SRC_ALPHA)
    _WinAPI_UpdateLayeredWindow($hGUI, $hScrDC, 0, $pSize, $hMemDC, $pSource, 0, $pBlend, $ULW_ALPHA)
    _WinAPI_ReleaseDC(0, $hScrDC)
    _WinAPI_SelectObject($hMemDC, $hOld)
    _WinAPI_DeleteObject($hBitmap)
    _WinAPI_DeleteDC($hMemDC)
    EndFunc

    [/autoit]
  • ich kann dir ne andere art empfehlen, dazu musst du dein JPG aber in ein anderes Format konvertieren
    in Ico, Ani oder Cur

    [autoit]

    Func _LoadCursor($sLoadCursor_Path, $hLoadCursor_GUI)
    Local $hCursor = DllCall("user32.dll", "hwnd", "LoadCursorFromFile", "str", $sLoadCursor_Path)
    If $hCursor[0] <> 0 Then DllCall("user32.dll", "hwnd", "SetClassLong", "hwnd", $hLoadCursor_GUI, "int", -12, "hwnd", $hCursor[0])
    EndFunc ;==>_LoadCursor

    [/autoit]


    $sLoadCursor_Path = der Pfad zum Cursor
    $hLoadCursor_GUI = das was GUICreate() zurückgibt wenn du es für die GUI setzen willst oder das Ctrl Handel um es für ein Ctrl zu setzen
    Ctrlhandel ist nicht das was GUICtrlCreate... zurückgibt! siehe GUICtrlGetHandle()

    man kann den curser aber nur für klassen setzen
    also EIN Cursor für ALLE Buttons nicht für jeden button ein anderen Cursor

    mfg

    PS: siehe in meiner signatur im Spoiler da ist ein nützlicher Link zu dem thema ;)