Opaque DragImageComponent sees itself


#1

If an opaque DragImageComponent is used (one that returns true from IsOpaque(), which happens on systems without transparent window support or if manually set), drop targets do not see the drop enter / drop exit messages.

The reason is that the DragImageComponent ‘sees itself’ during DragImageComponent::findTarget. In other words, it is finding its own HWND. The chain of calls is as follows:

hit = Desktop::getInstance().findComponentAt (screenX, screenY); Component::getComponentAt() Component::contains() Win32ComponentPeer::contains()

in Win32ComponentPeer::contains(), WindowFromPoint returns the HWND of the DragImageComponent heavyweight peer, rather than the HWND behind it.

If the DragImageComponent HWND has the layered style set (for transparency) as a consequence of having returned false for IsOpaque(), WindowFromPoint does not find it in the call chain above and instead correctly finds the HWND behind the image window being dragged.


#2

Thanks, I’ll look into that.


#3

The fix for this other problem seemed to fix this one too:

http://www.rawmaterialsoftware.com/juceforum/viewtopic.php?t=4423