程序如下:
。。
WORD x,y;
...消息循环如下:(一部分)
switch(message)case WM_LBUTTONDOWN:
     InvalidateRect(hWnd,NULL,1); <====“SendMessage(hWnd,WM_PAINT,0,0);”
     break;
case WM_PAINT:
     x=LOWORD(lParam);
     y=HIWORD(lParam);
     RoundRect(hdc,x,y,x+5,y+5,10,10);
     EndPaint(hWnd,&ps);
     break;
...
我的目标是当鼠标左键按下,在鼠标当前位置画一个圆点
但x,y的值并不应鼠标的移动而变化,都是0
请问哪里错了
难道 x=LOWORD(lParam);
     y=HIWORD(lParam);分别取高位与低位错了?
还是这两个消息响应本身就写错了?
另: "<==="我改为“SendMessage(hWnd,WM_PAINT,0,0);”与"InvalidateRect(hWnd,NULL,1);"有何区别?
初学SDK,有些困惑.先谢谢大家了!!!

解决方案 »

  1.   

    case WM_LBUTTONDOWN:
         Invalidate( );
         break;
    case WM_PAINT:
         {
           POINT pt;
           GetCursorPos( &pt );
           ScreenToClient( hWnd, &pt );       PAINTSTRUCT ps;
           HDC hdc = BeginPaint(hWnd,&ps);
           RoundRect(hdc,x,y,x+5,y+5,10,10);
           EndPaint(hWnd,&ps);
         }
         break;
      

  2.   

    sorry!
    应该是:
    RoundRect(hdc,pt.x,pt.y,pt.x+5,pt.y+5,10,10);
      

  3.   

    在wm_paint中wparam和lparam并没有提供鼠标的位置!所以得用GetCursorPos进行获取..