键盘和鼠标应用.ppt
文本预览下载声明
case WM_PAINT: hdc=BeginPaint(hwnd,ps); hpen=(HPEN)GetStockObject(BLACK_PEN); SelectObject(hdc,hpen); Rectangle(hdc,50,50,350,350); MoveToEx(hdc,50,150,NULL); LineTo(hdc,350,150); MoveToEx(hdc,50,250,NULL); LineTo(hdc,350,250); MoveToEx(hdc,150,50,NULL); LineTo(hdc,150,350); MoveToEx(hdc,250,50,NULL); LineTo(hdc,250,350); EndPaint(hwnd,ps); break; case WM_DESTROY: PostQuitMessage(0); default: return DefWindowProc(hwnd,message,wParam,lParam); } return(0); } 【6-4】编写一个鼠标应用程序,按下鼠标左键在窗口中移动时,将按下左键时所在点和当前点所形成的矩形涂成灰色,此时光标为十字型。当抬起鼠标左键时,将前面所绘制度矩形拉伸到整个窗口,拉伸过程中将光标设置为沙漏型。然后,若双击鼠标的左键,则灰色消失,窗口恢复到初始状态。 void InvertBlock (HWND hwnd, POINT ptBeg, POINT ptEnd) { HDC hdc ; hdc = CreateDC (DISPLAY, NULL, NULL, NULL) ; ClientToScreen (hwnd, ptBeg) ;//转换指定窗口的客户区内的点的坐标 ClientToScreen (hwnd, ptEnd) ; PatBlt (hdc, ptBeg.x, ptBeg.y, ptEnd.x - ptBeg.x, ptEnd.y - ptBeg.y,DSTINVERT) ; //这个函数在矩形区内用当前的画笔重画背景和前景*/ DeleteDC (hdc) ; } LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam,LPARAM lParam) { static BOOL operate=FALSE,ready=TRUE; static POINT BeginP,EndP; static RECT rect={0,0,0,0} ; HDC hdc ; PAINTSTRUCT PtStr; HBRUSH hBrush; switch (message) { case WM_LBUTTONDOWN: if ((!operate)ready) { operate=TRUE ; //左键击活俘获 ready=FALSE; SetCapture (hwnd) ;//把所有的鼠标信息输入到被左键击活的窗口. SetCursor (LoadCursor (NULL, IDC_CROSS)) ; //载入光标 BeginP.x=LOWORD(lParam); BeginP.y=HIWORD(lParam); } return 0 ; case WM_MOUSEMOVE: if (operate) { EndP.x=LOWORD(lParam); EndP.y=HIWORD(lParam); rect.left=BeginP.xEndP.x?BeginP.x:EndP.x; rect.right=BeginP.xEndP.x?BeginP.x:EndP.x; rect.top=BeginP.yEndP.y?BeginP.y:EndP.y; rect.bottom=BeginP.yEndP.y?BeginP.y:EndP.y; SetCursor (LoadCursor (NULL, IDC_WAIT)) ; //载入沙漏光标
显示全部