发送消息到WM_PAINT

我正在试图制作一个程序来控制箭头键的方框的移动。我的代码有问题。是否可以通过SendMessage向WM_PAINT发送一条消息来按下LEFT键来绘制一个新的矩形? 以下是我的代码

case WM_KEYDOWN: switch(wParam) { case VK_LEFT: //LEFT MOVEMENT SendMessage(hwnd,WM_PAINT,VK_LEFT,0); break; case VK_ESCAPE: //FOR ENDING THE GAME WITH ESCAPE KEY SendMessage(hwnd,WM_DESTROY,VK_ESCAPE,0); break; } case WM_PAINT: hdc=BeginPaint(hwnd,&ps); Rectangle(hdc,x,600,x1,700); if(wParam==VK_LEFT) { Rectangle(hdc,x-50,600,x1-50,700); } EndPaint(hwnd,&ps); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hwnd,message,wParam,lParam); } where x1=550; x=500 

当按下左键时,控件进入WM_PAINT

因为当我写

 if(wParam==VK_LEFT) { Rectangle(hdc,x-50,600,x1-50,700); } 

没有任何反应,但是当我写

 if(wParam==VK_ESCAPE) PostQuitMessage(0); return 0; 

该窗口退出时使用退出键它不是最终的代码。我只是想明白,为什么VK_LEFT不执行?

Solutions Collecting From Web of "发送消息到WM_PAINT"

你永远不会发送WM_PAINT 。 系统负责这样做。 相反,您调用InvalidateRect指定您希望重新绘制的矩形。 系统会将该矩形标记为无效,当下一个绘制周期发生时,该矩形将被重新绘制。

如果你想使更复杂的区域InvalidateRgn ,则有InvalidateRgn

如果您只希望整个窗口失效,则将NULL传递给InvalidateRectlpRect参数。