如何给基于对话框的应用加启动画面

很多基于对话框的程序都有一个启动画面,那么如何为自己的对话框程序也加一个这样的画面呢?本文将一步一步教你实现每一个细节。其实VC++开发环境中有一个现成的 Splash Screen 组件,用这个组件很容易实现基于框架类(也就是CMainFrame)的程序的启动画面,那么如果是对话框程序,没有框架类怎么办呢?所以这个组件功能不是想象的那么强。要实现基于对话框应用程序的启动画面必须另辟蹊径。本文将定制一个C++类:CSplashWnd,用这个类可以增强原来的 Splash Screen 组件功能。它不但可以在用于具有CMainFrame的程序,同时也可以用于基于对话框应用的程序。

CSplashWnd的使用方法如下:

思路

需要改写三个函数:

CDialog::OnInitDialog()
   CWinApp::InitInstance()
   CWinApp::PreTranslateMessage(MSG* pMsg)

如果你用应用程序向导(AppWizard)创建工程,那么它会自动在CWinApp.h和CWinApp.cpp文件中产生 OnInitDialog 和 InitInstance 的声明和实现的默认代码,但是与CWinApp::PreTranslateMessage(MSG* pMsg)有关的处理必须自己添加到CWinApp派生类中。

具体步骤:

第一步:

在CDialog::OnInitDialog()方法末尾添加下列代码:

// 创建并显示启动画面
  CSplashWnd::ShowSplashScreen(3000, IDB_SPLASH24, this);

ShowSplashScreen函数的第一个参数是超时时间,以毫秒计算,表示启动画面持续显示的时间;第二个参数是位图图像的资源标示符,表示启动画面显示的图像。最后一个参数是父窗口,此参数可以为NULL。

第二步:

在CWinApp::InitInstance()方法的开始处添加如下代码:

// Enable the splash screen component based on the command line info.
  CCommandLineInfo cmdInfo;
  ParseCommandLine(cmdInfo);
  CSplashWnd::EnableSplashScreen(cmdInfo.m_bShowSplash);

这几行代码的作用是让程序能解析和处理命令行信息。

第三步:

用类向导(ClassWizard)改写 CWinApp::PreTranslateMessage(MSG* pMsg)方法,并添加如下代码:

BOOL CDialogsplApp::PreTranslateMessage(MSG* pMsg)
   {
         // Route messages to the splash screen while it is visible
       if (CSplashWnd::PreTranslateAppMessage(pMsg)) {
        return TRUE;
       }
       return CWinApp::PreTranslateMessage(pMsg);
   }

编译运行程序。

本文配套源码

时间: 2024-08-03 17:12:59

如何给基于对话框的应用加启动画面的相关文章

用C#给程序加启动画面并只允许一个应用程序实例运行

程序 涉及类: 1. 启动画面类: public class SplashForm : System.Windows.Forms.Form { private System.Windows.Forms.PictureBox pictureBox1; private System.Windows.Forms.Label label1; private System.Windows.Forms.Label lbl_version; /// <summary> /// 必需的设计器变量. /// &

用VC制作应用程序启动画面

摘 要:本文提供了四种启动画面制作方法.  使用启动画面一是可以减少等待程序加载过程中的枯燥感(尤其是一些大型程序):二是 可以用来显示软件名称和版权等提示信息.怎样使用VC++制作应用程序的启动画面呢?本文提供四种方法.前三种适用于基于文档的应用程序,第四种适用于基于对话框的应用程 序.  1.利用组件库中的Splash Screen组件实现 (1)用Photoshop等制作启动画面图像,保存为bmp格式. (2)用Appwizard建一个基于单文档的工程Splash. (3)在资源中插入位图

接触VC之三:MFC基于对话框程序

最近,本人赶时髦,装上了一套Visual Studio.net,安装要2213M呢,硬盘上三个盘符总共剩下不足2G的地方了.不过,界面相当的漂亮,且功能强大,值得心慰.我终于可以在类视图上,尽情去看类的基类,以及基类的实现代码了.不仅如此,最好的是那附带的MSDN上所有的VC基础文章都是中文,翻译的比希望出版社的好得没的说.什么文档啊,框加窗口啊,多视图啊,应有尽有.所以建议大家都来用.net的吧,注意是要那七张盘的,三张的是beta版,VC功能不全的. 这部分该说一说MFC的具体程序了.因为我

mfc-用VS2010.。里MFC编程基于对话框动态绘图的问题

问题描述 用VS2010..里MFC编程基于对话框动态绘图的问题 主要是3个问题(注意是VS2010!!) 我初学MFC 我想要主要实现的功能是 在对话框里添加背景图 并在背景图上动态根据坐标画线,并且图和线都随着对话框大小的改变对应按比例改变..1.在我的绘图过程中 最后一段线 就是从N-1到N段 没有画出来 我这里取的是N=12段 共13个点,只有拖拽或者最大化对话框的时候才出现..:2.每当画完(不包括缺失的最后一段)时,会出现一个从原点到N-1点的直线(我本意的线可以从坐标点里看出),并

堆破坏-基于对话框的MFC问题,在构造中new一个对象,在析构中释放,竟然可以出错!

问题描述 基于对话框的MFC问题,在构造中new一个对象,在析构中释放,竟然可以出错! class CMilesight_Intelligence_AlgorithmDlg : public CDialogEx { public: CIpCamera *m_ip_camera;//已经定义好的一个类库 } CMilesight_Intelligence_AlgorithmDlg::CMilesight_Intelligence_AlgorithmDlg(CWnd* pParent /*=NULL

基于对话框的MFC编程视图切割问题

问题描述 基于对话框的MFC编程视图切割问题 各位大侠,最近弄了个基于对话框的MFC程序,分成了三行,中间行又分成了两列,左边列加了几个botton,想通过botton的消息响应函数控制右边列的视图变化,如何实现啊?大神们? 解决方案 http://blog.csdn.net/xgx198831/article/details/6664309

基于对话框的MFC加菜单栏不成功

问题描述 基于对话框的MFC加菜单栏不成功 我想给对话框程序加菜单,在资源定义了自己的菜单ID为IDR_MENU1,然后给dlg类增加了CMenu类的成员变量m_Menu, 在OnInitDialog()函数增加菜单,代码如下: m_Menu->LoadMenu(IDR_MENU1); SetMenu(m_Menu) 可是为什么不成功

【Best Practice】基于阿里云数加·StreamCompute快速构建网站日志实时分析大屏

本文偏向与实操层面的为大家介绍,如何基于阿里云数加StreamCompute.DataV快速构建网站日志实时分析. [什么场景适合用流计算] 流计算提供了针对流式数据实时分析的一站式工具链,对于大量流式数据存在实时分析.计算.处理的逻辑可以考虑通过流计算该任务.举例如下: 1. 针对实时营销活动,需要实时获取活动流量数据分析以了解活动的营销情况,此时可以上流计算. 2. 针对物联网设备监控,需要实时获取设备数据进行实时灾难监控,此时可以上流计算. 3. 对于手机APP数据实时分析,需要实时了解手

直接执行-C++MFC基于对话框问题

问题描述 C++MFC基于对话框问题 我想让对话框一打开就直接执行命令,而不用去点按钮控件,请问代码写在哪? 解决方案 在生产代码的App 的InitInstance() 对话框类的构造函数 对话框类的OnInitDialog() 解决方案二: 在对话框的OnInitDialog()函数中