Matlab图窗口转换(屏幕转换 - GUI设计)

时间:2011-06-09 09:45:30

标签: user-interface matlab look-and-feel

我的想法是建立一个徽标图像(类似于Matlab的启动版),在我的gui出现之前显示。我有以下代码(它是由How do I make a splash screen for my MATLAB GUI application?修改解决方案获得的):

% create a figure1 that is not visible yet, and has minimal titlebar properties
fh = figure('Visible','off','MenuBar','none','NumberTitle','off',...
   'DockControls','off');
% put an axes in it
ah = axes('Parent',fh,'Visible','on');
% put the image in it
ih = imshow('SIS.gif','Parent',ah);
% set the figure1 size to be just big enough for the image, and centered at
% the center of the screen
imxpos = get(ih,'XData');
imypos = get(ih,'YData');
set(ah,'Unit','Normalized','Position',[0,0,1,1]);
figpos = get(fh,'Position');
figpos(3:4) = [imxpos(2) imypos(2)];
set(fh,'Position',figpos);
movegui(fh,'center')
% make the figure1 visible
set(fh,'Visible','on');
pause(3);
close(fh);

我有两个问题:

  • 数字1:我希望徽标图像的图形窗口没有边框,没有标题,也没有任务栏。我已经尝试了WindowAPI,但是它不起作用,因为我在上面的代码之后调用它,并且因为窗口的可见性关闭,所以它的句柄也关闭了。

  • 2号:我想要的是,当徽标图像消失时,显示gui窗口最大化。问题出在哪儿?徽标图像窗口和gui窗口之间的屏幕转换未平滑。我试图使用我在Matlab Central的文件交换(WindowAPI,Maxfig,Maximize,SetFigTransparency,...)中找到的很多Matlab应用程序,但没有成功。我意识到问题是我的gui的可见性(我开始创建所有元素,然后我将其更改为on)。由于关闭可见性导致可操作性也关闭,前面提到的应用程序对我想要最大化的数字窗口没有影响。

在观察了Matlab的启动后,我注意到在显示徽标后,它会显示一个全屏图像,然后是程序的正常全屏。所以我试图创建一个最大化的全屏窗口,在徽标的窗口关闭后出现。但是,现在问题是这个最后一个和gui窗口之间的过渡。如果我设置gui窗口的可见性然后我最大化它,在一瞬间可以看到困扰我的过渡。我不知道该怎么办。我还认为,如果我可以避免在我更改其可见性时导向窗口是当前图形,也许我会实现它。其他解决方案它可能是一个计时器,将白色窗口保持为当前图形,而引导窗口后面改变其可见性,但我不知道该怎么做。感谢您的关注。欢呼声。

2 个答案:

答案 0 :(得分:1)

当我在this answer中显示,从this MathWorks newsgroup thread派生时,您可以使用Java创建一个没有标题,边框等的窗口。以下是我在其他答案中对代码的修改,以创建以屏幕为中心的启动窗口:

img = imread('peppers.png');  %# A sample image to display
jimg = im2java(img);
frame = javax.swing.JFrame;
frame.setUndecorated(true);
icon = javax.swing.ImageIcon(jimg);
label = javax.swing.JLabel(icon);
frame.getContentPane.add(label);
frame.pack;
imgSize = size(img);
frame.setSize(imgSize(2),imgSize(1));
screenSize = get(0,'ScreenSize');  %# Get the screen size from the root object
frame.setLocation((screenSize(3)-imgSize(2))/2,...  %# Center on the screen
                  (screenSize(4)-imgSize(1))/2);
frame.show;  %# You can hide it again with frame.hide

我会尝试创建启动画面,看看它是否也有助于转换到下一个GUI窗口的问题。

答案 1 :(得分:0)

经过长时间的研究工作,我找到了一个合理的答案,这个答案最接近我的想法。如果您在File Exchange浏览器中键入“启动画面”,则会有一些专门针对它设计的有趣应用程序。我选择了splash.m。关于平滑过渡,我使用了这些程序:WindowAPImaximize

编写的代码如下所示:

    logoh = splash('logo.jpg'); %# Appear the logo image
    fh = figure('Visible','on','Name','MyGUI','Position',[-1000,-1000,...
    1000,500],'Menu','none','Toolbar','none','NumberTitle','off'); 
    %# Put the figure window outside the screen (see Position property) because
    %# its visibility is on
    WindowAPI(fh,'Alpha',0); %# Make the figure window invisible
    ...
    movegui(fh,'center'); %# Move the figure window to center
    maximize(fh);% Maximize it
    WindowAPI(fh,'Alpha',1); %# Make the figure window visible totally
    pause(2); %# time during which the logo image is exposed
    splash(logoh,'off'); %# Disappear the logo image