读书人

请大家帮小弟我想想。

发布时间: 2012-04-14 17:14:21 作者: rapoo

请大家帮我想想。。。
我想在按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

读书人网 >VC/MFC

热点推荐