C++-关于WM_PRINTCLIENT的问题

C++-关于WM_PRINTCLIENT的问题

甜柠檬 发布于 2017-04-01 字数 436 浏览 1236 回复 1

如果一个目标窗口处理了WM_PRINTCLIENT消息, 那么我就可以向目标窗口发送此消息,并将于目标窗口兼容的dc句柄作为WPARAM传过去, 然后我就可以得到目标窗口的位图.
现在我想将窗口添加一个启动动画, 当程序启动的时候, 我得到窗口的位图, 然后进行其他操作, 但是现在的问题是: 如果我不调用目标窗口的showwindow和updatewindow一次, 得到的dc中的位图就为纯黑(失败了), 如果我先对目标窗口showwindow和updatewindow一次, 窗口就会闪动, 这个问题应该怎样解决?

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

偏爱自由 2017-08-20 1 楼

我现在解决了这个问题,但是方法不优雅. 我在oncreate里面SetWindowPos将窗口移动到可视界面之外,然后显示一次,立刻隐藏,大概代码如下:

DWORD dwStyle = GetWindowLong(hWndDest,GWL_EXSTYLE);
dwStyle |=WS_EX_TOOLWINDOW;
SetWindowLong(hWndDest,GWL_EXSTYLE,dwStyle);
RECT rcDesktop;
GetClientRect(GetDesktopWindow(),&rcDesktop);
SetWindowPos(hWndDest,HWND_NOTOPMOST,rcDesktop.right-1,0,0,0,SWP_NOZORDER | SWP_NOSIZE);
ShowWindow(hWndDest,SW_SHOW);
UpdateWindow(hWndDest);
ShowWindow(hWndDest,SW_HIDE);
dwStyle &= ~WS_EX_TOOLWINDOW;
SetWindowLong(hWndDest,GWL_EXSTYLE,dwStyle);
SetWindowPos(hWndDest,HWND_NOTOPMOST,m_rcDest.left,m_rcDest.top,m_rcDest.right-m_rcDest.left,m_rcDest.bottom-m_rcDest.top,SWP_NOZORDER);;