+ -
当前位置:首页 → 问答吧 → 用PrintWindow截的图会偏移

用PrintWindow截的图会偏移

时间:2008-07-27

来源:互联网

C/C++ code

#define _WIN32_WINNT    0x0501        //仅XP或以上系统有效
#include <windows.h>

int main()
{ 
    RECT rc;
    HWND hwnd = FindWindow(TEXT("Notepad"), NULL);    //注意窗口不能最小化
    if (hwnd == NULL)
    {
        cout << "找不到记事本窗口" << endl;
        return 0;
    }
    GetClientRect(hwnd, &rc);

    //创建
    HDC hdcScreen = GetDC(NULL);
    HDC hdc = CreateCompatibleDC(hdcScreen);
    HBITMAP hbmp = CreateCompatibleBitmap(hdcScreen, 
        rc.right - rc.left, rc.bottom - rc.top);
    SelectObject(hdc, hbmp);

    //复制
    PrintWindow(hwnd, hdc, PW_CLIENTONLY);

    //复制到粘贴板
    OpenClipboard(NULL);
    EmptyClipboard();
    SetClipboardData(CF_BITMAP, hbmp);
    CloseClipboard();
    
    //释放
    DeleteDC(hdc);
    DeleteObject(hbmp);
    ReleaseDC(NULL, hdcScreen);

    cout << "成功把记事本窗口复制到粘贴板,请粘贴到Windows画图工具" << endl;
    
    return 0;
}





如果把PW_CLIENTONLY改为0,也就是截整个窗口而非客户区的话,出来的效果是正确的(当然,需要调整下hbmp的尺寸)
但这样不是我想要的效果,我想截去掉标题栏,边框等等的,仅客户区部分.

如果不用PrintWindow,窗口被遮挡住时,截的图是有问题的.

我想问的就是为什么PrintWindow截子窗口时加上PW_CLIENTONLY也正确,但截顶级窗口时就有问题? 
问题出在哪呢?求教各位.

作者: tanchuhan   发布时间: 2008-07-27

谢谢楼主共享出代码来。

作者: lianxiang_biancheng   发布时间: 2011-12-13

我试过你的代码,复制出来正确,不同的是我用了WinMain

作者: dream0411   发布时间: 2011-12-13