2016-06-08 14 views
5

회사 사이트에서 다른 곳으로 많이 이동합니다. 어느 날, 필자는 랩탑이나 모니터를 4 대까지 사용할 수 있습니다. 다중 모니터의 경우 어떤 모니터를 MATLAB 기본 GUI (기본 GUI는 matlab.exe를 두 번 클릭했을 때 실행)로 사용할지 선택하지 않습니다. 사용 가능한 모니터의 해상도에 따라 다릅니다.다중 모니터 구성에서 MATLAB 모니터 확인

프로그래밍 방식으로 생성 된 GUI (GUIDE가 아닌)를 사용하는 스크립트를 사용하며 MATLAB이 항상 첫 번째 모니터에서이를 팝하는 것으로 보입니다. 조금 연구를하고 p = get(gcf, 'Position'), set(0, 'DefaultFigurePosition', p)movegui 명령을 사용하여 GUI를 모니터 선택 위치로 지정했으나 사용하려는 모니터를 미리 알고있는 경우에만 작동합니다.

메인 MATLAB GUI가 어떤 모니터인지 확인하고 동일한 모니터에서 다른 작은 GUI를 팝업 할 수있는 방법이 있습니까?

답변

4

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 

몇 가지 참고 사항 :

  • Root properties documentation.
  • "0"의 출력 값은 무엇인가 잘못되었음을 의미합니다.
  • "RootPane"을 가져 오는 더 쉬운 방법이있을 수 있습니다. 나는 좋은 경험을 가진 방법을 사용했습니다.
  • 이것은 MATLAB 창이 여러 모니터에 걸쳐있는 경우에만 모니터 중 하나를 인식합니다. 이 기능이 필요한 경우 com.mathworks.mlservices.MLEditorServices.getEditorApplication.getActiveEditor.getComponent.getRootPane.getWidth 등을 사용하여 MATLAB 창의 다른 모서리를 찾고 동일한 테스트를 수행 할 수 있습니다.
  • 첫 번째 유효한 모니터를 찾은 후에 루프가 끊어지는 것을 걱정하지 않았습니다. 1) 하나의 모니터 만 유효합니다. 2) 루프가 처리해야하는 모니터의 총량이 적습니다.
  • 용감한 사용자에게는 다각형 (즉, inpolygon)으로 확인을 수행 할 수 있습니다.