我正试图制作一个程序来控制一个用箭头键移动的盒子,我的code.Is有一个问题,可以通过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当按左键时,控件是否转到WM_PAINT
因为当我写信的时候
if(wParam==VK_LEFT)
{ Rectangle(hdc,x-50,600,x1-50,700);
}什么事都没有发生,但当我写
if(wParam==VK_ESCAPE)
PostQuitMessage(0);
return 0;窗口使用转义键退出,这不是.I试图理解为什么VK_LEFT不执行的最后一段代码吗?
发布于 2014-01-26 16:10:07
你从来没派过WM_PAINT。该系统负责这方面的工作。相反,您可以调用InvalidateRect来指定希望重新绘制的矩形。系统将该矩形标记为无效,当下一个绘制周期发生时,该矩形将被重新绘制。
如果您想使更复杂的区域失效,就会有InvalidateRgn。
如果您只是希望整个窗口失效,那么将NULL传递给InvalidateRect的lpRect参数。
https://stackoverflow.com/questions/21365802
复制相似问题