使用鼠标
使用鼠标
发布时间:2015-06-10 来源:查字典编辑
摘要:

鼠标在系统中显示为一个斜向的箭头使用鼠标1,发生鼠标动作时系统产生相应的事件消息,应用程序接收到消息后作出恰当的回应,从而完成命令操作


1、鼠标动作包括单击、双击、移动等,系统已经定义好了它们的标识符,分别如下:


1)单击:鼠标的单击动作是指按键轻巧地按下去又抬起来,包括按下和抬起两个动作,


 有左键和右键之分,左键按下的标识符是WM_LBUTTONDOWN,右键是WM_RBUTTONDOWN


 而抬起则是把后面的单词DOWN改成成UP即可,当鼠标单击时系统就会发送这两个消息给应用程序,而应用程序的消息处理过程MainWndProc里头加入一段这两个消息的处理代码;


2)双击:双击一般指鼠标左键,迅速的两次单击,系统默认是0.5秒内,否则就是两次单击,


 双击时系统发送一个WM_LBUTTONDBLCLK消息给应用程序,然后应用程序的MainWndProc里头加上一段代码来处理这个消息;


3)移动:在没有按键的情况下,移动鼠标,这时屏幕上的箭头鼠标指针也发生移动,


 这时系统将发送一个WM_MOUSEMOVE消息,应用程序也可以加上一段代码来响应这个鼠标事件,如果应用程序中没有这一段代码,这个消息将由系统处理代为处理;


4)鼠标的其他情况还包括拖动、同时按住组合键、进入、穿越、离开程序的窗口,这些动作也有相应的处理程序代码;


2、鼠标消息 鼠标消息是一种结构类型,它在指明鼠标动作的同时还携带一些附加信息,其中的lParam参数中携带了鼠标的位置信息,另一个参数wParam则判断是否有键盘上的组合键按下;


 下面我们通过一个程序来看看鼠标的使用方法:


1)新建一个名为Mouse的Win32 Application工程,再新建一个名为Mouse的C/C++头文件和一个名为Mouse的C++源程序,


 输入程序的框架代码,框架代码经常用到,每次提前抄到本子上,或者打印下来,复制粘贴有时出现莫名其妙的“unexpected end”错误,还是输进去的 可靠些


 (绿色部分是注释,必须以双斜杠“//”开头),有的一行太长会自动折到下一行:


头文件Mouse.h的内容是:

  
//申明函数原型
LRESULT CALLBACK MainWndProc(HWND,UINT,WPARAM,LPARAM);
BOOL Init
Application(HINSTANCE);
BOOL InitInstance(HINST
ANCE,int);


源程序Mouse.cpp的内容是:


#include <windows.h> 

#include <string.h> 
#include "
Mouse.h"


HINSTANCE hInst;

HWND hWndMain;


int APIENTRY WinMain(
    HINSTANCE hInstance,
    HINST
ANCE hPrevInstance,
    LPSTR lpCmdLine,

    int nCmdShow)
{
    
MSG msg;
//定义一个消息结构msg
    if(!InitApplication(hInstance))
        return (F
ALSE);

    if(!InitInstance(hInstance,nCmdShow))
        return (F
ALSE);
    while (Get
Message(&msg,NULL,0,0))
    {
        Translate
Mess
age(&msg);
        Dispatch
Message(&msg);
    }
    return (msg.wParam);
}
BOOL Init
Application(HINSTANCE hInstance)
{

    WNDCLASS wcMouse;
    wc
Mouse.style=0;
    wc
Mouse.lpfnWndProc=(WNDPROC)MainWndProc;
    
wcMouse.cbClsExtra=0;
    wc
Mouse.cbWndExtra=0;
    wc
Mouse.hInstance=hInstance;
   
 wcMouse.hInstance=hInstance;
    wc
Mouse.hIcon =LoadIcon(hInstance,IDI_APPLICATION);
    wc
Mouse.hCursor=LoadCursor(NULL,IDC_ARROW);
    wc
Mouse.hbrBackground=(HBRUSH)(14);
    wc
Mouse.lpszMenuName=NULL;
    wc
Mouse.lpszClassName="MouseWClass";
    return (RegisterClass(&wc
Mouse));
}
BOOL InitInstance(
    HINST
ANCE hInstance, int nCmdShow)
{

    hInst=hInstance; 
    hWnd
Main=CreateWindow(
    "
MouseWClass","使用鼠标",
    WS_OVERL
APPEDWINDOW,
    CW_USEDEF
AULT,CW_USEDEFAULT,
    CW_USEDEF
AULT,CW_USEDEFAULT,
    NULL,NULL,hInstance,NULL);


    ShowWindow(hWndMain,nCmdShow);
    UpdateWindow(hWnd
Main);
    return (TRUE);
}


再接着加入消息处理过程,这是本节关键知识,代码如下:


LRESULT 
APIENTRY MainWndProc(
HWND hWnd,UINT message,
WPARAM wParam,LPARAM lParam)
{
    char szTitle[50];
//存放标题字符串
    switch(message)
    {
        case W
M_LBUTTONDOWN:

            SetWindowText(hWnd
Main,"按下鼠标");
//替换标题栏显示
            
MessageBox(hWnd,"你按下的是鼠标左键!","提示",MB_OK|MB_ICONINFORMATION);
           
 break;
        case W
M_RBUTTONDOWN:
            SetWindowText(hWnd
Main,"按下鼠标");
            
MessageBox(hWnd,"你按下的是鼠标右键!","提示",MB_OK|MB_ICONINFORMATION);
            break;
        case W
M_MOUSEMOVE:
            wsprintf(szTitle,"%s(%d,%d)","鼠标位置",

    LOWORD(lParam),HIWORD(lParam)); //将鼠标位置存入一个字符串数组szTitle中
            SetWindowText(hWndMain,szTitle);//字符串显示到标题栏上
            break;
        case W
M_DESTROY:
            PostQuit
Message(0);
            break;
        default:
            return(DefWindowProc(hWnd,message,wParam,lParam));
    }
    return 0; 
}

保存一下文件使用鼠标2,单击编译条上的“构建”按钮使用鼠标3,构建程序,如果出现了错误,就在仔细检查一下,


 通过后再单击“执行”按钮使用鼠标4,运行一下自己的程序,分别单击左右按键和移动鼠标,看看程序的响应效果;


  本节学习了鼠标操作的编程知识,如果你成功地完成了练习,请继续学习下一课内容;


推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新Visual C++基础入门教程学习
热门Visual C++基础入门教程学习
编程开发基础子分类