我使用此代码在屏幕上获取鼠标位置并且它正在工作。我也得到光标的宽度和高度。我需要的是当我调用函数GetIconInfo时的光标图标。在ii iI中有ii.hbmColor和ii.hbmMaskask。 hbmColor的值是0x0,hbmMask是0x2f0517f1。我可以从那两个指针中提取鼠标光标吗?
CURSORINFO cursorInfo = { 0 };
cursorInfo.cbSize = sizeof(cursorInfo);
HDC memoryDC = (HDC)malloc(100);
memset(memoryDC, 0x00, 100);
if (::GetCursorInfo(&cursorInfo)) {
ICONINFO ii = {0};
GetIconInfo(cursorInfo.hCursor, &ii);
BITMAP bm;
GetObject(ii.hbmMask,sizeof(BITMAP),&bm);
DeleteObject(ii.hbmColor);
DeleteObject(ii.hbmMask);
::DrawIcon(memoryDC, cursorInfo.ptScreenPos.x - ii.xHotspot, cursorInfo.ptScreenPos.y - ii.yHotspot, cursorInfo.hCursor);
for(int i = 0; i < bm.bmWidth; i++){
for(int j = 0; j < bm.bmHeight; j++){
COLORREF c = GetPixel(memoryDC, i, j);
printf("%x", c);
}
}
}
答案 0 :(得分:2)
CURSORINFO cursorInfo = { 0 };
cursorInfo.cbSize = sizeof(cursorInfo);
if (::GetCursorInfo(&cursorInfo))
{
ICONINFO ii = {0};
GetIconInfo(cursorInfo.hCursor, &ii);
DeleteObject(ii.hbmColor);
DeleteObject(ii.hbmMask);
::DrawIcon(memoryDC, cursorPos.x - ii.xHotspot, cursorPos.y - ii.yHotspot, cursorInfo.hCursor);
}
答案 1 :(得分:-1)
光标信息的格式如下所述:http://www.daubnet.com/en/file-format-cur
您必须从数据缓冲区的每个位获取每个像素,而不是从每个字节获取,因此1个字节= 8个像素。 另外,请注意一些可能有特殊尺寸光标(不是8的倍数)的应用,例如26x23 在这种情况下,您将不得不忽略每行的最后几位。 使用26个像素的行,你将获得4个字节,你将读取前3个字节以获得24个第一个像素,然后读取第4个字节的2个位以获得最后2个像素,然后忽略最后一个跳转到下一行之前的6位。