窗口最小化后发送WM_PAINT的问题

cyxcw1 2013-11-15 07:38:41
现在有一个需求,就是主窗体最小化后,窗体程序依然需要更新最小化后的view,即像主窗体发送WM_PAINT依然能相应view里的ondraw。

现在就发现,窗体最小化后,本来调用的Invalidate()后,不能调用Ondraw(),把窗体还原后才调用ondraw里的代码,是不是Invalidate()不能给非客户区发送WM_PAINT()?

有什么能更新非客户区的函数吗?
RedrawWindow函数尝试过了,以下这样用的,依然不行:

RedrawWindow(0, 0, RDW_INVALIDATE | RDW_FRAME);
...全文
298 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2013-12-16
  • 打赏
  • 举报
回复
您好 我是本版版主 此帖已多日无人关注 请您及时结帖 如您认为问题没有解决可按无满意结帖处理 另外本版设置了疑难问题汇总帖 并已在版面置顶 相关规定其帖子中有说明 您可以根据规定提交您帖子的链接 如您目前不想结帖只需回帖说明 我们会删除此结帖通知 见此回复三日内无回应 我们将强制结帖 相关规定详见界面界面版关于版主结帖工作的具体办法
worldy 2013-11-16
  • 打赏
  • 举报
回复
即使你能刷新也和播放器无关,影响不到播放器
cyxcw1 2013-11-16
  • 打赏
  • 举报
回复
引用 8 楼 worldy 的回复:
继续播放和窗口最小化没有什么关系吧?如果有,那么你这么折腾也是没有用,播放器之所以会停止播放是播放器代码检测到了窗口最小化而停止。你要到播放器的代码去改,或者播放器是否有什么控制参数能控制其在窗口最小化之后继续播放,摆弄窗口是没有用,它是被动者
我是看到有这么个函数RedrawWindow,里边的参数RDW_FRAME就是跟非客户区有关的,所以就想能不能直接刷新非客户区。 如果实在不行我再改底层吧。
worldy 2013-11-16
  • 打赏
  • 举报
回复
继续播放和窗口最小化没有什么关系吧?如果有,那么你这么折腾也是没有用,播放器之所以会停止播放是播放器代码检测到了窗口最小化而停止。你要到播放器的代码去改,或者播放器是否有什么控制参数能控制其在窗口最小化之后继续播放,摆弄窗口是没有用,它是被动者
cyxcw1 2013-11-16
  • 打赏
  • 举报
回复
引用 6 楼 worldy 的回复:
你的想法非常奇怪,都最小化,没有用户区,你要刷新什么?
就好像一个播放器,播放器处在播放状态,但是我把这个播放器最小化之后,它就自动停止播放了,我不希望这样。我希望的是这个播放器最小化后继续播放
worldy 2013-11-16
  • 打赏
  • 举报
回复
你的想法非常奇怪,都最小化,没有用户区,你要刷新什么?
cyxcw1 2013-11-16
  • 打赏
  • 举报
回复
引用 4 楼 worldy 的回复:
窗口最小化化之后,你想干嘛啊?
我这是一个图像播放的程序,我本来是想窗口最小化之后该程序依然能在后台播放图像,刷新view区域。 现在的情况是最小化之后由于窗口是非客户区域就不刷新了,我是想让这窗口最小化之后依然能刷新。
worldy 2013-11-16
  • 打赏
  • 举报
回复
窗口最小化化之后,你想干嘛啊?
cyxcw1 2013-11-16
  • 打赏
  • 举报
回复
引用 2 楼 worldy 的回复:
处理WM_NCPAINT消息
处理了,但是还是不行,也还是还原窗口之后才相应这个消息。 这个消息的优先级比较低,所以会造成这种情况。
worldy 2013-11-16
  • 打赏
  • 举报
回复
处理WM_NCPAINT消息
hurryboylqs 2013-11-16
  • 打赏
  • 举报
回复
最小化后还刷新做啥,播放跟刷新没什么关系,不刷新播放器一样在播的,你看不是在调用OnDraw前有IsIconic()的判断,这个函数是表示窗口最小化了。
cyxcw1 2013-11-15
  • 打赏
  • 举报
回复
没人回答自己顶一下

15,979

社区成员

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

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