mfc 鼠标、键盘响应事件

一、基本目标

1、有一个基本的MFC程序,点击“关闭”则“关闭”这个程序,这点没什么好讲的,把自带的“取消”按钮,右键->属性的Caption改成“关闭”二字就可以了

2、鼠标在对话框中移动,则显示其位置信息,这个坐标是窗口内部坐标

3、如果按着鼠标右键移动鼠标,则在这个工程的标题栏会显示“按着鼠标右键移动鼠标”,松开鼠标右键回复如初

4、如果按着键盘上的Ctrl键或者Shift键在对话框的窗口中移动鼠标,标题栏同样会有相应的提示,是否同时按下也会有提示

5、左击对话框,会弹出对话框,显示鼠标位置在哪里

二、制作过程

1、首先新建一个MFC工程,除了自带的“取消”按钮改名为“关闭”以外,统统删去,拖出一个静态文本放在窗口的中间,注意这个静态文本的尺寸就足够大,否则无法容纳“鼠标处于X=?,Y=?的位置”这样的字体,如下图所示,这个不再展开赘述,可以参考我之前的《【mfc】学生信息管理,实现List控件节点的增删改查》(点击打开链接)。

2、注意,要把静态文本的属性中的样式中的“排列文本”改成“居中”

3、拖完控件,开始添加鼠标响应、键盘响应的事件,下面只添加鼠标响应时间即可,键盘响应可以放在鼠标响应的函数内部的实现,添加响应事件的过程先选择“查看”->“新建类向导”

4、之后则弹出如下的对话框,在右下角的Messages框中,找到WM_LBUTTONDOWN与WM_MOUSEMOVE,双击,或者单击后,选择右方的“Add Function”,之后点击确认或者Edit Code,即可,这里的意思是:告诉MFC,在这个对话框中点击鼠标的左键,移动鼠标,有响应的处理函数。

5、点击Edit Code则自动跳到ClassView中的代码页,点击“确定”的则要自己手动切过去,此时,在ClassView中就多了刚才我们自己添加的”响应类“,或者我更加喜欢称其为“响应函数”,反正你懂是什么就行了,我知道又有理论帝喷我不专业,反正你喜欢。点击这两个响应函数,分别写代码,这两个响应事件函数,请分别在原有的// TODO: Add your message handler code here and/or call default与CDialog::OnLButtonDown(nFlags, point);之间写代码

6、对于void CMouseDlg::OnLButtonDown(UINT nFlags, CPoint point)要完成左击对话框就显示鼠标位置在哪里的使命,

见如下代码:

[cpp] view plain copy print?

  1. void CMouseDlg::OnLButtonDown(UINT nFlags, CPoint point)
  2. {
  3. // TODO: Add your message handler code here and/or call default
  4. CString str;
  5. //可以用point.x,point.y这两个成员变量之间取出鼠标的位置,注意到,此函数的头,系统已经自动带入了鼠标类CPoint point
  6. str.Format("点下左键时,鼠标处于x=%d,y=%d的位置",point.x,point.y);
  7. AfxMessageBox(str);
  8. CDialog::OnLButtonDown(nFlags, point);
  9. }

7、对于void CMouseDlg::OnMouseMove(UINT nFlags, CPoint point)是鼠标移动时候的函数。

鼠标响应事件里面附带键盘响应时间就如下面所下,不为什么。

[cpp] view plain copy print?

  1. void CMouseDlg::OnMouseMove(UINT nFlags, CPoint point)
  2. {
  3. // TODO: Add your message handler code here and/or call default
  4. //同理,取出鼠标的位置,放到静态文本中
  5. CString str;
  6. str.Format("鼠标处于x=%d,y=%d的位置",point.x,point.y);
  7. SetDlgItemText(IDC_STATIC,str);
  8. //如果按下Ctrl而没有按下Shift
  9. if((MK_CONTROL & nFlags) && !(MK_SHIFT & nFlags))
  10. //设置对话框的标题为“按下了Ctrl在移动鼠标”
  11. SetWindowText("按下了Ctrl在移动鼠标");
  12. //如果没有按下Ctrl而按下Shift
  13. else if (!(MK_CONTROL & nFlags) && (MK_SHIFT & nFlags))
  14. SetWindowText("按下了Shift在移动鼠标");
  15. //如果同时按下Ctrl与Shift
  16. else if ((MK_CONTROL & nFlags) && (MK_SHIFT & nFlags))
  17. SetWindowText("按下了Ctrl+Shift在移动鼠标");
  18. //如果按下鼠标的右键
  19. else if (MK_RBUTTON & nFlags)
  20. SetWindowText("按下了鼠标右键在移动鼠标");
  21. //如果什么都没有按下
  22. else
  23. SetWindowText("mouse");
  24. CDialog::OnMouseMove(nFlags, point);
  25. }

到这里编译之后,就完成了整个工程了,必须注意的是:

对于void CMouseDlg::OnLButtonDown(UINT nFlags, CPoint point)与void CMouseDlg::OnMouseMove(UINT nFlags, CPoint point)都是鼠标左击对话框一次与鼠标在对话框内移动一次就执行一次。

CString str,是Win32程序读有的字符串,设置其值的方式,请用其自带的Format()方法,因为其本质是类,不是一个单独的变量,不能直接等于

时间: 2024-10-25 20:26:06

mfc 鼠标、键盘响应事件的相关文章

Matlab学习---------GUI键盘响应事件的学习

键盘响应事件的学习主要知识: 实例:创建一个GUI,添加两个输入框,一个按钮,实现输入数据之后点击按钮进行验证,验证成功之后关闭当前界面打开新的界面: (1)创建一个新的GUI界面:(添加组件并修改属性) (2)右键按钮添加点击事件响应函数: (3)右键界面,添加键盘按键响应函数: function varargout = gui_key(varargin) % GUI_KEY MATLAB code for gui_key.fig % GUI_KEY, by itself, creates a

WPF:检测用户在一定时间内没有动作(即没有鼠标键盘的事件)

参考的网址有: http://bbs.csdn.net/topics/100033612 http://blog.csdn.net/dengta_snowwhite/article/details/6154199 详细做法: 1.定义结构体 [StructLayout(LayoutKind.Sequential)]    struct LASTINPUTINFO    {        // 设置结构体块容量        [MarshalAs(UnmanagedType.U4)]       

【mfc】鼠标、键盘响应事件

对于mfc这东西,你真的必要跟我扯一大堆怎么类,什么派生,什么鬼东西 告诉我怎么做出一个个小功能,我记住它就可以了 这期为大家带来MFC的鼠标响应事件 这也是所谓的MFC中的"消息映射事件" 一.基本目标 1.有一个基本的MFC程序,点击"关闭"则"关闭"这个程序,这点没什么好讲的,把自带的"取消"按钮,右键->属性的Caption改成"关闭"二字就可以了 2.鼠标在对话框中移动,则显示其位置信息,这

JS 鼠标键盘HTML事件

TrackEvent 鼠标键盘各种事件

package com.wxq.learning; import java.awt.Color; import java.awt.GridLayout; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseEvent; i

3D Slicer Modify Mouse Event 修改3D Slicer中的鼠标响应事件

在3D Slicer中,我们如果想在自己写的插件中来修改默认的鼠标响应事件的话,就需要先将原有的响应事件链接删除,然后建立自定义的响应事件链接,然后将自己要实现的功能写在响应事件函数中. 比如Slicer中默认的鼠标左键拖拽,是任意旋转视图中的Camera,默认中的滑轮操作是拉远和拉近视图摄像机,默认的鼠标右键操作也是拉远和拉近视图摄像机的操作.这样滑轮就和鼠标右键的功能重复了,我们可以让鼠标右键实现其他的功能.比如在模型的Pitch, Yaw, Roll三个旋转方向上(其实旋转的只是试图中的摄

【PyQt5-Qt Designer】鼠标+键盘事件

重定义鼠标响应+键盘响应事件 一,每个事件都被封装成相应的类: pyqt中,每个事件类型都被封装成相应的事件类,如鼠标事件为QMouseEvent,键盘事件为QKeyEvent等.而它们的基类是QEvent. 二,基类QEvent的几个重要方法: accept() 表示事件已处理,不需要向父窗口传播 ignore()表示事件未处理,继续向父窗口传播f type()返回事件类型,如QtCore.QEvent.MouseButtonPress,一般由基事件调用.因为其它事件已经知道自己的事件类型了.

小胖说事22-----iOS开发技巧之取消键盘响应和截屏功能

1.UILable内容模糊 在非Retina的iPad mini 的屏幕上,一个UILable的frame的origin值如果是有小数位(如0.5),就会造成显示模糊,所以最好还是用整数值的origin. 2.取消键盘响应 取消键盘响应事件,一般都会用到resignFirstResponder,但是还有三种方法可以取消键盘的响应. 第一种:重载UIViewcontroller中的touchesBegin方法,然后在里边执行 [self.view endEditing:YES]:这样单击UIVie

MFC 对话框Dialog响应键盘事件

OnKeyDown不行 Dialog程序本来没有直接响应键盘的事件,如果你用OnKeyDown会发现不起作用. 那么你想按下"左键"."W键"."9键盘"应该怎么响应呢? 重载基类的BOOL PreTranslateMessage(MSG* pMsg)函数 最简单的键盘响应函数 头文件声明: BOOL PreTranslateMessage(MSG* pMsg); 源文件定义: BOOL CmfcDlg::PreTranslateMessage(