如何实现让一个弹出式窗口(在前)随一个子窗口(在后)移动和改变大小

chouyj008 2016-07-04 08:48:44
大家好,我在做项目时,遇到下面这样的一个问题,向大家求助。
我现在在做一个无人机方面的软件,编写了两个控件:一个是基于libvlc开发的视频播放控件,用于播放机载平台采集的视频信号;另一个是一个基于OpenGL开发的仪表控件,用于显示无人机的姿态、高度、速度等,现希望将仪表控件背景透明后,叠加到视频播放控件前面,构成类似于飞行游戏的第一人称主视角(FPV)。在尝试使用SetWindowRgn()函数等效果不佳后,仪表控件的背景透明使用的SetLayeredWindowAttributes()函数来实现,透明效果不错,但问题是这时候仪表控件不能为子窗口,只有采用的是弹出式窗口(WS_POPUP)作为仪表控件的窗体,因此也带来了如何保证仪表控件与视频播放控件大小相同,始终位于它的前面的问题。这对于对话框程序没什么问题,在包含视频播放控件的对话框中响应WM_SIZE和WM_MOVE消息就好了,但在软件中我把视频播放控件作为子窗口,放入了一个CDockablePane子类窗口中,当我点住CDockablePane子类窗口(实际上是的它的父窗口Mini Frame)的标题栏移动它时,我发现CDockablePane子类窗口根本接收不到WM_MOVE消息(这个我能想通,大约是因为CDockablePane子类窗口相对于其父窗口位置没有发生改变),因此也就没有办法通知证仪表控件跟随视频播放控件,请问我该如何办才能实现我想要的效果呢?
另外,当我把视频播放控件放在对话框中来实现前面的效果时,因为在对话框的OnInitialDialog()中创建仪表控件时,将它扥hwndParent设置为CDockablePane子类窗口,导致仪表控件成为被拥有窗口(owned window),对话框窗口为拥有窗口(owner window),我发现仪表控件会屏蔽掉对话框的一些消息,例如WM_LBUTTONDOWN、WM_TIMER消息,应该如何让对话框能够正常接收这些消息呢?
这两个问题困扰了我很长时间,请大家不吝赐教!
...全文
139 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧