WEB开发网
开发学院软件开发VC VC++工程中加入 SplashScreen 原理释解 阅读

VC++工程中加入 SplashScreen 原理释解

 2006-07-23 11:25:17 来源:WEB开发网   
核心提示: (1)在CWinApp::InitInstance()中调用CSplashWnd::EnableSplashScreen()设置c_bShowSplashWnd;在PreTranslateMessage()中调用CSplashWnd::PreTranslateAppMessage(),将键

(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都没有关系。

第二步,我们再来看看如何在基于对话框的工程中加入 SplashScreen。

通过对以上SDI工程中加入SplashScreen原理的剖析,我想大家也想到如何在基于对话框的工程中加入这一特性了。其实质就是由CDialog类完成SDI工程中CMainFrame类的工作,实现步骤如下:

(1)利用ClassWizard为CMyDialog添加WM_CREATE消息的处理函数OnCreate();(这里使用CMyDialog是为了与函数内的基类名CDialog区别。)

int CMyDialog::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
  if (CDialog::OnCreate(lpCreateStruct) == -1)
    return -1;
  CSplashWnd::ShowSplashScreen(this);
  return 0;
}    

(2)利用ClassWizard为CWinApp添加消息转发处理函数PreTranslateMessage();

BOOL CWinApp::PreTranslateMessage(MSG* pMsg)
{
  if (CSplashWnd::PreTranslateAppMessage(pMsg))
    return TRUE;
  
  return CWinApp::PreTranslateMessage(pMsg);
}

(3)CWinApp::InitInstance()中加入如下调用: CSplashWnd::EnableSplashScreen(TRUE);

(4)当然你还需要将上一个SDI工程中生成的Splash.CPP与Splash.H文件拷贝到当前工程目录下,并利用Project->Add to Project->Files将这两个文件引入工程。同时还要在CWinApp与CMainFrame的实现文件中#include "Splash.H"。

(5)然后在资源管理器里添加一个ID为IDB_SPLASH的位图。由于VC++的IDE只能显示256色以下的位图,所以如果你想显示一幅真彩色的位图,就请用Import方式导入一幅预先制作好的位图。当然VC++会提示位图已经成功导入,只是无法在IDE的位图编辑器中显示,而在程序运行时就会显示了。如果你想象Word那样显示用户名等信息,可以在CSplashWnd::Create()中装载位图之后增加自己的代码来修改位图。

通过以上这几步操作,我们就完成了在基于对话框的工程中加入SplashScreen的工作。清楚了吗?

上一页  1 2 3 4 

Tags:VC 工程 加入

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接