Qt Windows получает значок курсора мыши

я пытаюсь получить мой (глобальный) значок курсора мыши в QPixmap.

Прочитав документацию по Qt и MSDN, я разработал следующий фрагмент кода:

Я не уверен насчет смешивания HCURSOR и HICON, но я видел несколько примеров, где они это делают.

QPixmap MouseCursor::getMouseCursorIconWin()
{
CURSORINFO ci;
ci.cbSize = sizeof(CURSORINFO);

if (!GetCursorInfo(&ci))
qDebug() << "GetCursorInfo fail";

QPixmap mouseCursorPixmap = QtWin::fromHICON(ci.hCursor);
qDebug() << mouseCursorPixmap.size();

return mouseCursorPixmap;
}

Однако мой размер mouseCursorPixmap всегда равен QSize (0,0).
Что идет не так?

1

Решение

Я понятия не имею, почему код выше не работает.

Однако следующий пример кода сработал:

QPixmap MouseCursor::getMouseCursorIconWin()
{
// Get Cursor Size
int cursorWidth = GetSystemMetrics(SM_CXCURSOR);
int cursorHeight = GetSystemMetrics(SM_CYCURSOR);

// Get your device contexts.
HDC hdcScreen = GetDC(NULL);
HDC hdcMem = CreateCompatibleDC(hdcScreen);

// Create the bitmap to use as a canvas.
HBITMAP hbmCanvas = CreateCompatibleBitmap(hdcScreen, cursorWidth, cursorHeight);

// Select the bitmap into the device context.
HGDIOBJ hbmOld = SelectObject(hdcMem, hbmCanvas);

// Get information about the global cursor.
CURSORINFO ci;
ci.cbSize = sizeof(ci);
GetCursorInfo(&ci);

// Draw the cursor into the canvas.
DrawIcon(hdcMem, 0, 0, ci.hCursor);

// Convert to QPixmap
QPixmap cursorPixmap = QtWin::fromHBITMAP(hbmCanvas, QtWin::HBitmapAlpha);

// Clean up after yourself.
SelectObject(hdcMem, hbmOld);
DeleteObject(hbmCanvas);
DeleteDC(hdcMem);
ReleaseDC(NULL, hdcScreen);

return cursorPixmap;
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]