wxWidgets处理用户输入
鼠标输入
基本的鼠标事件使用wxMouseEvent作为参数
在处理按钮事件时是对产生的wxCommandEvent类型进行处理,不需要自己处理底层的鼠标事件
基本的鼠标事件可以拦截鼠标左键、中键或者右键的鼠标按下,鼠标释放或者鼠标双击事件,鼠标的移动事件,鼠标正在移入或者移出某个窗口,以及鼠标的滚轮事件。
收到一个鼠标事件时,可以获得鼠标按钮的状态信息,以及shift、alt等状态键的信息,可以获得鼠标指针在窗口客户区的坐标值。
处理按钮和鼠标指针移动事件
按钮和指针移动事件是最主要的鼠标事件
要检测状态键状态,可以使用AltDown,MetaDown,ControlDown或者Shift-Down等函数,使用cmdDown函数来检测Mac OS平台上的Control键状态
检测鼠标按钮按下可以使用LeftIsDown,MiddleIsDown和RightIsDown函数,这些函数只反应事件产生时刻鼠标的状态,而不是鼠标的状态改变
用下面的函数表示鼠标事件类型:Dragging(某个键正按下时鼠标移动)、Moving(鼠标正在移动而没有鼠标键被按下)、Entering、Leaving、ButtonDown、ButtonUp、ButtonDClick、LeftClick、LeftDClick、LeftUp等
可以使用GetPosition函数或者GetX和GetY函数获取鼠标指针当前的设备单位位置,也可以给GetLogicalPosition函数传递某个设备上下文参数以便得到对应的逻辑位置
处理鼠标滚轮事件
当处理鼠标滚轮事件时,可以使用GetWheelRotation函数获得滚轮滚过的位置大小,除以GetWheelDelta以便得到实际滚动行数
处理键盘事件
键盘事件是由wxKeyEvent类表示,总共有三种不同类型的键盘事件,分别为:键按下、键释放和字符事件,当长按时一个键释放事件可能对应着多个键按下事件
要接受键盘事件,窗口需要拥有键盘焦点,可以通过wxWindow::SetFocus设置
要获得按键编码,可以使用GetKeyCode函数
键盘事件提供的是未翻译的按键编码,而字符事件提供的是翻译以后的字符编码,对于未翻译的按键编码来说,字母永远是大写字符,而其他字符则是在WXK_XXX中定义的字符,而对于已经翻译的按键编码来说,字符的值和同样的按键在一个文本编辑框中产生的字符相同
例如:按下A键后,在KEY_DOWN事件中的字符编码是大写字母A的ASCII码65,而在相应的字符事件中的字符编码是小写的ASCII码a,编码为97,换句话说,当shift和A键同时被按下,上述两个事件中的编码是一样的
加速键是为了实现通过某种组合键来快速执行菜单命令,最简单的定义加速键的方法是在菜单项定义函数中加上加速键
将\t后的内容翻译为加速键增加到菜单的加速键表中
另外一种设置加速键的方法是使用wxAcceleratorEntry对象定义一个加速键表,然后使用wxWindow::SetAcceleratorTable函数将其和某个窗口绑定。每一个wxAcceleratorEntry记录是由一个修饰键比特位值和一个字符或者功能键以及一个窗口标识符组成的