第二人生的源码分析(七十一)实现闪屏窗口

现在的电子信息技术发展得很快,特别像CPU这样的硬件,已经进入到多核时代,运行程序的速度比以前快了很多,但人类的需求是无止境的,因此写的程序也越来越大,越来越复杂,导致程序的初始化时,就变得比原来更加漫长。在人机交互理论里,让人等待超过10秒的时间,心情就会变得急躁,感觉这个程序不好用。那么有什么方法解决这个问题呢?在我们的社会里,到处都有排队等待的现象,比如让你去银行办理业务,如果让你站在那里等着,没有任何电视或报纸看,感觉时间需要很长。这里通过看电视和报纸,让人感觉到时间不长。其实还有一个更好的办法,当大家在银行排队时,银行的服务员应立即送上茶、可乐、冰棒等等,让大家一边吃着一边等着,这样排队更加感觉不到时间长了。所以在我们设计程序里,也需要给用户一些“茶、可乐、冰棒”,这就是闪屏窗口。
 
下面是闪屏窗口的类声明。
#001 class LLSplashScreen
#002 {
#003 public:
 
构造和析构函数
#004    LLSplashScreen() { };
#005    virtual ~LLSplashScreen() { };
#006 
#007 
#008    // Call to display the window.
 
创建一个闪屏窗口。
#009    static LLSplashScreen * create();
 
显示闪屏窗口。
#010    static void show();
 
隐藏闪屏窗口。
#011    static void hide();
 
让闪屏窗口显示新的字符串。
#012    static void update(const char* string);
#013 
 
判断闪屏窗口是否可见。
#014    static bool isVisible();
#015 protected:
 
重载下面三个函数实现不同平台的代码。比如WINDOWS与LINUX平台就不一样的。
#016    // These are overridden by the platform implementation
#017    virtual void showImpl() = 0;
#018    virtual void updateImpl(const char* string) = 0;
#019    virtual void hideImpl() = 0;
#020 
#021    static BOOL sVisible;
#022 
#023 };
 
 
下面接着分析WINDOWS平台下的实现代码,如下:
#001 //static
#002 void LLSplashScreen::show()
#003 {
#004    if (!gSplashScreenp)
#005    {
#006 #if LL_WINDOWS && !LL_MESA_HEADLESS
#007        gSplashScreenp = new LLSplashScreenWin32;
#008 #elif LL_DARWIN
#009        gSplashScreenp = new LLSplashScreenMacOSX;
#010 #endif
#011        if (gSplashScreenp)
#012        {
#013            gSplashScreenp->showImpl();
#014        }
#015    }
#016 }
 
上面实现WINDOWS和MAC的创建窗口。在这里主要分析WINDOWS平台的类LLSplashScreenWin32的代码,下一次再来分析它。
posted @ 2008-05-24 21:19  ajuanabc  阅读(214)  评论(0编辑  收藏  举报