我的想法是构建一个徽标图像(类似于Matlab的启动图像),在我的gui出现之前显示。我有以下代码(它是通过修改"我如何为我的MATLAB GUI应用程序制作启动屏幕?"给出的解决方案获得的):
% 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);
我有两个问题:
第一:我希望徽标图像的图形窗口没有边框,没有标题,也没有任务栏。我尝试过WindowAPI,但它不起作用,因为我在上面的代码之后调用它,而且因为窗口的可见性关闭,所以它的句柄也关闭了。
第二:我希望,当标志图像消失时,它会显示最大化的gui窗口。问题出在哪里?徽标图像的窗口和gui窗口之间的屏幕过渡不会平滑。我尝试过使用我在Matlab Central的文件交换中发现的许多Matlab应用程序(WindowAPI、Maxfig、Maximize、SetFigTransparency…),但都没有成功。我意识到问题在于我的gui的可见性(我开始,直到所有元素都创建好,然后我把它改为打开)。由于关闭可见性导致handlevibility也关闭,前面提到的应用程序对我想要最大化的图形窗口没有影响。
在观察了Matlab的启动后,我注意到在显示徽标后,它会出现一个全屏图像,然后是程序的正常全屏。因此,我尝试创建一个最大化的全屏窗口,在标志的窗口关闭后出现。然而,现在的问题是最后一个窗口和gui窗口之间的转换。如果我打开gui窗口的可见性,然后最大化它,在一瞬间,可以看到这种转变让我很困扰。我不知道该怎么办。我还认为,如果我能避免在更改其可见性时指南窗口是当前图形,也许我会实现它。另一种解决方案可能是一个计时器,它可以将白色窗口保持为当前图形,而引导窗口在后面更改其可见性,但我不知道该怎么做。谢谢您的关注。干杯
正如我在这个答案中所展示的,从这个MathWorks新闻组线程派生而来,您可以使用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窗口的问题。
经过长时间的研究,我找到了一个最接近我想法的合理答案。如果你在文件交换浏览器中输入"splashscreen",你会有一些专门为它设计的有趣的应用程序。我选择了splash.m。为了平稳过渡,我使用了以下程序:WindowAPI和maximize。
编写的代码如下:
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