1

我在多监视器 Linux 系统(Red Hat Enterprise Linux 6.4)上使用 MATLAB R2011a。答案可能取决于您使用的操作系统或图形子系统。

在多显示器系统上运行以下代码:

mons = get(0,'MonitorPositions') ;
first_monitor_width = mons(1,3) ; % width of first monitor in pixels
fig = figure ; % create a new figure window
x_pos = 0 ;
y_pos = 100 ;
x_dim = first_monitor_width + 300 ; % Set fig to be 300 pxwider than left monitor
y_dim = 500 ;
set(fig,'OuterPosition',[x_pos y_pos x_dim y_dim]) ; % Or use 'Position'; same.

我们要求图形的左边缘位于左侧显示器的左侧,宽度等于左侧显示器的宽度加上 300 像素。因此,该图应跨越两个监视器。

但是,MATLAB 创建的图形宽度等于左侧显示器的宽度(在我的计算机上,即 1920 像素)。

现在,一个转折:

手动(使用鼠标)拖动图形的右下角,使其跨越两个监视器(即图形的宽度大于一个监视器的宽度)。现在再次运行以下代码行:

set(fig,'OuterPosition',[x_pos y_pos x_dim y_dim]) ;

现在它起作用了!换句话说,一旦您强制图形“打破”监视器之间的障碍,MATLAB 会将整个连续显示空间视为单个画布。

请注意,如果您使用鼠标调整窗口大小,使其再次完全位于一个监视器内,然后set(fig,'OuterPosition', ...)再次运行调用,它将返回原始行为,即只允许在该单个窗口内调整图形大小。

我的问题是,我如何强制图形跨越多个监视器,完全在脚本中?就像,图形的属性是否类似于SpansMonitors = truefalse我可以使用set()调用设置?

4

1 回答 1

0

来自http://www.mathworks.com/help/matlab/creating_plots/positioning-figures.html

图形位置和窗口管理器 您计算机的窗口管理器控制显示器和虚拟桌面上的窗口布局。它可能不接受放置会导致整个图形或其顶部边框位于屏幕外的图形窗口的请求。窗口管理器也可能强制窗口具有某个最小或最大宽度或高度。此类操作可能会导致图形的位置与您指定的位置不同,并且结果可能因平台和窗口管理器而异。

这可能与 Metacity 窗口管理器有关。

于 2013-05-03T21:18:48.650 回答