将消息发送到WM_PAINT

Fre*_*911 1 windows winapi

我正在尝试制作一个用箭头键来控制盒子移动的程序.我的代码有问题.是否可以通过SendMessage向WM_PAINT发送一条消息,在按下左键时绘制一个新的矩形?以下是我的代码

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
Run Code Online (Sandbox Code Playgroud)

按下左键后,控件将转到WM_PAINT

因为我写的时候

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

        }
Run Code Online (Sandbox Code Playgroud)

什么都没发生,但是当我写作

if(wParam==VK_ESCAPE)
    PostQuitMessage(0);
    return 0;
Run Code Online (Sandbox Code Playgroud)

窗口以退出键退出它不是最终代码.我只是想了解为什么VK_LEFT不执行?

Dav*_*nan 5

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

如果你想使更复杂的区域无效InvalidateRgn.

如果您只是希望整个窗口无效,请传递NULLlpRect参数InvalidateRect.