在自己的应用程序定制多媒体真彩封页,可以使应用程序在显示名称和版权特性时丰富程序界面,避免由于应用程序启动前进行大量数据初始化时用户进行较长时间的空等待过程,在给应用程序增加了生动特性和专业特性的同时,也起到了宣传和广告的作用。但通过定制自己的应用程序多媒体启动封页,还可使自己的应用程序别具一格。
在做SplashScreen的时候网上查了很多资料,,找到的都是SplashScreen随着对话框一起启动,还有加载的启动图片只能是bitmap格式的,bitmap格式图片一般比较占内存。况且我希望的启动效果是:启动软件,首先弹出来的是SplashScreen图片,在设定时间结束后或者鼠标点击图片或按任意键盘键之后,即可以立刻显示主程序软件。
当然网上找到部分资料都是很有用的,我主要参考的就是
http://www.cnblogs.com/luoshupeng/archive/2011/09/16/2178449.html
这位同学的,实现了Splash主要的功能,,我在该同学的代码之上做了一些改进。使用GDI+可以加载多种格式的图片,比如bitmap、ipg、png等一些。这些图形都不用加载到资源里面,可以直接放在工程目录下。
一、主程序为DLG对话框
建一名为DLG的对话框工程。
新建类CSplash,生成Splash.h和Splash.cpp两文件,将我的Splash.h和Splash.cpp文件替换之。
在DLG.cpp文件里先添加头文件
#include "gdiplus.h"
#include "Splash.h"
然后在BOOL CDLGApp::InitInstance()函数最前面加上
//用来处理是否显示SplashScreen
{
CCommandLineInfo cmdinfo;
ProcessShellCommand(cmdinfo);
CSplashWnd::EnableSplashScreen(cmdinfo.m_bShowSplash);
}
在这个文件里面加载如下函数,并加入如下代码:
BOOL CDLGApp::PreTranslateMessage(MSG* pMsg)
{
if ( CSplashWnd::PreTranslateAppMessage(pMsg) )
{
return TRUE;
}
return CWinApp::PreTranslateMessage(pMsg);
}
然后在DLGDlg.cpp文件里加头文件
#include "Splash.h"
并加载如下两个函数,并加上代码
int CDLGDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialogEx::OnCreate(lpCreateStruct) == -1)
return -1;
//用来显示SplashScreen窗口
//第一个参数-time--延时时间,1000 --延时1秒,小于0 --永久显示,例如:-1
//第二个参数-fileName--图片路径,格式--L"..\\Splash.png",,路径自定义
//第三个参数-nCmdShow--对话框显示模式,例如SW_SHOW
CSplashWnd::ShowSplashScreen(-1,L"..\\Splash.png",SW_SHOW,this);
return 0;
}
void CDLGDlg::OnNcPaint()//让程序启动时隐藏主程序对话框,无闪烁
{
// TODO: 在此处添加消息处理程序代码
static int i = 2;
if(i > 0)
{
i --;
ShowWindow(SW_HIDE);
}
else
CDialog::OnNcPaint();
}
二、主程序为SDI单文档
新建名为SDI的当文档
新建类CSplash,生成Splash.h和Splash.cpp两文件,将我的Splash.h和Splash.cpp文件替换之。
在MainFrm.cpp文件里先加头文件
#include "Splash.h"
然后在int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)函数return 0;之前加上
//用来显示SplashScreen窗口
//第一个参数-time--延时时间,1000 --延时1秒,小于0 --永久显示,例如:-1
//第二个参数-fileName--图片路径,格式--L"..\\Splash.png",,路径自定义
//第三个参数-nCmdShow--对话框显示模式,例如SW_SHOW
CSplashWnd::ShowSplashScreen(-1,L"..\\Splash.png",SW_SHOW,this);
加载如下函数,添加如下代码
void CMainFrame::ActivateFrame(int nCmdShow)
{
// TODO: 在此添加专用代码和/或调用基类
nCmdShow=SW_HIDE;
CFrameWnd::ActivateFrame(nCmdShow);
}
在SDI.cpp文件天加头文件
#include"Splash.h"
在BOOL CSDIApp::InitInstance()函数里面if (!ProcessShellCommand(cmdInfo))之前添加
m_nCmdShow = SW_HIDE;//这一句和下一句解决了启动时窗口闪的问题...
m_bLoadWindowPlacement=FALSE;
再加载如下函数
BOOL CSDIApp::PreTranslateMessage(MSG* pMsg)
{
if (CSplashWnd::PreTranslateAppMessage(pMsg))
return TRUE;
return CWinAppEx::PreTranslateMessage(pMsg);
}
例子源代码如下:http://download.csdn.net/detail/jw232882152/4163042