Название: QPixmap курсора в Windows 7 (32 bit) [РЕШЕНО]
Отправлено: jasf от Февраль 24, 2012, 09:49
Здравствуйте. Не получается вытащить QPixmap курсора. Делаю так: CURSORINFO cinfo; cinfo.cbSize = sizeof(CURSORINFO); ::GetCursorInfo(&cinfo); QPixmap picon = QPixmap::fromWinHICON(cinfo.hCursor);
Почти нерабочий метод. Дефолный курсор (стрелочка) при таком варианте возвращает picon.size == QSize(0,0). Хорошо отображаются только курсоры, устанавливаемые в QtCreator. Иногда возвращает мусор, похожий на миниатюру курсора. Подскажите пожалуйста, как получить QPixmap курсора в Windows.
Название: Re: QPixmap курсора в Windows 7 (32 bit)
Отправлено: Bepec от Февраль 24, 2012, 10:14
Эммм.... Pixmap самого курсора, или Pixmap области рядом с курсором?
Название: Re: QPixmap курсора в Windows 7 (32 bit)
Отправлено: jasf от Февраль 24, 2012, 13:18
Pixmap самого курсора. Точнее его иконку, что бы с полупрозрачностью.
Название: Re: QPixmap курсора в Windows 7 (32 bit) [РЕШЕНО]
Отправлено: jasf от Февраль 24, 2012, 19:53
В 95% случаев работает. QPixmap topPart(QPixmap pixmap) { QSize size(pixmap.width(), pixmap.height()/2); return pixmap.copy(QRect(QPoint(), size)); }
QPixmap bottomPart(QPixmap pixmap) { QSize size(pixmap.width(), pixmap.height()/2); return pixmap.copy(QRect(QPoint(0, size.height()), size)); }
void drawTop(QPixmap& dest, const QPixmap& src) { QPainter p(&dest); p.drawPixmap(QPoint(0,0), src); }
QPixmap compileIcon(const QPixmap& p1Top, const QPixmap& p2Top, const QPixmap& p2Bottom) { QPixmap result = p1Top; result.setMask(p2Top); drawTop(result, p2Bottom); return result; }
QPixmap grabCurrentCursor() { CURSORINFO cinfo; cinfo.cbSize = sizeof(CURSORINFO); bool result = ::GetCursorInfo(&cinfo); if(!result) return QPixmap();
QPixmap pixmap; ICONINFO iconinfo = {0}; GetIconInfo(cinfo.hCursor, &iconinfo);
DIBSECTION dsBitmap; DIBSECTION dsMask;
if(!::GetObject(iconinfo.hbmColor, sizeof DIBSECTION, &dsBitmap)) { if(::GetObject(iconinfo.hbmMask, sizeof DIBSECTION, &dsMask)) { QPixmap p1 = QPixmap::fromWinHBITMAP(iconinfo.hbmMask); QPixmap p2 = QPixmap::fromWinHBITMAP(iconinfo.hbmMask, QPixmap::Alpha);
QPixmap p1Top = topPart(p1); QPixmap p2Top = topPart(p2);
QPixmap p2Bottom = bottomPart(p2);
pixmap = compileIcon(p1Top, p2Top, p2Bottom); } return pixmap; }
pixmap = QPixmap::fromWinHBITMAP(iconinfo.hbmColor, QPixmap::Alpha); return pixmap; }
|