UpdateLayeredWindow und Error-Code 8

  • Hallo!
    Ich hab ein Problem mit UpdateLayeredWindow, es gibt False zurück und GetLastError gibt den Errorcode 8 (ERROR_NOT_ENOUGH_MEMORY, Not enough storage is available to process this command.), abder ich habe gerade mal die Hälfte des RAM besetzt und in einer anderen Programmiersprache klappt es eigentlich genauso. Das Bild habe ich mit GDI+ erstellt und dann als HBITMAP übergeben:


    Ich bedanke mich für jede Hilfe

  • Hi,


    ich kenne mich mit GDI+ leider nicht besonders gut aus. Aber ich sehe, daß Du die Bitmap mit SelectObject in den Gerätekontext wählst und anschließend die Bitmap löschst, indem Du den Destruktor der Bitmap-Klasse aufrufst. Böses Foul !
    Wenn Du ein GDI-Objekt in einen Gerätekontext wählst, dann musst Du am Ende, wenn Du mit deiner Zeichenaktion fertig bist die alte Bitmap wieder in den Gerätekontext wählen !
    Siehe Bemerkungen



    Gruß
    Greenhorn

    „Der erste Schritt, den jeder tun kann, ist, sich frei zu machen von dem Untertanengemüt.“
    ―Herbert Wehner

  • Hm, schwierig.


    Das Dein Compiler bei dieser Zeile nicht meckert wundert mich sehr:

    Code
    short k=UpdateLayeredWindow(hwnd,dc,NULL,&sz,cdc,&p,0,&blend,2);


    UpdateLayeredWindow gibt einen BOOL zurück (32bit).


    Code
    BOOL k=UpdateLayeredWindow(hwnd,dc,NULL,&sz,cdc,&p,0,&blend,2);



    Gruß
    Greenhorn

    „Der erste Schritt, den jeder tun kann, ist, sich frei zu machen von dem Untertanengemüt.“
    ―Herbert Wehner

  • Soweit ich weiß gibt es beide Möglichkeiten, voller Code:

  • Benutzt Du cl oder gcc ? Wahrscheinlich cl ...
    Der rotzt mir Dutzende Warnungen aus ...


    Werde es mir bei Gelegenheit etwas genauer ansehen.



    Gruß
    Greenhorn

    „Der erste Schritt, den jeder tun kann, ist, sich frei zu machen von dem Untertanengemüt.“
    ―Herbert Wehner

  • Jetzt gibt es bei mir keine Fehlermeldungen mehr. Es passiert aber auch nichts wirklich.



  • Kleine Frage: Was soll der Code eigentlich anstellen ?


    Die Funktion BitBlt hat in der Nachrichtenschleife nichts verloren.



    Gruß
    Greenhorn

    „Der erste Schritt, den jeder tun kann, ist, sich frei zu machen von dem Untertanengemüt.“
    ―Herbert Wehner

  • Ja das hab ich vergessen auszuklammern, das ist die variante vor UpdateLayeredWindow gewesen. Das soll zum funktionieren von dem Code führen, damit ich meine Aero/OwnStyle UDF in C++ nach programmieren kann und so mit Threads die Überlastung aus der Welt schaffen


    Greenhorn:
    Warnungen warscheinlich von der fehlenden Gdiplus.lib, di habe ich nur in den Optionen.
    Ich benutz den Standard VC++ Compiler, ich weiß nicht genau welcher das ist. Warnungen kommen bei mir keine


    PS: Danke an euch schonmal


    EDIT: ( Marthog)
    Bei mir kommt immernoch der Errorcode 8, bei dir scheint aber ja auch nicht zu klappen, der Strich der eigentlich gemalt werden sollte ist ja nicht auf dem Bildschirm

  • So bin weitergekommen: UpdateLayeredWindow gibt Immernoch einen Fehler, aber GetLastError gibt 0 wieder. Die Lösung war CreateDIBSection! Leider wird eben trotzdem nichts angezeigt, wie gesagt UpdateLayeredWindow gibt immernoch 0 zurück.

    Zitat von MSDN

    If the function succeeds, the return value is nonzero.


    If the function fails, the return value is zero. To get extended error information, call GetLastError.


    Danke im Vorraus


    Code: