一个鼠标画图的小问题(关于刷新整个客户区)!!!
一个鼠标画图的小问题(关于刷新整个客户区)!!!
switch (message)
{
//鼠标左键画图
case WM_LBUTTONDOWN:
iCount = 0;
InvalidateRect(hwnd,NULL,FALSE);
return 0;
//鼠标右键刷新整个客户区,变白。
//画几条线,但按下右键总有最后画的一条还在!
case WM_RBUTTONDOWN:
hdc = GetDC (hwnd);
rect.left = 0;
rect.top = 0;
rect.right = LOWORD(lParam);
rect.bottom = HIWORD(lParam);
//单独用InvalidateRect(hwnd,NULL,TRUE);也不行。
InvalidateRect(hwnd,NULL,TRUE);
ReleaseDC (hwnd,hdc);
return 0;
//
case WM_MOUSEMOVE:
if( wParam & MK_LBUTTON && iCount < 1000 )
{
pt[iCount ].x = LOWORD(lParam);
pt[iCount ].y = HIWORD(lParam);
iCount++;
hdc = GetDC (hwnd);
InvalidateRect(hwnd,NULL,FALSE);
ReleaseDC (hwnd,hdc);
}
return 0;
case WM_PAINT:
hdc = BeginPaint (hwnd, &ps) ;
for ( i=0; i < iCount - 1 ;i++)
// for( j = i + 1; j < iCount; j++)
{
MoveToEx(hdc,pt[i].x,pt[i].y,NULL);
LineTo (hdc,pt[i+1].x,pt[i+1].y);
}
EndPaint (hwnd, &ps) ;
return 0 ;
问题点数:50、回复次数:4Top
1 楼Mackz(在相互)回复于 2003-05-03 12:45:36 得分 0
我不知道你在:WM_RBUTTONDOWN和WM_MOUSEMOVE中使用GetDC()干什么用?Top
2 楼MPU(黑眼圈)回复于 2003-05-03 13:04:55 得分 0
WM_MOUSEMOVE中使用GetDC()是为了鼠标在客户区中拖动时留下痕迹。
《Windows 程序设计》中用了GetDC()。
WM_RBUTTONDOWN我想让鼠标右键刷新客户区,使之变白。
没有实现,就乱试一下。的确不该用。
switch (message)
{
case WM_LBUTTONDOWN:
iCount = 0;
InvalidateRect(hwnd,NULL,FALSE);
return 0;
case WM_RBUTTONDOWN:
InvalidateRect(hwnd,NULL,TRUE);
return 0;
case WM_MOUSEMOVE:
if( wParam & MK_LBUTTON && iCount < 1000 )
{
pt[iCount ].x = LOWORD(lParam);
pt[iCount ].y = HIWORD(lParam);
iCount++;
hdc = GetDC (hwnd);
InvalidateRect(hwnd,NULL,FALSE);
ReleaseDC (hwnd,hdc);
}
return 0;
case WM_PAINT:
hdc = BeginPaint (hwnd, &ps) ;
SetCursor(LoadCursor(NULL,IDC_WAIT));
ShowCursor(TRUE);
for ( i=0; i < iCount - 1 ;i++)
// for( j = i + 1; j < iCount; j++)
{
MoveToEx(hdc,pt[i].x,pt[i].y,NULL);
LineTo (hdc,pt[i+1].x,pt[i+1].y);
}
ShowCursor(FALSE);
SetCursor ( LoadCursor(NULL,IDC_ARROW));
EndPaint (hwnd, &ps) ;
return 0 ;
Top
3 楼superS(super慢)回复于 2003-05-03 13:10:31 得分 50
鼠标右建点下后应该先把记录点的数组pt清空再InvalidateRect.因为InvalidateRect会导致
WM_PAINT消息啊。Top
4 楼MPU(黑眼圈)回复于 2003-05-03 13:28:07 得分 0
这样好了!
case WM_RBUTTONDOWN:
iCount = 0;
InvalidateRect(hwnd,NULL,TRUE);
return 0;
谢谢!Top




