.oisyn schreef op 15 januari 2004 @ 15:46:
curry: wordt de WM_PAINT niet direct aan de windowproc gegeven ipv eerst door de messagequeue te gaan? UpdateWindow () en RedrawWindow doen dat iig wel (en bovendien is het volgens mij een WM_NCPAINT)
Ik zat idd ook te denken aan het overlopen van de queue door SetWindowText, maar ik zie zo snel niet waardoor. Het is natuurlijk wel gewoon lompe code, zo elke iteratie de windowtext aanpassen

WM_PAINT en WM_NCPAINT gaan wel via de queue, maar op een speciale manier: er kan nooit meer dan 1 WM_*PAINT message in de queue staan (de eerste), en die trekt met BeginPaint alle pending rectangles open.
UpdateWindow en RedrawWindow zijn functies die juist bedoeld zijn om respectievelijk alle pending paints af te handelen en een immediate repaint te doen, en bypassen dus idd de message queue (en flushen eventueel aanwezige WM_*PAINT's).
SetWindowText is alleen een NCPAINT indien wHandle een overlapped window is, als wHandle een button of edit control is een gewone PAINT
En die queue loopt dus gewoon over, je krijgt iedere iteratie een WM_PAINT plus eventuele inputmessages. Als je dus tussen PeekMessage en SetWindowText erin slaagt om 2 toetsen in te drukken zal de bijbehorende WM_KEYDOWN van de 2e dus al nooit aankomen, en een WM_CHAR zal al helemaal nooit in de queue komen schat ik zo.