win32 重绘时上次绘制的信息未被擦除C/C++ codecase WM_MOUSE_HOOK_MESSAGE:mhs (MOUSEHOOKSTRUCT*)lPara
win32 重绘时上次绘制的信息未被擦除
C/C++ code case WM_MOUSE_HOOK_MESSAGE: mhs = (MOUSEHOOKSTRUCT*)lParam; wsprintf(szPostionInfo, "(%d,%d)", mhs->pt.x, mhs->pt.y); hdc = GetDC(hwnd); TextOut(hdc, 10, 10, szPostionInfo, strlen(szPostionInfo)); ReleaseDC(hwnd, hdc); break; case WM_MOUSEMOVE: GetCursorPos(&pt); GetClientRect(hwnd, &rt); wsprintf(szPostionInfo, "(%d,%d)", pt.x, pt.y); hdc = GetDC(hwnd); TextOut(hdc, 10, 10, szPostionInfo, strlen(szPostionInfo)); ReleaseDC(hwnd, hdc); break;
第一个消息是钩子发过来的
不论在捕捉到哪个消息的时候进行重绘
都会有一些背景未被擦除 很难看
绘制上去的字符串是这样被格式化的:
C/C++ codewsprintf(szPostion, "Location: (%d, %d)\n", pmhs->pt.x, pmhs->pt.y);
谁能告诉我 该怎样绘图才是正确的方式(不会出现残留的背景)?
[解决办法]绘制前重绘背景
[解决办法]应该在WM_PAINT消息里进行画
定义一全局变量 POINT g_pt;
然后在WM_MOUSE_HOOK_MESSAGE、WM_MOUSEMOVE: 赋值
在WM_PAINT消息里进行画
case WM_PAINT:
{
HDC dc;
PAINTSTRUCT pt;
char szPostionInfo[256];
dc = BeginPaint(hwnd,&pt);
if ( !dc )
break;
wsprintf(szPostionInfo, "(%d,%d)", g_pt.x, g_pt.y);
TextOut(dc, 10, 10, szPostionInfo, strlen(szPostionInfo));
EndPaint(hwnd,&pt);
break;
}
break;