我使用WM_MOUSEMOVE来动态捕获并显示当前鼠标所指像素点的RGB值——
case WM_MOUSEMOVE:
point.x = ((MOUSEHOOKSTRUCT )lParam)->pt.x;
point.y = ((MOUSEHOOKSTRUCT *)lParam)->pt.y;
/*GetCursorPos(&point);/
rectDisplay.left = pointPre.x - 10 * cxChar;
rectDisplay.top = pointPre.y - 5 * cyChar;
rectDisplay.right = pointPre.x + 20 * cxChar;
rectDisplay.bottom = pointPre.y + 5 * cyChar;
pointPre.x = point.x;
pointPre.y = point.y;
color = GetPixel(screenHdc, point.x, point.y);
R_G_B[0] = GetRValue(color);
R_G_B[1] = GetGValue(color);
R_G_B[2] = GetBValue(color);
StringCchPrintf(szBuffer, 10, TEXT("%02X %02X %02X "), R_G_B[0], R_G_B[1], R_G_B[2]);
SetBkColor(screenHdc, color);
/*RedrawWindow(NULL, &rectDisplay, NULL, RDW_INVALIDATE | RDW_INTERNALPAINT | RDW_UPDATENOW | RDW_ALLCHILDREN);*/
InvalidateRect(GetDesktopWindow(), &rectDisplay, TRUE);
UpdateWindow(GetDesktopWindow());
TextOut(screenHdc, point.x + cxChar, point.y + cyChar, szBuffer, 9);
break;
测试结果是,当鼠标正在移动时,光标右下方能正确显示出文本框,但鼠标一旦停下来,文本框就消失了。
程序内的逻辑应该是鼠标移动突然停下来后,光标右下角能保留最后一次的文本框才对呀。