我正在尝试制作一个用箭头键来控制盒子移动的程序。我的代码有问题。是否可以通过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
不执行?
答案 0 :(得分:5)
您永远不会发送WM_PAINT
。该系统负责这样做。相反,您调用InvalidateRect
指定要重绘的矩形。系统会将该矩形标记为无效,并且当下一个绘制周期发生时,该矩形将被重新绘制。
如果您想使更复杂的区域无效,则InvalidateRgn
。
如果您只是希望整个窗口无效,请将NULL
传递给lpRect
的{{1}}参数。