VC++工程中加入SplashScreen原理释解
2010-05-12 20:35:28 来源:WEB开发网核心提示:再看看CWinApp和CMainFrame类中发生了什么样的改变:(1)在CWinApp::InitInstance()中调用CSplashWnd::EnableSplashScreen()设置c_bShowSplashWnd;在PreTranslateMessage()中调用CSplashWnd::PreTransl
再看看CWinApp和CMainFrame类中发生了什么样的改变:
(1)在CWinApp::InitInstance()中调用CSplashWnd::EnableSplashScreen()设置c_bShowSplashWnd;
在PreTranslateMessage()中调用CSplashWnd::PreTranslateAppMessage(),将键盘和鼠标消息传递给CSplashWnd对象,从而进一步调用CSplashWnd::HideSplashScreen()实现SplashScreen窗口的自身销毁。
(2)在CMainFrame对象的OnCreate()中调用CSplashWnd::ShowSplashScreen()创建一个静态的SplashScreen窗口对象c_pSplashWnd,并设置其父窗口为CMainFrame。在这个过程中,CSplashWnd自身会通过创建来设置一个定时器,然后定时器在第一个周期触发时便调用HideSplashScreen()销毁自己。
(3) 而CMainFrame对象的窗口创建消息则是由CWinApp对象在InitInstance()中通过
m_pMainWnd->ShowWindow()调用触发的。
整个过程可以用下图表示,基本原理就是由CMainFrame来创建CSplashWnd,然后由CSplashWnd自己的定时器触发定时消息来销毁窗口。所以 CSplashWnd 的加入与SDI还是MDI都没有关系。
更多精彩
赞助商链接