自定义Splash屏幕类开发指南

在软件开发过程中,Splash屏幕是一个常见的元素,它在程序启动时显示,给用户一个程序正在加载的视觉反馈。然而,标准的Splash屏幕通常只能显示矩形的位图,这限制了其在视觉上的灵活性。为了解决这个问题,开发了一个名为CSplashScreenEx的自定义Splash屏幕类,它允许显示非矩形的位图,同时不会遮挡背景。

这个类需要MFC(Microsoft Foundation Classes)库的支持,可以静态或动态链接到项目中。它在Visual Studio .NET下编写、编译并测试,但也应该能够在VC6中良好工作。

如何使用这个类

使用这个类非常简单:只需将SplashScreenEx.h和SplashScreenEx.cpp文件添加到项目中,然后在应用程序中包含SplashScreenEx.h头文件。要显示Splash屏幕,只需在OnInitDialog()函数中添加以下代码:

CSplashScreenEx *pSplash = new CSplashScreenEx(); pSplash->Create(this, NULL, 2000, CSS_FADE | CSS_CENTERSCREEN | CSS_SHADOW); pSplash->SetBitmap(IDB_SPLASH, 255, 0, 255); pSplash->Show();

这样,Splash屏幕就会出现2000毫秒,然后消失并释放分配的内存。

重要说明:这个类必须在堆上分配,因为它会在消失时自动销毁。

类文档

创建Splash屏幕,直到调用Show()方法之前都保持隐藏状态。

BOOL Create(CWnd *pWndParent, LPCTSTR szText=NULL, DWORD dwTimeout=2000, DWORD dwStyle=CSS_FADE | CSS_CENTERSCREEN | CSS_SHADOW);

参数说明:

  • pWndParent: 父窗口(this)
  • szText: 在Splash屏幕上显示的文本
  • dwTimeout: Splash屏幕消失前的毫秒数。如果为0,则Splash屏幕会永久显示。
  • dwStyle: 可以是以下值的组合:
    • CSS_FADEIN: 出现时的淡入动画
    • CSS_FADEOUT: 消失时的淡出动画
    • CSS_FADE=CSS_FADEIN | CSS_FADEOUT: 淡入+淡出
    • CSS_SHADOW: 在Splash屏幕下显示阴影
    • CSS_CENTERSCREEN: 将Splash屏幕居中于屏幕
    • CSS_CENTERAPP: 将Splash屏幕居中于父窗口
    • CSS_HIDEONCLICK: 当按下键或用鼠标点击时,Splash屏幕消失并销毁

将Splash屏幕与位图关联。

BOOL SetBitmap(UINT nBitmapID, short red=-1, short green=-1, short blue=-1); BOOL SetBitmap(LPCTSTR szFileName, short red=-1, short green=-1, short blue=-1);

参数说明:

  • nBitmapId: 位图的资源ID
  • szFileName: 硬盘上位图的路径
  • red, green, blue: 位图的透明度颜色(RGB颜色)。设置为-1以禁用位图透明度

显示Splash屏幕。

void Show();

隐藏并销毁Splash屏幕。

void Hide();

更改Splash屏幕上显示的文本。

void SetText(LPCTSTR szText);

更改文本的字体。

void SetTextFont(LPCTSTR szFont, int nSize, int nStyle);

参数说明:

  • nStyle: 可以是以下值之一或组合:
    • CSS_TEXT_NORMAL
    • CSS_TEXT_BOLD
    • CSS_TEXT_ITALIC
    • CSS_TEXT_UNDERLINE

为Splash屏幕上显示的文本设置系统默认字体。

void SetTextDefaultFont();

更改文本颜色。

void SetTextColor(COLORREF crTextColor);

更改文本矩形边界。

void SetTextRect(CRect& rcText);

更改文本格式;有关不同值,请参见MSDN中的DrawText函数(默认为DT_CENTER | DT_VCENTER | DT_WORDBREAK)。

void SetTextFormat(UINT uTextFormat);

技术问题

当调用SetBitmap()方法时,如果指定了透明度颜色,将生成一个GDI区域(感谢Davide Pizzolato的代码),并将此区域应用于Splash屏幕窗口(SetWindowRgn(...))。这使得窗口不再是矩形。其余的代码是基本的,在WM_PAINT处理程序中,背景位图被绘制到窗口上。有关实现的更多细节,请参考代码。

希望这个类对有所帮助,如果发现任何内存或GDI泄漏,或者有增强这个类的改进建议,请发表评论。如果在免费软件、共享软件或商业应用程序中使用这个类,请告诉,会很高兴的。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485