Problems with WM_NCHITTEST and HTTRANSPARENT

Ove Kaaven ovehk at ping.uio.no
Wed Mar 14 15:37:26 CST 2001


I'm currently having problems with this situation:

Thread 1 owns some controls (modeless dialog box, actually)

Thread 2 owns a window that covers the dialog (let's say it's like a
"skin" or something...)

The window procedure for thread 2's window return HTTRANSPARENT in its
WM_NCHITTEST handler, so in theory mouse messages should get passed down
to thread 1's controls. Now, what happens is this...

-Mouse message arrives at thread 2
-TranslateMouseMsg calls WINPOS_WindowFromPoint
-WINPOS_WindowFromPoint sends a WM_NCHITTEST to window
-Window procedure returns HTTRANSPARENT
-WINPOS_WindowFromPoint finds the controls, and returns that
-TranslateMouseMsg wakes owner of controls (thread 1)

-Mouse message arrives at thread 1
-TranslateMouseMsg calls WINPOS_WindowFromPoint
-Since the transparent window is not owned by the current thread,
WINPOS_WindowFromPoint doesn't bother to send it a message, but rather
returns HTCLIENT directly
-WINPOS_WindowFromPoint returns the transparent window
-TranslateMouseMsg wakes thread 2

Repeat. This blocks all further mouse input processing, by the way...

Any ideas on how to solve this, or whether it's supposed to work at all? I
think I could fix some games if this worked... otherwise I'll have to
think of some other way...





More information about the wine-devel mailing list