2016-06-30 8 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; 
} 
関連する問題