读书人

QPix地图:grabWindow截出来的图片为啥

发布时间: 2013-03-04 17:22:12 作者: rapoo

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;
}

读书人网 >QT开发

热点推荐