UpdateWindow Problem mit Childfenster

cyberds19

Grünschnabel
warum erhällt mein fenster kein command ?

winmain mein child

wndclass.lpfnWndProc=childProc;
wndclass.lpszClassName=L"testchild";
RegisterClassEx(&wndclass);

childtest=CreateWindow(L"test",
L"test",WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,300,600,NULL,NULL,hInstance,NULL);

im childproc unter create:
_beginthread(testthread,0,NULL);

im testthread:

UpdateWindow(childtest);

das fenste malt sich aber nicht neu. was ist da faul ?
 
Ein Fenster gehört immer einem Thread. Jeder Thread muss seine eigene MessagePump haben (MessagePump ist Peek/GetMessage, Translate-,DispatchMessage).

Wird das Childfenster in einem Thread erzeugt? Versuche das Childfenster im Hauptthread zu erzeugen, das löst vermutlich die meisten Probleme.
 
wie gesagt ich
erzeuge in der winmein ein hauptfenster und ein childfenster.
die werden sofort angezeigt.

habe nur eine getmessage.

wird das childfester aufgerufen ruft der im create nen _beginthread auf.

daher verstehe ich ja nicht, dass auch nen sendmessage(hwndchild,wm_paint,0,0,);
nicht funktioniert.
habe jetzt rausgefunden, dass einzigste auf was das fenster reagiert ist:
InvalidateRgn
das kann aber doch nicht die lösung sein oder ?
eigentlich müssten doch sendmessage und updatewindow auch funktionieren.
 
UpdateWindow löst ja nur etwas aus, wenn das Fenster als "dirty" markiert ist. Sprich, jemand hat drauf rumgemalt oder etwas verändert.

Ein InvalidateRect (oder InvalidateRgn) machen das. Allein das sollte genügen. Wenn du nach Invalidatexxx direkt UpdateWindow aufrufst, müsste das Fenster danach neu dargestellt sein.
 
ok danke das klappt.
ich habe immer gedacht, nen updatwindow veranlasst immer zum neuzeichen.

warum geht sendmessage(fenster,WM_PAINT,0,0) nicht ?
das müsste doch auch nen repaint auslösen oder ?
 
Jein, WM_PAINT sollte man nie manuell senden. WM_PAINT ist ja "nur" die Aufforderung an das HWND, sich selbst neu darzustellen. Windows übernimmt die neue Zeichnung aber nur, wenn das HWND irgendwo auch einen Bereich als "dirty" gekennzeichnet hat. Alles zur Optimierung :)
 
Zurück