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

CSplashScreenEx:带 Alpha 混合的非矩形启动屏幕类

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.90/5 (65投票s)

2002年10月1日

3分钟阅读

viewsIcon

419460

downloadIcon

12597

CSplashScreenEx 允许显示带有应用程序初始化信息的非矩形位图。

Sample Image - SplashScreenEx.jpg

引言

不久前,我一直在寻找一个启动屏类,它允许我显示一个非矩形的位图,而不会遮挡背景。由于我没有找到符合我需求的类,所以我开发了我自己的启动屏类:CSplashScreenEx

兼容性

此类需要 MFC 以静态或动态链接到您的项目中;它是在 Visual Studio .NET 下编写、编译和测试的(但应该也能很好地与 VC6 配合使用)。

如何使用该类

该类使用起来非常简单:只需将 SplashScreenEx.hSplashScreenEx.cpp 添加到您的项目中,然后包含 SplashScreenEx.h 到您的应用程序中。要显示启动屏,只需在您的 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();

这样就完成了,启动屏会显示 2000 毫秒,然后消失并释放分配的内存。

重要提示:此类必须在堆上分配,因为它在消失时会自动销毁。

CSplashScreenEx *pSplash=new CSplashScreenEx()

启动屏还可以用于显示应用程序的加载进度,如示例 2 所示。

CSplashScreenEx *pSplash=new CSplashScreenEx();
pSplash->Create(this,"CSplashScreenEx dynamic text:",0,CSS_FADE | 
                        CSS_CENTERSCREEN | CSS_SHADOW);
pSplash->SetBitmap(IDB_SPLASH,255,0,255);
pSplash->SetTextFont("Impact",100,CSS_TEXT_NORMAL);
pSplash->SetTextRect(CRect(125,60,291,104));
pSplash->SetTextColor(RGB(255,255,255));
pSplash->SetTextFormat(DT_SINGLELINE | DT_CENTER | DT_VCENTER);
pSplash->Show();

Sleep(1000);
pSplash->SetText("You can display infos");

Sleep(1000);
pSplash->SetText("While your app is loading");

Sleep(1000);
pSplash->SetText("Just call Hide() when loading");
	
Sleep(1000);
pSplash->SetText("is finished");
Sleep(1500);

pSplash->Hide();

类文档

CSplashScreenEx::Create

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

创建启动屏,它会保持隐藏,直到调用 Show()

参数

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

CSplashScreenEx::SetBitmap

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 以禁用位图透明度

CSplashScreenEx::Show

void Show();

显示启动屏。

CSplashScreenEx::Hide

void Hide();

隐藏并销毁启动屏。

CSplashScreenEx::SetText

void SetText(LPCTSTR szText);

更改启动屏中显示的文本。

CSplashScreenEx::SetTextFont

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

更改文本的字体。

参数

nStyle 可以是以下值之一或组合

  • CSS_TEXT_NORMAL
  • CSS_TEXT_BOLD
  • CSS_TEXT_ITALIC
  • CSS_TEXT_UNDERLINE

CSplashScreenEx::SetTextDefaultFont

void SetTextDefaultFont();

为启动屏中显示的文本设置系统默认字体。

CSplashScreenEx::SetTextColor

void SetTextColor(COLORREF crTextColor);

更改文本颜色。

CSplashScreenEx::SetTextRect

void SetTextRect(CRect& rcText);

更改文本矩形的边界。

CSplashScreenEx::SetTextFormat

void SetTextFormat(UINT uTextFormat);

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

技术问题

当调用 SetBitmap() 时,如果指定了透明色,则会生成一个 GDI 区域(感谢 Davide Pizzolato 的代码),并将该区域应用于启动屏窗口(SetWindowRgn(...))。因此,窗口不再是矩形的。其余代码是基本部分,在 WM_PAINT 处理程序中,背景位图会绘制到窗口上。有关实现的更多详细信息,请参阅代码。

结论

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

许可证

本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。

作者可能使用的许可证列表可以在此处找到。

© . All rights reserved.