matlab中figure对象的按键响应

[转载] http://blog.sina.com.cn/s/blog_6163bdeb0100n9cq.html

常用的有两个WindowKeyPressFcn和WindowKeyReleaseFcn,分别表示按下按键和释放按键的响应函数,两者调用形式上是一样的。

1、说明

以indowKeyPressFcn为例,按键响应无论当前焦点在figure上还是控件上,这一点和鼠标响应有所不同。它的响应函数需要至少两个参数,即发生按键的figure和event结构体。
even结构中包含了按键的各种信息,如下图


其中含义如下

  • Character表示按键实际会显示的字符,如shift+k,则此值为K,只按下shift,则此值为空;
  • Modifier是一个元胞类型,包含所按所有修饰键的名字,如按下ctrl+shift+a,则此值为{‘shift’ ,’control’};
  • Key表示按键的名称,如k,a,multiply,delete等。

2、简单的测试程序

%% 测试windowkeypressfcn响应函数
function keypress_test
clc
close all
clear all
%%
fig = figure;
plot(1:10)
set(fig,'windowkeypressfcn',@keypressfcn);
set(fig,'windowkeyreleasefcn',@keyreleasefcn);
    function keypressfcn(h,evt)
        fprintf('************press \n');
        evt
        fprintf('************ \n');
    end
    function keyreleasefcn(h,evt)
        fprintf('************release \n');
        evt
        fprintf('************ \n');
    end

end

要注意,由于不可能同时按下两个键,所以多按键是挨个响应的。如按下ctrl+shift+a时,输出打印如下

************press
evt =
    Character: ''
     Modifier: {'control'}
          Key: 'control'
************
************press
evt =
    Character: ''
     Modifier: {'shift'  'control'}
          Key: 'shift'
************
************press
evt =
    Character: ''
     Modifier: {'shift'  'control'}
          Key: 'a'
************
************release
evt =
    Character: ''
     Modifier: {'shift'  'control'}
          Key: 'a'
************
************release
evt =
    Character: ''
     Modifier: {'control'}
          Key: 'shift'
************
************release
evt =
    Character: ''
     Modifier: {1x0 cell}
          Key: 'control'
************

可知按下顺序为control—shift—a,释放顺序为a—shift—control。

3、通过按下按键,从停止位置继续运行

gcf是Current figure handle,调用get函数得到curent figure的CurrentCharacter属性。判断是否按下e键,从而从while中跳出去继续运行。程序如下所示

figure;
pause(1);
while 1
    pause(0.1)
    if strcmpi(get(gcf,'CurrentCharacter'),'e')
        break;
    end
end
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值