关于PrintWindow

robinwjb 2010-02-01 11:07:35
我正在用PrintWindow给窗口截图。

有以下2个问题:

问题1:当一个窗口当前是未被激活的状态时,如何截取到它激活状态的图片?
注:不能真正地激活它,使他看起来像激活状态就可以了。我试着给窗口发了WM_NCACTIVATE
消息,虽然标题栏看起来像是被激活了,但截图还是未激活状态。

问题2:PrintWindow在Vista上截的图好像有问题,对话框右上角的 X 变小了,窗口周围的阴影
与效果也没了,但是使用Alt+PrScrn截出的图没问题。

下面贴上我的代码:
void CaptureWindow(HWND hWnd)
{
RECT rc;
HDC hdc = ::GetWindowDC(hWnd);
if (hdc)
{
HDC hdcMem = ::CreateCompatibleDC(hdc);
if (hdcMem)
{
RECT rc;
::GetWindowRect(hWnd, &rc);

HBITMAP hbitmap = ::CreateCompatibleBitmap(hdc, rc.right - rc.left, rc.bottom - rc.top);
if (hbitmap)
{
::SelectObject(hdcMem, hbitmap);
BOOL bRes = ::PrintWindow(hWnd, hdcMem, 0);

::OpenClipboard(NULL);
::EmptyClipboard();
::SetClipboardData(CF_BITMAP, hbitmap);
::CloseClipboard();

::DeleteObject(hbitmap);
}
::DeleteObject(hdcMem);
}
::ReleaseDC(hWnd, hdc);
}

}
...全文
399 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
aa3000 2010-02-02
  • 打赏
  • 举报
回复
纯纯的接分
liumenghappy 2010-02-02
  • 打赏
  • 举报
回复
能不能用SetActiveView先把它激活啊
robinwjb 2010-02-02
  • 打赏
  • 举报
回复
再顶一下,无人回答就结贴了。
shihaojie1219 2010-02-01
  • 打赏
  • 举报
回复
貌似应该设置它始终处于激活状态。
Eleven 2010-02-01
  • 打赏
  • 举报
回复
WM_ACTIVATE消息
robinwjb 2010-02-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jameshooo 的回复:]
貌似楼主结贴率很低,打酱油路过
[/Quote]

冤啊。我全都结了。
这个数据不知道是啥时候的。
robinwjb 2010-02-01
  • 打赏
  • 举报
回复
Alt+PrScrn好实现,因为窗口是激活的,最笨不过截屏后切割出对应窗口即可。
jameshooo 2010-02-01
  • 打赏
  • 举报
回复
貌似楼主结贴率很低,打酱油路过
healer_kx 2010-02-01
  • 打赏
  • 举报
回复
这个很N啊,不知道做了什么工作。
Alt+PrScrn
robinwjb 2010-02-01
  • 打赏
  • 举报
回复
顶一下。

15,978

社区成员

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

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