纯C++打造的Splash Screen类(打造专业的启动画面)

Posted 新长征路上的码农

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了纯C++打造的Splash Screen类(打造专业的启动画面)相关的知识,希望对你有一定的参考价值。

Introduction

每一个应用程序可能都需要一个“about box”和程序启动时一个“splash screen”(启动画面),大多数开发者都使用自带的““about dialog””。我创建了一个类CSplashScreen,都可以处理这两者,使开发变的容易,有趣!从小的对话框组件程序到需要加在几分复杂程序,我都会使用这个类。


这个类有两个文件组成,SplashScreen.h 和 SplashScreen.cpp。这个类不需要MFC和.NET的支持!


这个类可以从资源编辑器中获取很多信息包括位图,版本字符串等等,显示在“splash screen”上。因此,在程序版本改变的时候,你不需要修改splash screen。


当程序启动时splash screen就会显示,有键盘按下,或者设定时间已过,splash screen就会消失。


Splash Screen Example






Using the code


  • 包含SplashScreen.h , SplashScreen.cpp.

  • 在资源编辑器中添加版本字符串

  • 在资源编辑器中添加位图IDB_SPLASH

  • 在连接库添加version.lib



ShowSplashScreen(HWND pParentWnd, LPCTSTR statusMessage, int millisecondsToDisplay) 函数有三个参数。

  • pParentWnd - splash screen的父窗口指针

  • statusMessage - 显示在splash screen状态栏里的字符串

  • millisecondsToDisplay - splash screen持续时间



为了显示splash screen,需要在程序初始化时,添加CSplashScreen::ShowSplashScreen();



  
    
    
  
  1. #include "SplashScreen.h"


  2. int APIENTRY WinMain(HINSTANCE hInstance,

  3. HINSTANCE hPrevInstance,

  4. LPSTR lpCmdLine,

  5. int nCmdShow)

  6. {

  7. MSG msg;


  8. // display splash screen and have it turn off after 10 seconds

  9. CSplashScreen::ShowSplashScreen( hWnd, "http://applehome.com/", 10000);

  10. .

  11. .

  12. .

  13. while (GetMessage(&msg, NULL, 0, 0)) {

  14. if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) {

  15. TranslateMessage(&msg);

  16. DispatchMessage(&msg);

  17. }

  18. }


  19. return msg.wParam;

  20. }



为了显示about box,在 WndProc(…)中添加 CSplashScreen::ShowSplashScreen()




  
    
    
  
  1. #include "SplashScreen.h"


  2. LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

  3. {

  4. switch (message) {

  5. case WM_COMMAND:

  6. // Parse the menu selections:

  7. switch (LOWORD(wParam)) {

  8. case IDM_ABOUT:

  9. // display about box

  10. CSplashScreen::ShowSplashScreen( hWnd );

  11. break;

  12. }

  13. break;

  14. default:

  15. return DefWindowProc(hWnd, message, wParam, lParam);

  16. }

  17. return 0;

  18. }




Under the hood

因为我是个顾问,为每一个客户需要创建指定的位图。一般我会特别放置公司的logo和应用程序的icon在 IDB_SPLASH位图上。能否创造一个专业的splash screen.取决于你们天才的设计师。版本字符串时写在位图之上的。


有三组字符串:Product Name,Body,和Status。Body是由company name, version, copyright, 和 comment strings一个或多个组成。


每一组 都有指定字符串在该组如何显示的静态变量:


  • m_xxxVerticalOffset - empty space between the top of the bitmap and the first string

  • m_xxxVerticalHeight - the maximum height of a group of strings

  • m_xxxLeftMargin - the distance from the left side to the place strings

  • m_xxxRightMargin - the distance from the right side to strings

  • m_xxxFontName - the name of the font for strings

  • m_xxxPointSize - the point size used for strings, (-1,-1) ==> Calculate point size

  • m_xxxTextColor - the color used for strings

Body有可以有0-4个字符串,设置其是否显示的变量:



  • m_displayCompanyName - true if displaying company name

  • m_displayVersion - true if displaying version

  • m_displayCopyright - true if displaying copyright

  • m_displayComments - true if displaying comments



CSplashScreen类是在CSplashScreen::ShowSplashScreen()被调用时实例化,键盘按下或者时间超过时,被删除。



以上是关于纯C++打造的Splash Screen类(打造专业的启动画面)的主要内容,如果未能解决你的问题,请参考以下文章

纯手工打造简单分布式爬虫(Python)

纯CSS3打造自行车

纯手工打造linux路由器

炸了!没有任何HTML/CSS ! 纯Python打造一个网站!

Android 使用 Splash Screen 加载繁重的 Main 数据

手写MyBatis,纯手工打造开源框架(第四篇:决胜千里)- 第272篇