VC++工程中加入 SplashScreen 原理释解

2016-01-29 12:08 108 1 收藏

VC++工程中加入 SplashScreen 原理释解,VC++工程中加入 SplashScreen 原理释解

【 tulaoshi.com - C语言心得技巧 】

VC++工程中加入 SplashScreen 原理释解


作者:Abbey

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com)

下载源代码

摘要
  本文旨在剖析VC++工程中加入 SplashScreen 的原理,并给出在VC++ MFC(exe)工程中加入 SplashScreen 的步骤。

关键字 SplashScreen,原理

环境:
Windows 98SE/2000,VC++ 6.0
  SplashScreen - 我们使用 Word 之类的软件在启动的短暂时间里就会看到它的身影。它通常用以在程序启动时显示程序及用户名称,版权信息等。我也不知道它准确的名称是什么(是闪屏吗?),就这样称呼吧。也许你也想在自己的工程里加入这样的特性,本文将以创建实际工程的方式逐步剖析其实现原理。

注意
:为避免实际所使用工程名给类或对象名带来的干扰,除非特别说明,在本文中将使用基类名如CWinApp、CMainFrame、CDialog来代替实际工程中的相应派生类名进行描述。
  Visual C++是一个相当强大的C++开发工具,它内嵌了对SplashScreen的支持。但是在MFC EXE类型工程中只是对带有主框架类的SDI或MDI工程提供了这一支持,基于对话框类的工程则被排除在外。现在让我们开始吧。第一步是在SDI工程中加入SplashScreen。
  首先利用AppWizard生成一个SDI工程,除了其中Docking ToolBar必须选择外(我认为这是MFC的一个Bug,当然这与本文讨论的SplashScreen没有关系),其他的文档-视图支持、状态条之类的都可以不要,这样可以尽量减少无用的代码。
  通过IDE中的菜单Project-Add to Project-Components and Controls,我们就可以从Visual C++ Components中选择Splash Screen这个组件插入工程。



  在点击了"Insert"后会弹出一个如下图所示的对话框,这是设置插入该工程中的SplashScreen的类名、显示用位图的ID及文件名,采用缺省值即可。



  通过以上几步的操作,就会在工程目录下生成Splash.CPP和Splash.H文件,这便是CSplashWnd类的实现文件与头文件。同时工程中CWinApp与CMainFrame类中的部分代码也会被修改,以实现CSplashWnd窗口的消息处理。
  接着我们来看看 CSplashWnd 类的声明与主要的代码(已经过删减):

//类的声明

class CSplashWnd : public CWnd{CSplashWnd();~CSplashWnd();virtual void PostNcDestroy();static void EnableSplashScreen(BOOL bEnable = TRUE);static void ShowSplashScreen(CWnd* pParentWnd = NULL);static BOOL PreTranslateAppMessage(MSG* pMsg);BOOL Create(CWnd* pParentWnd = NULL);void HideSplashScreen();afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);afx_msg void OnPaint();afx_msg void OnTimer(UINT nIDEvent);CBitmap m_bitmap;  //SplashScreen窗口显示用的位图对象static BOOL c_bShowSplashWnd; //是否要显示SplashScreen的标志量static CSplashWnd* c_pSplashWnd;};
//是否使用SplashScreen
void CSplashWnd::EnableSplashScreen(BOOL bEnable){c_bShowSplashWnd = bEnable;}
//创建CsplashWnd对象,并调用Create()创建窗口
void CSplashWnd::ShowSplashScreen(CWnd* pParentWnd){//如果不要显示SplashScreen或SplashWnd对象已经被创建则返回if (!c_bShowSplashWnd || c_pSplashWnd != NULL)return;c_pSplashWnd = new CSplashWnd;if (!c_pSplashWnd->Create(pParentWnd))delete c_pSplashWnd;elsec_pSplashWnd->UpdateWindow();}
//装入SplashScreen欲显示位图,通过CreateEx()激发OnCreate()完成窗口创建与设置
BOOL CSplashWnd::Create(CWnd* pParentWnd){if (!m_bitmap.LoadBitmap(IDB_SPLASH))return FALSE;BITMAP bm;m_bitmap.GetBitmap(&bm);return CreateEx(0, 
AfxRegisterWndClass(0,AfxGetApp()-LoadStandardCursor(IDC_ARROW)),
NULL,

来源:https://www.tulaoshi.com/n/20160129/1484744.html

延伸阅读
滑动控件是Windows中最常用的控件之一。一般而言它是由一个滑动条,一个滑块和可选的刻度组成,用户可以通过移动滑块在相应的控件中显示对应的值。通常,在滑动控件附近一定有标签控件或编辑框控件,用于显示相应的值。滑动控件在应用程序中用途级为广泛,如在桌面的属性中就可以看到。为此,让我们一起来看一下它的实现方法。 (...
标签: Web开发
JavaScript基本数据结构 JavaScript提供脚本语言的编程与C++非常相似,它只是去掉了C语言中有关指针等容易产生的错误,并提供了功能强大的类库。对于已经具备C++或C语言的人来说,学习JavaScript脚本语言是一件非常轻松愉快的事。 一、JavaScript代码的加入 JavaScript的脚本包括在HTML中,它成为HTML文档的一部分。与HTML标识...
包含头文件:#include winsvc.h 以下以web服务为例: #include winsvc.h void CStartServiceDlg::OnBnClickedButton1() {        // 打开服务管理对象     SC_HANDLE hSC = ::OpenSCManager( NULL,               &nbs...
在VC中加载LIB文件的几种方法,我们今天分别来给介绍一下! ①LIB文件直接加入到工程文件列表中  在VC中打开File View一页,选中工程名,单击鼠标右键,然后选中"Add Files to Project"菜单,在弹出的文件对话框中选中要加入DLL的LIB文件即可。  ②设置工程的 Project Settings来加载DLL的LIB文件  ...
标签: 办公软件
    ★插入声音文件 我们在文章中介绍一首诗词歌赋时,如果加入相关的乐曲(声音文件),将会有一种既能读其文,又可听其声的美妙感觉。如果你也想在文档中插入声音文件,那么就可以按以下步骤操作: 1、先将光标定位于要插入声音文件的地方。 2、在“插入”菜单中选择“对象”命令,随后弹出“对象”对话框。 ...

经验教程

945

收藏

82
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部