2022年VisualC++基础入门教程-:使用鼠标 .pdf
鼠标在系统中显示为一个斜向的箭头,发生鼠标动作时 系统 产生相应的事件消息,应用程序接收到消息后作出恰当的 回应,从而完成命令操作;1、鼠标动作 包括单击、双击、移动等,系统已经定义好了它们的标识符,分别如下:1)单击:鼠标的单击动作是指按键轻巧地 按下去又抬起来,包括按下和抬起两个动作,有左键和右键之分,左键按下的标识符是WM_LBUTTONDOWN,右键是W M_RBUTTONDOWN,而抬起则是把后面的单词 DOWN改成成UP 即可,当鼠标单击时系统就会 发送这两个消息给应用程序,而应用程序的消息处理过程MainWndProc 里头加入一段这两个消息的处理代码;2)双击:双击一般指鼠标左键,迅速的 两次单击,系统默认是0.5秒内,否则就是两次单击,双击时系统发送一个WM_LBUTTONDBLCLK消息给应用程序,然后应用程序的 MainWndProc 里头加上一段 代码来处理这个消息;3)移动:在没有按键的情况下,移动鼠标,这时屏幕上的箭头鼠标指针也发生移动,这时系统将发送一个WM_MOUSE MOVE 消息,应用程序也可以加上一段代码来响应这个鼠标事件,如果应用程序中没有这一段代码,这个名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 7 页 -消息将由系统处理代为处理;4)鼠标的 其他情况还包括拖动、同时按住组合键、进入、穿越、离开程序的窗口,这些动作也有相应的 处理程序代码;2、鼠标消息鼠标消息是一种 结构类型,它在指明鼠标动作的同时还 携带一些附加信息,其中的lParam 参数中携带了鼠标的位置信息,另一个参数 wParam 则判断是否有键盘上的组合键按下;下面我们通过一个程序来看看鼠标的使用方法:1)新建 一个名为 Mouse 的Win32 Application 工程,再新建一个名为Mouse 的C/C头文件和一个名为Mouse 的C源程序,输入程序的框架代码,框架代码经常用到,每次提前抄到 本子上,或者打印下来,复制粘贴有时出现莫名其妙的“unexpected end”错误,还是输进去的可靠些(绿色部分是注释,必须以双斜杠“/”开头),有的一行太长会自动折到下一行:头文件 Mouse.h 的内容是:/申明函数原型LRESULT CALLBACK MainWndProc(HWND,UINT,WP ARAM,LPARAM);BOOL Init Application(HINSTANCE);BOOL InitInstance(HINSTANCE,int);名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 7 页 -源程序 Mouse.cpp 的内容是:#include#include#include Mouse.hHINSTANCE hInst;HWND hWndMain;intAPIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)MSG msg;/定义一个消息结构 msgif(!InitApplication(hInstance)return (F ALSE);if(!InitInstance(hInstance,nCmdShow)return (F ALSE);while (Get Message(&msg,NULL,0,0)TranslateMessage(&msg);DispatchMessage(&msg);return (msg.wParam);名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 7 页 -BOOL Init Application(HINSTANCE hInstance)WNDCLASS wcMouse;wcMouse.style=0;wcMouse.lpfnWndProc=(WNDPROC)MainWndProc;wcMouse.cbClsExtra=0;wcMouse.cbWndExtra=0;wcMouse.hInstance=hInstance;wcMouse.hInstance=hInstance;wcMouse.hIcon=LoadIcon(hInstance,IDI_APPLICATION);wcMouse.hCursor=LoadCursor(NULL,IDC_ARROW);wcMouse.hbrBackground=(HBRUSH)(14);wcMouse.lpszMenuName=NULL;wcMouse.lpszClassName=MouseWClass;return (RegisterClass(&wcMouse);BOOL InitInstance(HINSTANCE hInstance,int nCmdShow)hInst=hInstance;hWnd Main=CreateWindow(MouseWClass,使用鼠标,WS_OVERLAPPEDWINDOW,名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 7 页 -CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);ShowWindow(hWnd Main,nCmdShow);UpdateWindow(hWndMain);return(TRUE);再接着 加入消息处理 过程,这是本节 关键知识,代码如下:LRESULT APIENTRY MainWndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)char szTitle50;/存放标题字符串switch(message)case WM_LBUTTONDOWN:SetWindowText(hWndMain,按下鼠标);/替换标题栏显示MessageBox(hWnd,你按下的是鼠标左键!,提示,MB_OK|MB_ICONINFOR MATION);break;case WM_RBUTTONDOWN:SetWindowText(hWndMain,按下鼠标);MessageBox(hWnd,你按下的是鼠标右键!,提名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 7 页 -示,MB_OK|MB_ICONINFOR MA TION);break;case WM_MOUSE MOVE:wsprintf(szTitle,%s(%d,%d),鼠标位置,LOWORD(lParam),HIWORD(lParam);/将鼠标位置存入一个字符串数组 szTitle 中 SetWindowText(hWndMain,szTitle);/字符串显示到标题栏上break;case WM_DESTROY:PostQuitMessage(0);break;default:return(DefWindowProc(hWnd,message,wParam,lParam);return 0;保存一下文件,单击编译条上的“构建”按钮,构建程序,如果出现了错误,就在仔细检查一下,通过后再单击“执行”按钮,运行一下自己的程序,分别单击左右按键和移动鼠标,看看程序的响应效果;名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 7 页 -本节学习了鼠标操作的编程知识,如果你成功地完成了练习,请继续学习下一课内容;名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 7 页 -