当前位置: 代码迷 >> QT开发 >> QPix地图:grabWindow截出来的图片为啥没有鼠标标志呢
  详细解决方案

QPix地图:grabWindow截出来的图片为啥没有鼠标标志呢

热度:97   发布时间:2016-04-25 04:04:53.0
QPixmap::grabWindow截出来的图片为啥没有鼠标标志呢
QPixmap::grabWindow截出来的图片为啥没有鼠标标志呢
将鼠标画上去是一种方法 但总感觉不太好

------解决方案--------------------
这个没注意过,好像没有带鼠标的。
windows自带的截图工具也没有鼠标。
------解决方案--------------------
实现里面就不抓mouse cursor的
所以还是换别的思路把

QPixmap QPixmap::grabWindow(WId winId, int x, int y, int w, int h )
{
    RECT r;
    GetClientRect(winId, &r);

    if (w < 0) w = r.right - r.left;
    if (h < 0) h = r.bottom - r.top;

#ifdef Q_WS_WINCE_WM
    if (qt_wince_is_pocket_pc()) {
        QWidget *widget = QWidget::find(winId);
        if (qobject_cast<QDesktopWidget *>(widget)) {
            RECT rect = {0,0,0,0};
            AdjustWindowRectEx(&rect, WS_BORDER 
------解决方案--------------------
 WS_CAPTION, FALSE, 0);
            int magicNumber = qt_wince_is_high_dpi() ? 4 : 2;
            y += rect.top - magicNumber;
        }
    }
#endif

    // Create and setup bitmap
    HDC display_dc = GetDC(0);
    HDC bitmap_dc = CreateCompatibleDC(display_dc);
    HBITMAP bitmap = CreateCompatibleBitmap(display_dc, w, h);
    HGDIOBJ null_bitmap = SelectObject(bitmap_dc, bitmap);

    // copy data
    HDC window_dc = GetDC(winId);
    BitBlt(bitmap_dc, 0, 0, w, h, window_dc, x, y, SRCCOPY
#ifndef Q_WS_WINCE
                                    
------解决方案--------------------
 CAPTUREBLT
#endif
            );

    // clean up all but bitmap
    ReleaseDC(winId, window_dc);
    SelectObject(bitmap_dc, null_bitmap);
    DeleteDC(bitmap_dc);

    QPixmap pixmap = QPixmap::fromWinHBITMAP(bitmap);

    DeleteObject(bitmap);
    ReleaseDC(0, display_dc);

    return pixmap;
}
  相关解决方案