资源描述:
《鼠标作图和删除线条windows编程》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、10章用鼠标作图一、捕获、释放光标上一章的程序在鼠标控制方面还有问题,之所以用它作例子,完全是为了让大家将鼠标事件搞明白,这一章,我们就来纠正这些问题点。首先要掌握ClipCursor()函数,这个函数将可以将光标限定在窗口有效区内,注意:这个函数的参数用的矩形座标是整个屏幕的座标,这是因为鼠标是全屏动作的。因此,我们还必须学会将窗口有效区座标转换为屏幕座标。ClientToScreen()函数可以实现这一目的,不过这一函数在MFC中的参数和SDK中的参数不一样,MFC中转换的是一矩形块,而SDK转换的是一个点。所以,SDK编程中,下
2、面例子是先转换窗口有效区的(0,0)点,再计算出矩形右下角的点。BOOLClientToScreen(BOOLClipCursor(HWNDhWnd,//窗口句柄constRECT*lpRect//屏幕座标的矩形块LPPOINTlpPoint//屏幕座标的点);//参数为NULL时为取消该功能);LONGclsCur;boolbDrawing=false;//画图状态为truePOINTSstart;//开始点LRESULTCALLBACKWndProc(HWNDhWnd,UINTmessage,WPARAMwParam,LPARAM
3、lParam){;switch(message){caseWM_LBUTTONDOWN:bDrawing=true;//描画状态开始start=MAKEPOINTS(lParam);//开始点保存于start中//取得窗口有效区RECTrect;GetClientRect(hWnd,&rect);//转换窗口有效区为屏幕座标POINTpoint;point.x=0,point.y=0;ClientToScreen(hWnd,&point);rect.top=point.y;rect.left=point.x;rect.bottom+=
4、rect.top;rect.right+=rect.left;//将光标限定在窗口有效区内ClipCursor(&rect);//rect一定要是屏幕座标if(!clsCur){clsCur=GetClassLong(hWnd,GCL_HCURSOR);//取当前窗口的光标}SetClassLong(hWnd,GCL_HCURSOR,NULL);//设置当前窗口的光标为NULLSetCursor(LoadCursor(NULL,IDC_CROSS));//设置当前光标为十字形break;caseWM_MOUSEMOVE:HDChdc;
5、hdc=GetDC(hWnd);if(bDrawing){MoveToEx(hdc,start.x,start.y,NULL);LineTo(hdc,LOWORD(lParam),HIWORD(lParam));}ReleaseDC(hWnd,hdc);break;caseWM_LBUTTONUP:bDrawing=false;//描画状态结束ClipCursor(NULL);//使光标可以在屏幕任意位置移动SetClassLong(hWnd,GCL_HCURSOR,clsCur);//设置窗口光标为原先的光标SetCursor((H
6、CURSOR)clsCur);//设置当前光标为原先的光标break;caseWM_DESTROY:PostQuitMessage(0);break;default:returnDefWindowProc(hWnd,message,wParam,lParam);}return0;}二、消除移动轨迹上例中,想要画一条线(即鼠标按下到松开的一条线),结果却将鼠标移动的“轨迹”画了出来,这些“轨迹”必须擦掉。VC不提供擦掉已经画好的图案的功能,所谓“擦掉”,就是选用某种方式重画,使得看上去象重画一样。通过SetROP2()函数就可以实现这个
7、功能,这个函数将反转屏幕颜色,这样第二次画时就恢复为原来的颜色。注意:SetROP2()函数这是设置画图模式的函数,是设置前景与背景的关系。intSetROP2(HDChdc,//HDCintfnDrawMode//描画模式);值说明R2_BLACK象素颜色始终为0(即黑色)R2_WHITE象素颜色始终为1(即白色)R2_COPYPEN象素为画笔的颜色R2_NOTCOPYPEN象素为画笔相反的颜色PixelisacombinationofthecolorscommontoboththescreenR2_MASKNOTPENandthe
8、inverseofthepen.PixelisacombinationofthecolorscommontoboththepenR2_MASKPENandthescreen.Pixelisacombinationofth