|
Before 1.1.16 we stored a WM_PAINT event in the
queue whenever we got an ExposeNotify for a window. We had some logic so
we'd never put more than one for any particular window in, and instead just
updated the existing region if one already existed, but we stored an actual
WM_PAINT in the queue and it was processed along with other events in
order.
Starting with 1.1.16 we matched MS behaviour. MS
uses the event queue only for keyboard/mouse events (I'm simplifying a
tad).
Many other messages are sent 'directly' to the
window procedure on Windows, via SendMessage (for example WM_WINDOWPOSCHANGED or
WM_SETFOCUS, etc).
WM_PAINT events are neither. They are returned via
GetMessage, but they don't come from the queue. Instead, GetMessage returns all
events from the queue, and once there are no more real events, it looks if there
are any windows with invalid content. If it firds one, it generates and returns
a WM_PAINT event for each of these windows, and so on. Starting with 1.1.16 our
driver behaves like that.
Around the same timeframe we also added
thread-specific message queues. That means that events events are stored in an
event queue associated with the thread that created the window, allowing
multiple message queues to run in parallel in the same app in multiple threads,
again matching MS.
Hope my explanation makes sense. If you still have
an old MSDN subscription, search for the "GetMessage and PeekMessage Internals"
article, MS seems to recently have removed it from their website or I would have
given you a link.
Cheers
Peter
-----Original Message-----
From: "Dennis Hayes" <[EMAIL PROTECTED]> To: <[email protected]> Date: Tuesday, August 01, 2006 04:17 Subject: [Mono-winforms-list] Question on release notes
|
_______________________________________________ Mono-winforms-list maillist - [email protected] http://lists.ximian.com/mailman/listinfo/mono-winforms-list
