Layered Window / UpdateLayeredWindow richtig nutzen
-
Hallo Leute,
ich würde gerne Layered Windows nutzen und habe da aber noch Probleme beim Verständniss. Ich lese dazu folgendes
http://msdn.microsoft.com/en-us/library/ms997507.aspxWenn ich das Richtig verstanden habe, so kann man Layered Windows auf zwei Arten nutzen.
Einmal mit UpdateLayeredWindow, welche die mächtigere Variante ist und nicht unbedingt auf WM_PAINT reagieren
braucht und einmal mit SetLayeredWindowAttributes.Jetzt weiss ich aber nicht genau, wie ich es nutzen kann. Dass ich mit WS_EX_LAYERED arbeiten muss ist mir klar.
Jedoch habe ich Verständnissprobleme, wenn es um Device Context und CompatibleDC und so geht.
Wäre echt super, wenn mir jemand diesen Teil etwas genauer erklären könnte.
-
need info schrieb:
Jedoch habe ich Verständnissprobleme, wenn es um Device Context und CompatibleDC und so geht.
Wäre echt super, wenn mir jemand diesen Teil etwas genauer erklären könnte.Dann solltest Du erstmal ein Tutoriral lesen, wie die Windows GUI Ausgabe allgemein funktioniert.
Deine Frage ist so allgemein, dass man se nicht beantworten kann.
-
Ich habe jetzt mal versucht, mit GDI+ ne PNG zu laden und diese dann mit UpdateLayeredWindow() anzuzeigen. Es kommt zwar kein fehler, jedoch wird das Bild
nicht angezeigt. Hier der entsprechende Code-Teil:hDScreen = GetDC(NULL); HDC hDc = CreateCompatibleDC(hDScreen); HBITMAP hBmp = CreateCompatibleBitmap(hDScreen, 400, 200); HBITMAP hBmpOld = (HBITMAP)SelectObject(hDc, hBmp); Image bild(L"Window.png"); Graphics grafik(hDc); grafik.DrawImage(&bild, 400, 200); BLENDFUNCTION blend; blend.BlendOp = AC_SRC_OVER; blend.SourceConstantAlpha = 255; blend.AlphaFormat = AC_SRC_ALPHA; blend.BlendFlags = 0; POINT ptPos = {0, 0}; SIZE sizeWnd = {400, 200}; POINT ptSrc = {0, 0}; UpdateLayeredWindow(hWnd, hDScreen, &ptPos, &sizeWnd, hDc, &ptSrc, 0, &blend, ULW_ALPHA);
Ich weiss, ich bin nicht der beste, jedoch will ich es unbedingt mal schaffen. Also bitte helft mir weiter, danke.
PS: Den Code oben habe ich zum Teil von einem Layered Window-Beispiel aus dem Netz übernommen, bei dem
es mit CImage gemacht wurde. Ich würde jedoch gerne mit GDI+ arbeiten.
-
Ich habe jetzt mal volgendes ausprobiert:
http://www.nuonsoft.com/blog/2009/05/27/how-to-use-updatelayeredwindow/comment-page-1/
Soweit geht auch alles, nur will ich nicht CImage sondern Image in Verbindung mit Graphics.DrawImage() nutzen.
Weiss jemand da weiter?Und noch eine frage. Ich kann das Fenster(also meine PNG) nicht verschieben. Gibt es da eine bequeme Lösung, oder muss
ich das alles komplett selber in der WndProc verarbeiten?
-
Was willst du denn eigentlich machen? Wenn Du uns das erklärst können wir dir weiterhelfen, andernfalls nicht.
Gruß
-
Für den Anfang möchte ich einem ganz normalen Fenster eine eigene GUI verpassen, also komplett selber zeichnen.
Also von:
http://s1.directupload.net/images/140512/ujyzd83h.jpgzu z.b. sowas:
http://s7.directupload.net/images/140512/t38rk94v.jpgIch hoffe, ihr versteht was ich meine. Später möchte ich dann auch noch eigene Steuerelemente einfügen. Aber erst mal das.