关于画图的问题~~(在线急等)
我在WM_LBUTTONDOWN的时候取得xpos=LOWORD(lParam);ypos=HIWORD(lParam);后,我在WM_MOUSEMOVE的时候这样写:
hdc=GetDC(hwnd);
if(wParam=MK_LBUTTON)
{
Ellipse(hdc,LOWORD(lParam),ypos,xpos,HIWORD(lParam));
}
ReleaseDC(hwnd,hdc);
然后在WM_PAINT中我用到了InvalidateRect(hwnd,NULL,true);,但是这只是用来消除背景,不能消除椭圆,在我鼠标拖动的时候,随着鼠标位置的拖动画出的椭圆仍然存在,当鼠标左键UP的时候,可以看到很多椭圆,这种情况怎么解决,怎样消除椭圆?就是windows画板的那个画椭圆的的效果
谢谢~~
问题点数:50、回复次数:4Top
1 楼Andy84920(你也不懂)回复于 2003-11-01 10:43:11 得分 5
MFC的东西不懂!Top
2 楼fierygnu(va_list)回复于 2003-11-01 11:16:44 得分 15
处理顺序有问题。你应该在WM_PAINT中调用BeginPaint消除背景,然后画椭圆。在MOUSEMOVE里只更新坐标,然后调用InvalidateRect。只是事件驱动应用编程的基本模式。否则你就需要用xor方式来消除原来的椭圆了。Top
3 楼leyt(思维机器)回复于 2003-11-01 11:32:38 得分 30
你在WM_PAINT中用InvalidateRect(hwnd,NULL,true)是没有用的(应该说是不对的)。
因为你是在WM_MOUSEMOVE中画的椭圆,随着鼠标位置的拖动当然会画出椭圆。
应该在WM_MOUSEMOVE后加上InvalidateRect(hwnd,NULL,TRUE)擦除背景。
我写了一个,效果还不错。
LRESULT CALLBACK WndProc ( HWND hwnd, UINT message, WPARAM wParam,LPARAM lParam)
{
static int xpos, ypos, x, y;
HDC hdc ;
PAINTSTRUCT ps ;
switch (message)
{
case WM_LBUTTONDOWN:
xpos=LOWORD(lParam);
ypos=HIWORD(lParam); return 0 ;
case WM_MOUSEMOVE:
hdc=GetDC(hwnd);
if (wParam & MK_LBUTTON )
{
x=LOWORD(lParam);
y=HIWORD(lParam);
} InvalidateRect (hwnd, NULL,1) ;
ReleaseDC(hwnd,hdc);
return 0 ;
case WM_PAINT:
hdc = BeginPaint (hwnd, &ps) ;
Ellipse(hdc,xpos,ypos,x,y);
EndPaint (hwnd, &ps) ;
return 0 ;
case WM_DESTROY:
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}Top
4 楼leyt(思维机器)回复于 2003-11-01 11:34:18 得分 0
TO:Andy84920(你也不懂)
不是MFC的,是WINDOWS SDK的,呵呵Top




