《量化投资:以MATLAB为工具》

MATLAB技术论坛

 找回密码
 注册账号
查看: 20548|回复: 15
收起左侧

[基础] MATLAB中实现Figure窗体最大化、最小化、置顶功能

    [复制链接]
发表于 2013-1-15 19:25:47 | 显示全部楼层 |阅读模式
有时我们绘图希望figure直接最大化、甚至全屏,虽然用的不多,但是需要用来还真不是一个小问题哦!

首先悄悄告诉大家,不要试图从MATLAB帮助文档中去寻求答案了,因为MATLAB压根没有提供相关功能的函数!但是这不妨碍我们曲线救国!

(1)最简单的方法就是设置的figure的outerposition或者position属性为screensize,这个方法并非真正的最大化,只是调整了figure的大小和坐标而已!
  1. sz=get(0,'screensize');
  2. figure('outerposition',sz);
复制代码
(2)地球人都知道,matlab是使用Java做框架和界面,于是只要从Java入手,应该可以毫无压力的搞定这些日常操作:
  1. h=figure;
  2. jFrame=getJFrame(gcf); %或者jframe=getJFrame(h);
  3. jFrame.setMaximized(1); %最大化figure
  4. jFrame.setMinimized(1); %最小化figure
  5. jFrame.setAlwaysOnTop(1); %将figure置顶
复制代码
需要用掉下面的getJFrame.m代码,具体可以查看这里,另外感谢junziyang编写getJFrame函数!
  1. function JFrame = getJFrame(hfig)
  2. error(nargchk(1,1,nargin));
  3. if ~ishandle(hfig) && ~isequal(get(hfig,'Type'),'figure')
  4.     error('The input argument must be a Figure handle.');
  5. end
  6. mde = com.MathWorks.mde.desk.MLDesktop.getInstance;
  7. if isequal(get(hfig,'NumberTitle'),'off') && isempty(get(hfig,'Name'))
  8.     figTag = 'junziyang'; %Name the figure temporarily
  9.     set(hfig,'Name',figTag);
  10. elseif isequal(get(hfig,'NumberTitle'),'on') && isempty(get(hfig,'Name'))
  11.     figTag = ['Figure ',num2str(hfig)];
  12. elseif isequal(get(hfig,'NumberTitle'),'off') && ~isempty(get(hfig,'Name'))
  13.     figTag = get(hfig,'Name');
  14. else
  15.     figTag = ['Figure ',num2str(hfig),': ',get(hfig,'Name')];
  16. end
  17. drawnow %Update figure window
  18. jfig = mde.getClient(figTag); %Get the underlying JAVA object of the figure.
  19. JFrame = jfig.getRootPane.getParent();
  20. if isequal(get(hfig,'Name'),'junziyang')
  21.     set(hfig,'Name',''); %Delete the temporary figure name
  22. end
复制代码
(3)另外在调整figure窗体的位置时,我们可以能需要用到一个movegui()函数,这个函数的功能就是将figure平移到某个位置,但是不调整figure窗口的大小,具体用法可以参考matlab的帮助。

(4)在Window中Figure无非就是一个窗口,显然我们可以通过Window API对这个窗口进行操作
  1. plot(1:5,1:5)
  2. maximize
复制代码
对应需要调用maximize.m函数以及DLL动态链接库 maximize.zip (4.21 KB, 下载次数: 97)

评分

参与人数 2威望 +1 贝壳 +3 贡献 +8 收起 理由
S_toad + 1 + 1 + 3
machreehappy + 2 + 5 感谢您分享自己珍贵的资料

查看全部评分

发表于 2017-6-23 09:54:06 | 显示全部楼层
看帖回帖是种美德。
回复 支持 反对

使用道具 举报

发表于 2013-1-15 20:57:33 | 显示全部楼层
版主太给力了,分享了
发表于 2013-1-15 21:28:44 | 显示全部楼层
版主总能给人以惊喜

评分

参与人数 1贝壳 +1 收起 理由
变形金刚4 + 1 星月传奇 kk321.cc/dalu/20470/

查看全部评分

发表于 2013-1-15 22:25:03 | 显示全部楼层
有意思啊。能不能实现全屏显示??如果能全屏,那演示一些动画应该是很不错的
 楼主| 发表于 2013-1-15 22:38:59 | 显示全部楼层
baby_wolf 发表于 2013-1-15 22:25
有意思啊。能不能实现全屏显示??如果能全屏,那演示一些动画应该是很不错的

全屏目前我还没有本事,还在查找相关资料呢,如果你有消息通知一下哦
发表于 2013-1-16 23:35:45 | 显示全部楼层
dynamic 发表于 2013-1-15 22:38
全屏目前我还没有本事,还在查找相关资料呢,如果你有消息通知一下哦

置顶功能很好啊。不用切换窗口来看图像了。也不用把窗口钉到主界面上。
 楼主| 发表于 2013-1-17 23:34:01 | 显示全部楼层
baby_wolf 发表于 2013-1-16 23:35
置顶功能很好啊。不用切换窗口来看图像了。也不用把窗口钉到主界面上。

具体说说如何处理呀,谢谢
发表于 2013-1-22 09:46:32 | 显示全部楼层
请问版主,如何设置窗口的大小使之符合word(A4)页面标准啊    论文需要啊
因为这可以统一插图的大小
发表于 2013-1-22 12:16:23 | 显示全部楼层
(1)获取屏幕尺寸后将figure设置为对应大小,在windows底部的任务栏会对figure产生遮挡。建议将Maximum属性设置为on。
(2)&(3)修改Java类、移动GUI等,在GUIDE环境中存在一些兼容性问题。首先,在GUIDE中java类是禁止修改的,其次,GUIDE会在fig边缘预留数个像素,当fig过大时,使用movegui只能短暂的改变位置,之后迅速被GUIDE重置位置。
(4)-(5)待续……
发表于 2013-1-23 10:21:41 | 显示全部楼层
myisland 发表于 2013-1-22 12:16
(1)获取屏幕尺寸后将figure设置为对应大小,在windows底部的任务栏会对figure产生遮挡。建议将Maximum属性 ...

学习了,谢谢分享
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|网站地图|MATLAB技术论坛|Simulink仿真论坛 ( 蜀ICP备19014457号 

GMT+8, 2019-11-21 07:20 , Processed in 0.092790 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表