首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

win32 重绘时上次绘制的信息未被擦除,该怎么解决

2012-03-03 
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++ code
wsprintf(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;

热点排行