VC2010 SplashSCReen制作总结

    在自己的应用程序定制多媒体真彩封页,可以使应用程序在显示名称和版权特性时丰富程序界面,避免由于应用程序启动前进行大量数据初始化时用户进行较长时间的空等待过程,在给应用程序增加了生动特性和专业特性的同时,也起到了宣传和广告的作用。但通过定制自己的应用程序多媒体启动封页,还可使自己的应用程序别具一格。

    在做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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值