2014-04-24 110 views
0

我试图创建一个相当于一个程序之间的交互如下:键盘回调和鼠标回调

1,按空格

2 - “禁用”的KeyPressFcn功能

3播放声音

4-使鼠标操作

5-声音将被播放

6- “使能” 再KeyPressFcn功能

7回1

function figure1_KeyPressFcn(hObject, eventdata, handles) 
    switch eventdata.Key 
     case 'space' 
      set(hObject, 'KeyPressFcn', [])      
      soundsc(y,Fs);    
     otherwise 
      disp('error'); 

    end 
end 


function pushbutton1_Callback(hObject, eventdata, handles) 
    soundsc(y,Fs); 
    set(hObject, 'KeyPressFcn', {@figure1_KeyPressFcn, handles}) 
    guidata(hObject, handles); 
end 

步骤6不起作用,所以问题是,如何从一个mousecallback设置hObject为KeyPressFcn?

回答

1

所以,一些背景它的顺序。 hObject不是您设置的属性。它实际上是调用被使用的函数的对象的句柄。所以,当你在inpushbutton1_Callback中使用它时,你实际上是为按钮1设置KeyPressFunction!这就是为什么它只能运行一次。相反,试试这个:

set(handles.figure1, 'KeyPressFcn', {@figure1_KeyPressFcn, handles})