关于PrintWindow
我正在用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);
}
}