_WinAPI_BitBlt auf von Bitmap auf GUI

  • Hi, ich versuche schon eine ganze Weile eine Bitmap in eine GUI zu laden.
    In diese Bitmap zeichne ich eine Linie (will mal hoffen,... Nachürfen kann ich's nichts weil mir nichts anzeigt ^^) und möchte diese Bitmap dann ausgeben.
    Hier mal mein Versuch:

    [autoit]

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

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

    $hGUI = GUICreate('', 800, 600)
    GUISetState()

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

    $hDC = _WinAPI_GetDC($hGUI)
    $hBitmap = _WinAPI_CreateBitmap(800, 600)
    _WinAPI_DrawLine($hBitmap, 0, 0, 800, 600)
    _WinAPI_BitBlt($hDC, 0, 0, 800, 600, $hBitmap, 0, 0, $SRCCOPY)

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

    While GUIGetMsg() <> -3
    WEnd

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

    _WinAPI_DeleteObject($hBitmap)
    _WinAPI_ReleaseDC($hGUI, $hDC)

    [/autoit]

    Kann mir evtl. jemand sagen was ich hier falsch mache? Ich steig da leider nicht ganz hinter ^^
    (Abgesehen davon dass ich eigentlich ein Gerätekontext für BitBlt benötige, allerdings weiß ich nicht wie man diesen aus einer Bitmap bezieht)

    Einmal editiert, zuletzt von Yjuq (16. Dezember 2013 um 15:47)

  • Du denkst viel zu kompliziert^^

    Spoiler anzeigen
    [autoit]

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

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

    $hGUI = GUICreate('', 800, 600)
    GUISetState()

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

    $hDC = _WinAPI_GetDC($hGUI)
    _WinAPI_DrawLine($hDC, 0, 0, 800, 600)
    ;_WinAPI_BitBlt($hDC, 0, 0, 800, 600, $hBitmap, 0, 0, $SRCCOPY)

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

    While GUIGetMsg() <> -3
    WEnd

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

    _WinAPI_ReleaseDC($hGUI, $hDC)

    [/autoit]
  • Andy hat recht :P. Dennoch habe ich dein Script entsprechend deiner Fragestellung überarbeitet. Wenn du in eine Bitmap zeichnen willst, dann musst du sie in einen DC kopieren und die Operation mit dem DC durchführen. Das gilt übrigens auch für die BitBlt Funktion, da muss auch ein DC eingetragen werden in dem sich die gewünschte Bitmap befindet, nicht das Handle zur Bitmap ;).

    Spoiler anzeigen
    [autoit]

    #include <WinAPI.au3>
    #include <FontConstants.au3>
    #include <WindowsConstants.au3>

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

    $hGUI = GUICreate('', 800, 600)
    GUISetState()

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

    $hDC_Window = _WinAPI_GetDC($hGUI)
    $hDC_Bitmap = _WinAPI_CreateCompatibleDC($hDC_Window)
    $hBitmap = _WinAPI_CreateCompatibleBitmap($hDC_Window, 800, 600)
    $hOldBitmap = _WinAPI_SelectObject($hDC_Bitmap, $hBitmap)

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

    $hPen = _WinAPI_CreatePen($PS_SOLID, 4, 0x0000FF)
    $hOldPen = _WinAPI_SelectObject($hDC_Bitmap, $hPen)

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

    _WinAPI_SetBkColor($hDC_Bitmap, 0x000000)

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

    _WinAPI_DrawLine($hDC_Bitmap, 0, 0, 800, 600)
    _WinAPI_BitBlt($hDC_Window, 0, 0, 800, 600, $hDC_Bitmap, 0, 0, $SRCCOPY)

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

    While GUIGetMsg() <> -3
    WEnd

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

    _WinAPI_SelectObject($hDC_Bitmap, $hOldBitmap)
    _WinAPI_SelectObject($hDC_Bitmap, $hOldPen)
    _WinAPI_DeleteObject($hBitmap)
    _WinAPI_DeleteDC($hDC_Bitmap)
    _WinAPI_ReleaseDC($hGUI, $hDC_Window)

    [/autoit]