鼠标移动到相应位置显示对应数据以及画出十字光标,此时点击键盘右键则十字光标向右移动,点击键盘左键则十字光标向左移动。
鼠标部分已经可以实现左右移动,但键盘仍无法控制移动。
问题如下:
- 我尝试键盘操作时,直接获取鼠标位置。
结果:只能单次移动,例:鼠标位置在x=1处,点击右键x=2,再次点击右键无变化(因为点击右键时都会执行读取鼠标位置操作,导致每次都是从x=1处右移一位);此时点击左键,x=0,再次点击左键无变化(原因同上)。
currPt = get(gca, 'CurrentPoint');
x0 = currPt(1,1);
y0 = currPt(1,2);
2.使用坐标线handle.A,handle.B获得位置信息x0,y0 --> 改变位置 --> 更新handle.A,handle.B
结果:handle.A,handle.B传递的是数组,尝试添加 x0=x0(1);和y0=y0(1); 运行结果错误。
x0 = get(handles.A, 'XData');
y0 = get(handles.B, 'YData');
x0=x0(1);
y0=y0(1);
% 键盘操作
function figure1_WindowButtonMotionFcn(hObject, eventdata, handles)
keyReleased = get(gcf, 'CurrentKey');
% 获取x0,y0,用于后续操作
x0 = get(handles.A, 'XData');
y0 = get(handles.B, 'YData');
% 改变x0,y0的值,从而改变十字坐标线
if strcmp(keyReleased, 'rightarrow')
x0 = x0 + 1;
elseif strcmp(keyReleased, 'leftarrow')
x0 = x0 - 1;
else
return;
end
3.我想着使用一个变量仅存储鼠标位置,由于实现上的偏差,最终结果仍和(1.)的错误相同。
function figure1_WindowButtonMotionFcn(hObject, eventdata, handles)
global currentMousePosition;
currPt = get(gca, 'CurrentPoint');
x0 = currPt(1,1);
y0 = currPt(1,2);
currentMousePosition = [x0, y0];
function figure1_WindowButtonMotionFcn(hObject, eventdata, handles)
global currentMousePosition;
x0 = currentMousePosition(1);
y0 = currentMousePosition(2);
%改变x0,y0值,并改变十字光标
鼠标操作如下:
#鼠标
function figure1_WindowButtonMotionFcn(hObject, eventdata, handles)
#获取鼠标位置
currPt = get(gca, 'CurrentPoint');
x0 = currPt(1,1);
y0 = currPt(1,2);
Xminmax = get(gca,'Xlim');
Yminmax = get(gca,'Ylim');
if Xminmax(1)<=x0&&x0<=Xminmax(2)&&Yminmax(1)<=y0&&y0<=Yminmax(2)
x0=round(x0);
#画出十字坐标线
try
set(handles.A,'XData',Xminmax,'YData',[y0,y0]);%水平线
set(handles.B,'XData',[x0,x0],'YData',Yminmax);%竖直线
catch
handles.A = line(Xminmax,[y0,y0],'Color','magenta');
handles.B = line([x0,x0],Yminmax,'Color','magenta');
guidata(hObject, handles);
end