zoukankan      html  css  js  c++  java
  • 四种程序启动画面的制作方法(VC)

    使用启动画面一是可以减少等待程序加载过程中的枯燥感(尤其是一些大型程序);二是可以用来显示软件名称和版权等提示信息。怎样使用VC++制作应用程序的启动画面呢?本文提供四种方法,前三种适用于基于文档的应用程序,第四种适用于基于对话框的应用程序。

    1.利用组件库中的Splash Screen组件实现

      (1)用Photoshop等制作启动画面图像,保存为bmp格式。
      (2)用Appwizard建一个基于单文档的工程Splash。
      (3)在资源中插入位图资源

      打开VC++的资源编辑器,用鼠标右键单击Resources文件夹,选择Import命令,插入所制作的位图。如果位图超过256色,VC会弹出一个对话框,提示位图已经插入但不能在位图编辑器中显示,确定即可。将位图ID改为IDB_SPLASH。

      (4)添加Splash Screen控件

      ①选择菜单“project”/“Add To Project”/“Conponents and Controls”打开对话框,在列表框中双击“Visual C++ Conponents”选项,选择“Splash Screen”控件,然后单击“Insert”。
      
    ②确认或修改类名和位图资源ID,单击OK确认。
      ③编译、连接,漂亮的启动画面就显示出来了。

      (5)如果需要改变启动画面的停留时间,就修改SetTimer()函数的第二个参数,默认是750 毫秒。该函数所在位置:

    int CSplashWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
     ...
       // Set a timer to destroy the splash screen.
       SetTimer(1, 750, NULL); //修改第二个参数以调整画面停留时间
       return 0;
    }

    2.利用无模式对话框显示启动画面

      (1)用Appwizard建一个基于单文档的工程Splash。
      (2)导入用作启动画面的图片,更改ID为IDB_SPLASH。
      (3)新建一个对话框,在其中添加启动画面。

      在资源中新建一个对话框,创建对话框类CSplashDlg。在对话框中添加一个Picture控件,打开其“Properties”对话框,选General,在Type下拉列表中选择Bitmap,在Image下拉列表中选前面导入的位图资源ID值:IDB_SPLASH。

      (4)修改对话框的显示效果

      ①调整对话框大小,去掉两个自动生成的按钮,并在“Properties”的“Styles”页中去掉对Title bar的选取;
      ②选中图像,调整大小使之适应对话框的可编辑区,修改其“Properties”的“Styles”
    使之居中。

      (5)在CMainFrame类的OnCreate()函数中添加创建、显示并销毁无模式对话框的代码。

    #include “SplashDlg.h” //加到MainFrm.cpp文件的头文件调用部位
    int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
    CSplashDlg *dlg = new CSplashDlg(this);
    dlg->Create(CSplashDlg::IDD,this); //创建对话框
    dlg->ShowWindow(SW_SHOW); //显示对话框
    dlg->UpdateWindow();
    Sleep(2000); //画面显示停留时间,单位为毫秒

    dlg->DestroyWindow(); //销毁对话框
    return 0;
    }

    3.通过发送消息显示和销毁启动画面

      ①重复方法二的步骤1至步骤4。
      ②使用Class Wizard为CMainFrame类添加消息响应函数WM_TIMER。
      ③修改代码,通过发送WM_TIMER消息启动和销毁启动画面

      1)定义对话框类的变量

      在MainFrm.h文件头部添加#include "SplashDlg.h",并在CMainFram类的定义中加上公用变量CSplashDlg *Splash。

      2)添加计时器消息相应函数代码

    void CMainFrame::OnTimer(UINT nIDEvent)
    {
    if(Splash->IsWindowVisible()){
    Splash->SetActiveWindow(); //把启动画面设置为当前活动窗口
    Splash->UpdateWindow();
    Sleep(2000); //修改此处可更改画面显示时间
    Splash->SendMessage(WM_CLOSE); //关闭对话框
    }
      else{
    SetActiveWindow();
    KillTimer(1) ;  //清除WM_TIMER事件
    }
    }

      3)修改框架生成函数OnCreate()

    int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
    SetTimer(1,0,NULL); //添加ID为1的WM_TIMER事件
    Splash=new CSplashDlg();
    Splash->Create(IDD_DIALOG1);
    Splash->ShowWindow(SW_SHOW);

    }

    4.制作基于对话框的应用程序启动画面

      以上几种方法都不能给基于对话框的应用程序做启动画面,下面介绍一种方法给基于对话框的应用程序做启动画面。基于对话框的应用程序没有主框架,因此不能采用前面几种方法制作启动画面。不过我们可以把方法一建立起的启动画面文件移植过来,然后,对程序进行一些修改。

      (1)参照方法一建立基于单文档的工程Splash。
      (2)建立基于对话框的工程Cover。
      (3)文件移植
      ①将Splash1.cpp 和Splash1.h 两个文件从方法一建立的Splash工程拷贝到Cover工程中,并且分别加入到Source Files和Header Files中;
      ②导入位图文件到工程的资源中,改ID为IDB_SPLASH。
      (4)修改代码,实现启动画面的调用
      ①添加CCoverApp 的InitInstance() 函数代码

    #include "Splash1.h" //加在Cover.cpp文件的头文件调用部位
    BOOL CCoverApp::InitInstance()
    {
    CCommandLineInfo cmdInfo;
    ParseCommandLine(cmdInfo);
    CSplashWnd::EnableSplashScreen(cmdInfo.m_bShowSplash);
    ...
    }

      ②使用ClassWizard 添加OnCreate() 函数到对话框类CCoverDlg中,并修改代码#include "Splash1.h" //加在CoverDlg.cpp文件的头文件调用部位

    int CCoverDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
    ...
    CSplashWnd::ShowSplashScreen(this); //显示启动画面
    ...
    }

  • 相关阅读:
    jsp转向
    什么是 XDoclet?
    tomcat中的几点配置说明
    mysql5问题
    POJ 3734 Blocks
    POJ 2409 Let it Bead
    HDU 1171 Big Event in HDU
    POJ 3046 Ant Counting
    HDU 2082 找单词
    POJ 1286 Necklace of Beads
  • 原文地址:https://www.cnblogs.com/tianlangshu/p/1989506.html
Copyright © 2011-2022 走看看