《Windows程序设计》读书笔记------------->>鼠标基础和显示区域鼠标消息<<

来源:互联网 发布:四元数姿态解算python 编辑:程序博客网 时间:2024/06/10 21:21

计算机法真的很快,我2年前的电脑现在就已经不怎么行了,连一个杀毒软件都算大型。。。虽然 Charles Petzold说,鼠标不是必需的。不过现在看来,没有鼠标的电脑是没有办法想象的。可能一个程序不知此键盘没有什么人会抱怨,不过不支持鼠标就是天大的罪过了。毕竟,鼠标的出现让电脑易用性大幅度提高,而计算机的普及才是真正推动计算机发展的动力吧。。。。不然MONEY哪里来呀。。

所以,在事实上,检测鼠标是否存在的意义并不是很大,不过既然有这个函数,那就记录把:

fMouse = GetSystemMetrics (SM_MOUSEPRESENT) ;        //检测鼠标是否存在

cButtons 
= GetSystemMetrics (SM_CMOUSEBUTTONS) ;      //检测鼠标按键数

fSwap
=GetSystemMetrics (SM_SWAPBUTTON) ;       //检测是否反键

除了检测外,还可以制定鼠标的图标,在建立窗口的时候可以指定:

wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;

显示区域鼠标消息

和其他的消息相同,鼠标消息也是从消息循环中取得的,它们的消息有:

按下

释放

按下(双键)

WM_LBUTTONDOWN

WM_LBUTTONUP

WM_LBUTTONDBLCLK

WM_MBUTTONDOWN

WM_MBUTTONUP

WM_MBUTTONDBLCLK

WM_RBUTTONDOWN

WM_RBUTTONUP

WM_RBUTTONDBLCLK

使用方法也和其他的相同,其中,鼠标的坐标由lParam传递

= LOWORD (lParam) ;        
= HIWORD (lParam) ;

同时,可以通过位与(这个。。。我没学好,忘记叫什么了)的方式获得是否在点击的同时按下了SHIFT等按键:

MK_LBUTTON

按下左键

MK_MBUTTON

按下中键

MK_RBUTTON

按下右键

MK_SHIFT

按下Shift键

MK_CONTROL

按下Ctrl键

例如,如果收到了WM_LBUTTONDOWN消息,而且值

wparam & MK_SHIFT

是TRUE(非0),您就知道当左键按下时也按下了Shift键。

 

处理双键的时候,需要在窗口样式中指定支持:

wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS ;

 

既然知道了具体的怎么实现,那么就写一个例子吧,书上的例子除了用到了鼠标消息外还有其他的一些知识。我比较懒,就直接写了个单单关于鼠标消息的例子了:)

其他部分都是自动生成的,就贴出消息处理那部分好了,主要要提前定义变量就是了。

 

    case WM_LBUTTONDOWN:
        x
=LOWORD(lParam);
        y
=HIWORD(lParam);
        count
++;
        InvalidateRect(hWnd,NULL,
0);
        
break;
    
case WM_PAINT:
        hdc 
= BeginPaint(hWnd, &ps);
        
// TODO: 在此添加任意绘图代码...
        MoveToEx(hdc,p.x,p.y,NULL);
        
if(count==1)MoveToEx(hdc,x,y,0);
        LineTo(hdc,x,y);
        p.x
=x;
        p.y
=y;
        EndPaint(hWnd, 
&ps);
        
break;

 

原创粉丝点击