在Matlab的GUI中的figure中常用的按键响应有两个:WindowKeyPressFcn和WindowKeyReleaseFcn,分别表示按下按键和释放按键的响应函数,两者调用形式上是一样的。
以WindowKeyPressFcn为例,来说明快捷键的使用方式。按键响应无论当前焦点在figure上还是控件上,这一点和鼠标响应有所不同。
发生按键的figure和以事件数据结构,事件数据结构中包含了按键的各种信息,如下:
Field Value Class
Character 's' char
Modifier <1*0 cell> cell
Key 's' char
意义分别为:
Character表示按键实际会显示的字符,如shift+k,则此值为K,只按下shift,则此值为空;
Modifier是一个元胞类型,包含所按所有修饰键的名字,如按下ctrl+shift+a,则此值为{'shift' ,'control'};
Key表示按键的名称,如k,a,multiply,delete等。
要注意,由于不可能同时按下两个键,所以多按键是挨个响应的,如按下ctrl+shift+a。
以上的三个参数是在WindowKeyPressFcn函数中的参数eventdata中的。
例子如下所示:
ctrl0=eventdata.Modifier;
if isempty(ctrl0)
ctrl='';
else
ctrl=ctrl0{1};
end
key=eventdata.Key;
switch ctrl
case 'control'
switch key
case 'q' %ctrl+q
% 添加相应的操作
case 'w' %ctrl+w
% 添加相应的操作
case 'e' %ctrl+e
% 添加相应的操作
end
case 'shift'
% 添加相应的操作
case 'alt'
% 添加相应的操作
case ''
% 添加相应的操作
end