根据给定的信息,本文将详细解析MFC(Microsoft Foundation Classes)中的软件启动画面(Splash Screen)的实现原理与步骤。 ### MFC启动画面浅入深出 #### 一、启动画面的基本概念 启动画面(Splash Screen)是软件启动时显示的一个短暂的画面,通常用于展示软件的Logo或版权信息等。在MFC程序中,启动画面不仅可以提升用户体验,还可以用来显示程序加载进度,让用户在等待的过程中不会感到焦虑。 #### 二、创建启动画面的准备工作 1. **准备图片**: - 使用Photoshop或其他图像处理软件制作启动画面图片,并保存为.bmp格式。 - 图片建议控制在256色以内,以减少加载时间。 2. **添加资源到项目**: - 打开VC++的资源编辑器,在Resources文件夹下选择Import导入准备好的.bmp文件。 - 导入后会自动分配一个资源ID,如IDB_SPLASH。 #### 三、实现启动画面 1. **添加SplashScreen组件**: - 在项目中通过“Project -> Add to Project -> Components and Controls”添加SplashScreen组件。 - 在弹出的对话框中选择“Visual C++ Components”,找到并选中SplashScreen控件,点击“Insert”按钮插入。 2. **设置启动画面的显示时间**: - 修改启动画面的自动关闭时间,通常设置为750毫秒。 - 在`CSplashWnd`类的`OnCreate`函数中添加定时器: ```cpp void CSplashWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) { // Set a timer to destroy the splash screen. SetTimer(1, 750, NULL); // 设置定时器,750毫秒后关闭启动画面 return 0; } ``` 3. **实现CSplashWnd类**: - 定义`CSplashWnd`类继承自`CWnd`,并包含以下成员函数: - `EnableSplashScreen`:设置是否启用启动画面。 - `ShowSplashScreen`:显示启动画面。 - `OnCreate`:初始化窗口。 - `OnPaint`:绘制窗口。 - `OnTimer`:处理定时器事件。 - 类定义示例: ```cpp class CSplashWnd : public CWnd { public: 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); private: CBitmap m_bitmap; // 存储启动画面的位图 static BOOL c_bShowSplashWnd; // 是否显示启动画面的标志 static CSplashWnd* c_pSplashWnd; }; ``` #### 四、启动画面的显示逻辑 1. **启用启动画面**: - 通过`EnableSplashScreen(TRUE)`设置是否启用启动画面。 2. **显示启动画面**: - 调用`ShowSplashScreen`函数来显示启动画面。 - 此函数检查是否已经有一个启动画面正在显示,如果没有则创建一个新的`CSplashWnd`实例并显示。 3. **关闭启动画面**: - 当主程序准备好时,通过定时器事件调用`HideSplashScreen`方法关闭启动画面。 ### 小结 通过上述步骤,我们不仅能够实现一个基本的启动画面,还能够进一步定制其显示时间和样式。MFC提供的强大功能使得开发者可以轻松地为自己的应用程序添加这一重要的用户交互元素。对于初学者而言,掌握启动画面的实现不仅是C++编程的基础之一,也是提升软件专业形象的重要手段。
一、是可以减少等待程序加载过程中的枯燥感(尤其是一些大型程序);
二、是可以用来显示软件名称和版权等提示信息。
利用组件库中的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”控件,然后单击“ins*ert”。
②确认或修改类名和位图资源ID,单击OK确认。
③编译、连接,漂亮的启动画面就显示出来了。
(5)如果需要改变启动画面的停留时间,就修改SetTimer()函数的第二个参数,默认是750 毫秒。该函数所在位置:
int CSplashWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
...
// Set a timer to destroy the splash screen.
SetTimer(1, 750, NULL); //修改第二个参数以调整画面停留时间
return 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类的实现文件与头文件
剩余6页未读,继续阅读
- 粉丝: 47
- 资源: 156
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Linux环境下Nginx服务器的源码安装与自动启动配置指南
- 【Unity 插件】DLSS - Upscaling for Unity 将低分辨率图像提升为高分辨率图像,接近或超越原生分辨率
- 基于角色访问控制的Linux安全模块+项目源码+文档说明
- 基于uniapp构建的顺风车、约车、拼车、通勤、滴滴微信小程序(源码+文档说明)
- 【Unity 插件】Invector FSM AI Template 易用的 AI 模板, 轻松实现敌人的巡逻、追击、攻击等动作
- 文本数据可视化tocsv.csv
- 基于HSV色彩空间和樽海鞘群优化算法的低照度图像增强
- Fine-BI考试全量题库(含答案)
- yolo的xtx数据集增强
- 技术资料分享RDA5820很好的技术资料.zip