MFC 鼠标和键盘

  MFC 鼠标和键盘  2012-12-09 23:03:27

分类: C/C++

1. 鼠标
1)鼠标信息分为两类:客户区消息和非客户区消息
   注:鼠标消息总是被发送到光标所在的窗口,比如:用户在A窗口按下鼠标左键,在B窗口释放鼠标左键,那么在A窗口会收到消息WM_LBUTTONDOWN,而在B窗口会收到WM_LBUTTONUP。
2)滚轮
   在鼠标滚轮滚动时,系统会不停发送WM_MOUSEWHEEL给接收窗口,窗口会调用类CScrollView中默认的消息处理函数。
3)鼠标捕获
   鼠标捕获就是窗口接收到鼠标按键按下消息后,在鼠标按键释放之前仍然可以接收鼠标消息,直到鼠标按键释放或者撤销鼠标捕获。 鼠标捕获解决了窗口需要接收的鼠标消息在窗口外的问题
   MFC使用 SetCapture来捕获鼠标,用 ReleaseCapture撤销鼠标捕获
4)光标
   鼠标在屏幕上的显示。每个窗口都对应一个WNDCLASS结构:
typedef struct tagWNDCLASSW {
    UINT        style;
    WNDPROC     lpfnWndProc;
    int         cbCl***tra;
    int         cbWndExtra;
    HINSTANCE   hInstance;
    HICON       hIcon;
    HCURSOR     hCursor;
    HBRUSH      hbrBackground;
    LPCWSTR     lpszMenuName;
    LPCWSTR     lpszClassName;
} WNDCLASSW, *PWNDCLASSW, NEAR *NPWNDCLASSW, FAR *LPWNDCLASSW;
里面定义了窗口类的基本属性,其中字段HCURSOR     hCursor保存了光标的句柄,该光标就是在窗口客户区上显示的样式。
    鼠标移动的处理过程:用户移动的鼠标->Windows系统通过重绘光标背景将光标从旧的位置清除->系统对光标所在窗口发送命中测试码WM_SETCURSOR消息->窗口调用消息响应函数::OnSetCursor判断光标所在区域,实现光标在新的位置呈现
 
2. 键盘
   用户按下或释放某个按键一下,就会产生一个中断,该中断激活键盘驱动程序KEYBOARD.DRV来对键盘中断进行处理,KEYBOARD.DRV程序会根据用户的不同操作进行编码,然后调用Windows用户模块USER.EXE生成键盘消息,并将该消息发送到消息队列中等候处理。
1)键盘消息,按下/释放
WM_KEYDOWNW---WM_KEYUP
WM_SYSKEYDOWNW---WM_SYSKEYUP
   击键消息分为系统击键消息和非系统击键消息。系统击键消息是指由Alt键和其他键组合而产生的按键消息以及操作按键F10产生消息。系统消息将交由Windows的函数DefWindowProc处理。如果用户要处理,应该在处理完这些消息后,再将其发送给函数DefWindowProc,以使Windows系统能够正常工作。
   除了系统击键消息以外的所有键盘消息都是非系统击键消息,用于应用程序窗口
   键盘字符消息:WM_CHAR/WM_SYSCHAR
   击键消息的处理函数:afx_msg void OnMsgName(UINT nChar, UINT nRepCnt, UINT nFlags)
MsgName可以是KEYDOWN, KEYUP,其中nChar,按键的虚拟键代码,nRepCnt按键重复的次数,nFlags包含按键扫描码和多个标志。
2)焦点
   鼠标消息-->向光标所在的窗口发送消息
   键盘消息-->向具有“输入焦点”的窗口发送消息
   通常情况下,具备输入焦点的窗口是活动应用程序的主窗口,也可能属于主窗口的子窗口或者对话框的编辑控件
   WM_SETFOCUS/WM_KILLFOCUS使得窗口获得或失去输入焦点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值