在软件开发过程中,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);
参数说明:
将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);
参数说明:
显示Splash屏幕。
void Show();
隐藏并销毁Splash屏幕。
void Hide();
更改Splash屏幕上显示的文本。
void SetText(LPCTSTR szText);
更改文本的字体。
void SetTextFont(LPCTSTR szFont, int nSize, int nStyle);
参数说明:
为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泄漏,或者有增强这个类的改进建议,请发表评论。如果在免费软件、共享软件或商业应用程序中使用这个类,请告诉,会很高兴的。