Fenster ohne Caption erstellen
-
hi,
wie kann ich ein fenster ohne Titelleiste, Rand, Hintergrund etc. erstellen? dass man also ohne etwas gezeichnet zu haben rein gar nichts von dem fenster sieht? ich will nämlich einfach nur ein paar einfache formen auf den desktop zeichnen.
MfG, Herr-Vorragend
-
Kannst dein Programm ja nur im TRay laden und dann von da aus auf den DesktopnDC zeichen...
-
hm, anders geht nicht? wär nämlich jetzt viel umständlicher

-
WS_POPUP als Fensterstil nehmen.
Transparenz kriegt man sehr einfach mit WS_EX_LAYERED hin.
Mit SetLayeredWindowAttributes() kann man dann eine Farbe setzen, die transparent sein soll. Alles was man dann in der WM_PAINT() mit der Farbe zeichnet bleibt transparent.Alternativ ginge auch mit einer Region alles transparent zu setzen und die dann via SetWindowRgn() setzen, was aber aufwendiger ist.
-
k, vielen dank, wunderbar, genau das hab ich gesucht.
jetzt hab ich noch 2 frage:
- wie mache ich, dass das fenster keinen hintergrund hat? also auch nicht weiß, sondern einfach transparent
- wie verhindere ich, dass mein fenster beim drücken auf den "alle fenster minimieren" button minimiert wird?
-
Transparenz:
myWnd = CreateWindowEx(WS_EX_LAYERED|WS_EX_NOACTIVATE|WS_EX_TOPMOST,"blupp.class", "blupp", WS_POPUP, 10, 15, 200, 30, NULL, NULL, hInstance, NULL); if (!myWnd) { return 0; } SetLayeredWindowAttributes(myWnd,RGB(255,255,255),0,LWA_COLORKEY);...alles was weiß gezeichnet wird, ist hinterher transparent.
Funktioniert aber nur ab Win2k
Edit: Und funktioniert nicht bei Child-Windows!"Alle Fenster minimieren" kannst du nicht verhindern, aber sofort wieder rückgängig machen - Du kriegst eine WM_SIZE-Message.
-
WNDCLASS wc;
wc.hbrBackground= (HBRUSH)GetStockObject(WHITE_BRUSH);auf
wc.hbrBackground= NULL;
setzten, das hab ich früher mal urtümlich gemacht, und hab micht gewundert warum dort ein Renster ohne inhalt gezeichnet wurde ^^
-
wc.hbrBackground= NULL;
funktioniert nicht, dann wirds so komisch schwarz. trotzdem danke
@geeky: genau das hab ich gesucht. nochmals danke ^^
zum minimieren:
hab 2 dinge versucht, funktionieren beide nicht:
- direkt bei WM_SIZE die funktion ShowWindow(hWnd, SW_SHOW) aufrufen
- bei WM_SIZE eine selbst definierte nachricht WM_SHOW senden, die ShowWindow(hWnd, SW_SHOW) aufruftWann soll ich das fenster denn anzeigen lassen?
MfG, Herr-Vorragend
-
geht es denn überhaupt?
-
also mit folgendem ausschnitt bekomm ich beim drücken auf den "Alle fenster minimieren"-button keine WM_SIZE nachricht:
... WM_SIZE: MessageBox(NULL, "bla", "blabla", MB_OK); return 0; ...
-
Hmm, vielleicht wird WM_WINDOWPOSCHANGED gesendet ?
Prüf mal einfach via Spy++ was Windows da so ans Fenster sendet
-
hm, also irgendwie bekomm ich da gar keine nachricht, selbst folgendes hat keinen effekt:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { ShowWindow(hWnd, SW_SHOW); return DefWindowProc(hWnd, message, wParam, lParam); }
-
das problem besteht übrigens immernoch ^^
-
WM_SIZE ist die falsche Message, du muss folgendes abfangen:
if (msg==WM_SYSCOMMAND && wParam==SC_MINIMIZE) {
...
}
-
also dieser code nützt auch nichts

case WM_SYSCOMMAND: if (wParam == SC_MINIMIZE) MessageBox(NULL, "a", "b", MB_OK); return 0;das heißt es kommt keine message box...
-
hm, ich hab eben mal mit spy++ geschaut, irgendwie bekomm ich gar keine nachricht, das kanns doch nicht sein, oder?!
-
Also irgenedwas ist bei die kpmisch ich erhalte jede Menge Nachrichten:
WM_WINDOWPOSCHANGING
WM_GETMINMAXINFO
WM_NCCALCSIZE
WM_WINDOWPOSCHANGED
WM_MOVE
WM_SIZE
-
hm, stimmt, andere fenster bekommen mehrere nachrichten....also ich erstelle mein fenster so:
hWnd = CreateWindowEx( WS_EX_LAYERED | WS_EX_NOACTIVATE, szAppName, "MHDesktop", WS_POPUP, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);und später benutze ich noch
SetWindowPos(hWnd, HWND_BOTTOM, 674, 50, 300, 200, SWP_NOACTIVATE);
-
hat denn noch nie jemand ein ähnliches problem gehabt? das eigentliche problem ist ja, dass mein fenster zu wenige nachrichten bekommt...
-
ein totes fenster sendet für gewöhnlich auch keine nachrichten:
SWP_NOACTIVATE Does not activate the window. If this flag is not set, the window is activated and moved to the top of either the topmost or non-topmost group (depending on the setting of the hWndInsertAfter parameter).