Why does gcf in a GUIDE figure give the parent?

2 ビュー (過去 30 日間)
Douglas Anderson
Douglas Anderson 2022 年 3 月 4 日
編集済み: Douglas Anderson 2022 年 3 月 4 日
Hello,
I've created a number of GUIDE windows called within one app, and one of them I would like to maximize. I have tested that window with a .m test file, and it works fine using
fh = gcf
fh.Window = 'Maximize'
If I insert this in the overarching GUIDE program (that's also a GUIDE figure), it won't maximize because the calling app figure is non-resizable. Obviously I am missing something regarding how the current figure gets passed to the child.
Thoughts? Thanks!
Doug

採用された回答

Walter Roberson
Walter Roberson 2022 年 3 月 4 日
A figure becomes the current figure under any of the following circumstances:
  • the figure is created with figure() [or some routine calling figure() that ends up creating a figure]
  • the figure is made active by calling figure() and passing in a reference to the figure
  • any part of the figure is clicked in (and hit testing is on for any layer of the figure at that location)
If a figure is the current figure and it is deleted, then generally speaking, no other figure will necessarily become the current figure -- they are not defined as "stacking". However, some of the behaviour with creating dialogs such as inputdlg() tends to flow as-if it was going back to the figure that was active at the time the dialog or message was created (those dialogs and pop-up messages are actually figures.) Testing would have to be done to see exactly how that happens.
So... if your overarching GUIDE program is calling into the other GUIDE window because the user clicked something in the overarching GUIDE program... then that overarching GUIDE program became the current figure.
GUIs and figures are the same thing to MATLAB: a GUI is just behaviour attached to a figure, and any figure can have behaviour attached to it.
In your case, if you need the secondary GUIDE program to be able to find its handles by using gcf, then in the overarching program, use figure() passing in the handle of the secondary GUIDE program to make it the current figure.
  1 件のコメント
Douglas Anderson
Douglas Anderson 2022 年 3 月 4 日
編集済み: Douglas Anderson 2022 年 3 月 4 日
Thank you very much, Walter, once again.
I am not sure how to "use figure() passing in the handle of the secondary GUIDE program". Each of them is created as .fig files, and I have plotted axes (successfully in the test case), so I want to display and print the called figure. The calling program, after a button press, just sends different parameters to this program (plot_spectra) to determine what type of spectrum to plot, and what to do with the plot (print, save, discard, etc.) based upon which button is pressed.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeMigrate GUIDE Apps についてさらに検索

製品


リリース

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by