Managing multiple figures in a GUI

조회 수: 4 (최근 30일)
Eduardo Nigro
Eduardo Nigro 2012년 5월 24일
I have 2 figures in a GUI and I want to have one of them (smaller one) always on top of the other one (larger one) even when the larger one is the active figure. How can I achieve that?
Note: I don't want to have the smaller figure as a 'modal' since I am actively interacting with the larger one.
  댓글 수: 2
Oleg Komarov
Oleg Komarov 2012년 5월 24일
Why don't you embed what the small active figure does in the big one?
Eduardo Nigro
Eduardo Nigro 2012년 5월 25일
Good point Oleg. I am trying to avoid that for two reasons:
1) The main window is packed!
2) It's a feature that users may turn on and off. I don't want it taking up real state space in the main window. The other option such as rearranging objects in the main window when I turn the feature on will make it too busy.
Thanks anyway. I may have to go that route if I can't figure it out...

댓글을 달려면 로그인하십시오.

채택된 답변

Walter Roberson
Walter Roberson 2012년 5월 25일
Unfortunately in some window managers, only the upper-most window can receive keyboard input. On those systems, this is not under the control of the individual programs.
The two relevant controls in window managers are often known as "autoraise" and "click to type". "click to type" means that you need to click on a window in order for it to receive keyboard input, but does not in itself imply anything about the window being brought to the foreground. "autoraise" means that as soon as you interact with a window it is brought to the foreground.
For many years I worked on a Unix system configured with autoraise and "click to type" both turned off. I found that to be very productive. For example I could have a small document with some text I needed in the foreground, and have my larger active window underneath, and then I could transcribe from the one to another with both areas of interest visible. With the OS-X system I am using now, the document I am typing into must be the foreground, so I would have to keep raising my edit window to type to it, hiding the window that had the information I needed to type in. A challenge to short term memory.
Anyhow...
  댓글 수: 2
Walter Roberson
Walter Roberson 2012년 5월 25일
Now that I think of it, autoraise might have been to automatically raise a window if you moused over it for sufficiently long (and it wasn't very long at all.) [Yikes, the amount I have forgotten over the years...]
Eduardo Nigro
Eduardo Nigro 2012년 5월 29일
Hi Walter. Thanks for the answer. I did work with UNIX systems some 15 years ago and I do recall that feature (probably why I thought it would be straight forward to implement it in MS Windows).
As a solution for now, I am "creating" my own window using uicontrols such as frames, text boxes and buttons that will stay on top if defined at the very end of my GUI layout portion of the code.
However, minimize, restore and window drag functionalities have to be coded now, instead of being taken for granted!

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Stephen
Stephen 2012년 5월 24일
just don't make the large on active and change stuff on it using its handle and set()
  댓글 수: 1
Eduardo Nigro
Eduardo Nigro 2012년 5월 25일
Thanks Stephen. But the stuff I will be changing in the main window is based on mouse click and mouse motion events (in the main window) which to my knowledge automatically make it active.
Basically, if I am clicking and dragging objects in the main window, I want the smaller one to stay on top and update some of its objects in real time. That's where I am stuck.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Environment and Settings에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by