请大家帮我想想。。。
我想在按a键时画个矩形,按b键时画个椭圆! (屏幕上只有一个图形,两者不能同时存在)
窗口过程这样写的:
- C/C++ code
case WM_PAINT: hdc=BeginPaint(hwnd,&ps); EndPaint(hwnd,&ps); return 0;case WM_CHAR: switch(wParam) { case 'a': InvalidateRect(hwnd,NULL,TRUE); UpdateWindow(hwnd); DrawRect(hwnd); break; case 'b': InvalidateRect(hwnd,NULL,TRUE); /*ValidateRect(hwnd,NULL);*/ UpdateWindow(hwnd); DrawRound(hwnd); break; } return 0;
请问大家调用InvalidateRect是会发送一个WM_PAINT消息,也就是用白色画刷覆盖客户区,并使之有效。
为什么我用ValidateRect后,画椭圆的时候矩形还在屏幕上呢?非要注释掉才可以?
请大家帮帮我!!
不胜感激!
[解决办法]
switch(wParam)
{
case 'a':
{
InvalidateRect(hWnd, NULL, TRUE);
UpdateWindow(hWnd);
hdc=GetWindowDC(hWnd);
Rectangle(hdc, 100, 100, 200, 200);
}
break;
case 'b':
{
InvalidateRect(hWnd, NULL, TRUE);
UpdateWindow(hWnd);
hdc=GetWindowDC(hWnd);
Ellipse(hdc, 100, 100, 200, 200);
}
break;
}
[解决办法]
绘图的操作整理到WM_PAINT消息中
在WM_PAINT中通过switch语句区分
在键盘消息里设置绘图标识然后Invalidate