《Windows程序设计》之鼠标

来源:互联网 发布:冬季男士帽子 知乎 编辑:程序博客网 时间:2024/05/21 17:18
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){static POINT pt[MAXPOINT];static int iCount;HDC hdc;int i,j;PAINTSTRUCT ps;switch(message){case WM_MBUTTONDOWN:iCount=0;//将窗口放入到更新区域里面,但是不重画。InvalidateRect(hwnd,NULL,NULL);return 0;case WM_MOUSEMOVE://在鼠标按住鼠标左键,且总点数小于1000时,将点的坐标放入pt中,并画点。if(wParam & MK_LBUTTON &&iCount<1000){pt[iCount].x=LOWORD(lParam);pt[iCount++].y=HIWORD(lParam);hdc=GetDC(hwnd);SetPixel(hdc,LOWORD(lParam),HIWORD(lParam),0);ReleaseDC(hwnd,hdc);}return 0;case WM_LBUTTONUP://关于最后一个参数,如果为TRUE时,系统会先先向窗口发关一个WM_ERASEBKGND消息,使背景重绘,然后再发送WM_PAINT//如果为FALSE,则只发送WM_PAINTInvalidateRect(hwnd,NULL,FALSE);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[j].x,pt[j].y);}ShowCursor(FALSE);//设置鼠标形状,注意只有在光标不被使用的情况下才可设置SetCursor(LoadCursor(NULL,IDC_ARROW));EndPaint(hwnd,&ps);return 0;case WM_DESTROY:PostQuitMessage(0);return 0;}return DefWindowProc(hwnd,message,wParam,lParam);}

上面为第7章CONNECT.c中回调函数代码,我加入了部分注释。本人认为最难理解的就是InvalidateRect(hwnd,NULL,FALSE);

关于这个问题,大家可以看一下

http://jokerkiss98.blog.sohu.com/171609682.html

http://blog.csdn.net/sdeeds/article/details/6859530


原创粉丝点击