2016-06-30 17 views
0

QPixmap에서 내 (글로벌) 마우스 커서 아이콘을 가져 오려고합니다. Qt Windows에서 마우스 커서 아이콘 가져 오기

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)입니다. 무엇이 잘못 되었나요?

+0

왜'CURSORINFO' 구조의'hCursor' 구성원이 아이콘의 핸들입니다 생각하십니까? – mvidelgauz

+0

예, HCURSOR와 HICON은 동일합니다. 왜 이것이 작동하지 않는지 나는 모른다. 'ci.hCursor'는 실제로 유효한 핸들을 포함합니까? 만약 그렇다면, QtWin :: fromHICON과 함께 문제가 있다고 상상해 봅니다. 다른 점은 동일한 코드를 여러 번 사용하여 마우스 커서 비트 맵을 얻었 기 때문입니다. –

+0

이 답변에 따르면 : http://stackoverflow.com/questions/10469538/winapi-get-mouse-cursor-icon 그들은 DrawIcon()에서 HCURSOR를 사용하고 있습니다. – eKKiM

답변

0

위의 코드가 작동하지 않는 이유는 알 수 없습니다.

다음 코드 예제는 않았다 그러나 일 :

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