在多监视器配置中确定MATLAB的监视器

Eri*_*ric 5 matlab position multiple-monitors matlab-figure matlab-gui

我从公司网站到另一个网站移动很多.在任何一天,我可能只有我的笔记本电脑或多达四台显示器.有了多个显示器,我不知道我将选择使用哪个显示器用于MATLAB主GUI(双击matlab.exe时启动的主GUI).这取决于可用监视器的分辨率.

我使用的脚本利用程序生成的GUI(而不是GUIDE),似乎MATLAB总是在第一台显示器上弹出它们.我研究了一点,发现通过使用定位图形用户界面来选择的显示器p = get(gcf, 'Position'),set(0, 'DefaultFigurePosition', p)movegui命令,但这次如果我事先知道我要使用的显示器才有效.

有没有办法找出主要的MATLAB GUI在哪台显示器上运行,并在同一台显示器上弹出其他小的GUI?

Dev*_*-iL 6

我们可以使用一些Java技巧来获取当前监视器;请参阅下面带有注释的代码:

function mon = q37705169
%% Get monitor list:
monitors = get(groot,'MonitorPositions'); % also get(0,'MonitorPositions');
%% Get the position of the main MATLAB screen:
pt = com.mathworks.mlservices.MLEditorServices.getEditorApplication.getActiveEditor.getComponent.getRootPane.getLocationOnScreen;
matlabScreenPos = [pt.x pt.y]+1; % "+1" is to shift origin for "pixel" units.
%% Find the screen in which matlabScreenPos falls:
mon = 0;
nMons = size(monitors,1);
if nMons == 1
  mon = 1;
else
  for ind1 = 1:nMons    
    mon = mon + ind1*(...
      matlabScreenPos(1) >= monitors(ind1,1) && matlabScreenPos(1) < sum(monitors(ind1,[1 3])) && ...
      matlabScreenPos(2) >= monitors(ind1,2) && matlabScreenPos(2) < sum(monitors(ind1,[2 4])) );
  end
end
Run Code Online (Sandbox Code Playgroud)

几点注意事项:

  • 根属性文档
  • 输出值“0”表示出现问题。
  • 可能有一种更简单的方法来获取“RootPane”;我使用了一种我有很好经验的方法。
  • 如果您的 MATLAB 窗口跨越多个监视器,这将仅识别其中一个监视器。如果需要此功能,您可以使用com.mathworks.mlservices.MLEditorServices.getEditorApplication.getActiveEditor.getComponent.getRootPane.getWidthetc. 找到 MATLAB 窗口的其他角并对它们进行相同的测试。
  • 在找到第一个有效监视器后,我没有费心打破循环,因为它假设:1)只有一个监视器有效。2)循环必须处理的监视器总量很小。
  • 对于勇敢的人来说,可以用多边形进行检查(即inpolygon)。