分层窗口和 COM 拖动图像
我有一个程序,可以显示主窗口、分层窗口并实现 COM 拖放。一般来说:
- 我创建一个普通的顶级窗口。
- 我使用 WS_EX_LAYERED 和 UpdateLayeredWindow/SetLayeredWindowAttributes 创建分层窗口(我都尝试过)。分层窗口位于 1 中创建的窗口之上。分层窗口不是子窗口。
- 然后,我通过 COM DoDragDrop 函数开始拖放。在 IDropSource::QueryContinueDrag 中,我调用 ImageList_BeginDrag、ImageList_DragMove 等。
问题是,COM 显示的拖动图像(它是图像列表中的图像)显示在分层窗口的下方而不是其上方。光标显示在分层窗口的顶部(如预期)。从下到上,我得到的分层是:
- 主窗口(底部)
- COM 拖动图像
- 分层窗口
- 光标(顶部)
它应该是:
- 主窗口(底部)
- 分层窗口
- COM 拖动图像
- 光标(顶部)
我已经应用了KB943326“在 Windows Server 2003 或 Windows XP 中,重叠的分层窗口未按正确的顺序显示”(“http ://support.microsoft.com/kb/943326”),但这没有什么区别。
我运行的是 XP SP2。
任何建议表示赞赏,因为我已经没有想法了......
谢谢, 苏格林
I have a program that displays a main window, a layered window and implements COM drag and drop. In general terms:
- I create a normal top level window.
- I create a layered window using WS_EX_LAYERED and UpdateLayeredWindow/SetLayeredWindowAttributes (I've tried both). The layered window sits on top of the window created in 1. The layered window is not a child window.
- I then begin a drag and drop via the COM DoDragDrop function. In IDropSource::QueryContinueDrag I call ImageList_BeginDrag, ImageList_DragMove and so on.
The problem is, the drag image that COM is showing (it's an image in the image list) is displayed underneath the layered window instead of on top of it. The cursor is displayed on top of the layered window (as expected). From bottom to top, the layering I am getting is:
- Main window (bottom)
- COM drag image
- Layered window
- Cursor (top)
What it should be is:
- Main window (bottom)
- Layered window
- COM drag image
- Cursor (top)
I have already applied KB943326 "Overlapping layered windows are not displayed in the correct order in Windows Server 2003 or in Windows XP" ("http://support.microsoft.com/kb/943326"), but it made no difference.
I am running XP SP2.
Any suggestions appreciated as I have run out of ideas...
Thanks,
Su Green
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论