65.9K
CodeProject 正在变化。 阅读更多。
Home

Splash Screen C++ 类,无需 MFC 或 .NET

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.71/5 (13投票s)

2009年4月21日

CPOL

3分钟阅读

viewsIcon

66420

downloadIcon

5298

一个 C++ 类,用于从位图和版本字符串资源生成启动画面和关于框。

引言

每个应用程序都需要一个“关于框”,有些还需要一个在加载时显示的“启动画面”。 大多数开发人员使用自动创建的无聊的“关于对话框”。 我创建了 CSplashScreen 类来处理这两个问题,使它们不易出错并使它们更有趣。 我将此类用于从小型对话框小程序到需要几分钟才能加载和初始化的复杂应用程序的各种程序。

该类包含两个文件,SplashScreen.hSplashScreen.cpp。 该类不需要 MFC 或 .NET。 我有另一个使用 MFC 的类。

该类从位图和资源中的版本字符串获取显示启动画面所需的所有信息。 因此,您不必在每次版本更改时都修改启动画面。

启动画面在单击、按下某个键或经过所需时间后消失。

启动画面示例

使用代码

  • 包含 SplashScreen.hSplashScreen.cpp
  • 将版本字符串添加到资源中。
  • IDB_SPLASH 位图添加到资源中。
  • version.lib 添加到链接库中。

ShowSplashScreen(HWND pParentWnd, LPCTSTR statusMessage, int millisecondsToDisplay) 可以有零到三个参数。

  • pParentWnd - 启动画面的父窗口
  • statusMessage - 要在启动画面状态区域中显示的字符串
  • millisecondsToDisplay - 在隐藏启动画面之前经过的毫秒数

要在初始化期间显示启动画面,请添加 CSplashScreen::ShowSplashScreen();

#include "SplashScreen.h"

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
    MSG msg;
    
    // display splash screen and have it turn off after 10 seconds
    CSplashScreen::ShowSplashScreen( hWnd, "http://applehome.com/", 10000);
  .
  .
  .
    while (GetMessage(&msg, NULL, 0, 0))  {
        if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }

    return msg.wParam;
}

要显示关于框,请将 CSplashScreen::ShowSplashScreen() 添加到 WndProc(…)

#include "SplashScreen.h"

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message) {
    case WM_COMMAND:
        // Parse the menu selections:
        switch (LOWORD(wParam)) {
        case IDM_ABOUT:
            // display about box
            CSplashScreen::ShowSplashScreen( hWnd );
            break;
        }
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

幕后

由于我是一名顾问,我为每个客户创建一个专门的位图。 我通常将公司徽标和应用程序图标放置在 IDB_SPLASH 位图中。 根据您的艺术才能,您可以制作一个非常专业的启动画面。 版本字符串写在位图的顶部。

有 3 组字符串:产品名称、正文和状态。 正文由一个或多个公司名称、版本、版权和注释字符串组成。 我更喜欢产品名称更大,正文的多行更小。 我仅在应用程序加载时才使用状态。

每个组都有静态变量,用于指定如何绘制该组中的字符串

  • m_xxxVerticalOffset - 位图顶部和第一个字符串之间的空白空间
  • m_xxxVerticalHeight - 一组字符串的最大高度
  • m_xxxLeftMargin - 从左侧到字符串放置位置的距离
  • m_xxxRightMargin - 从右侧到字符串的距离
  • m_xxxFontName - 字符串的字体名称
  • m_xxxPointSize - 用于字符串的字号,(-1,-1) ==> 计算字号
  • m_xxxTextColor - 用于字符串的颜色

正文可以有 0 到 4 个字符串。 设置静态显示变量

  • m_displayCompanyName - 如果显示公司名称则为 true
  • m_displayVersion - 如果显示版本则为 true
  • m_displayCopyright - 如果显示版权则为 true
  • m_displayComments - 如果显示注释则为 true

当调用 CSplashScreen::ShowSplashScreen() 时,将实例化 CSplashScreen 类。 当超时到期、按键或单击鼠标时,它将被删除。

历史

  • 发布日期:2009 年 4 月 21 日
© . All rights reserved.