想给公司的软件加一个启动闪屏,看看有现成的源代码没有,结果上网看了一下,没有合适的,有人做了闪屏,却是阻塞式的,也就是说什么都不干,让主程序Sleep,光闪屏给用户看,这哪是闪屏嘛,连闪屏的基本作用都没弄明白,就开始发文章号称实现了多帅的效果,服了。之后自己写了一个,这里共享一下闪屏的思路。
闪屏的本意,是因为软件启动过程比较慢,动态显示一些信息给用户,防止用户过于傻等而不爽。以前VC6时代可以自动加入这个功能,VS2008反而没有了,需要自己来实现了。
由于代码在公司不能拿出来,这里共享一下思路。
1 从CWinThread继承一个类,比如叫CFlashThread,在这个类中,增加以下方法:
1 AddMsg(LPCTSTR szMsg);
2 AddMsg(const CString& strMsg);
3 CString& GetMsg();
4 SetExitFlag();
实现过程很简单,用一个CStringArray,保存传入进来的字符串。GetMsg函数,会自动将第一个字符串返回,并移除CStringArray队列的第一个。注意AddMsg和GetMsg,要增加CCriticalSection,进行保护,防止多线程同时操作。
2 从CWnd继承一个窗口类,比如叫CFlashWnd,这个类,用来实现闪屏的主界面,给用户呈现一个图片,并且不断的刷新缓存的字符串