In Microsoft Visual Studio 6.0, you can insert a splash
screen in an MFC Single-Document Interface (SDI) application or a Multiple-Document Interface
(MDI) application by using the Visual C++ Component Gallery. However, you cannot insert a splash screen in a dialog-based application in the Visual C++
Component Gallery.
For additional information about how to add a splash screen to an MFC dialog-based application in Microsoft Visual Studio 6.0, click the following article number to view the article in the Microsoft Knowledge Base:
190684
(http://support.microsoft.com/kb/190684/
)
HOWTO: Insert a Splash Screen into a Dialog-Based Application
Because there is no direct way to create a splash screen
in Visual C++ .NET or in Visual C++ 2005, you must build a dialog-based application by using
the AppWizard, and then add a class that derives from CDialog (for example,
CSplashDlg). Modify the code to be a splash screen.
Declare the c_pSplashDlg static variable by adding the following line to the SplashDlg.h file:
static CSplashDlg* c_pSplashDlg;
In Class View, right-click CSplashDlg, point to Add, and then click Add Function to add the following functions:
ShowSplashScreen(CWnd* pParentWnd): Static method that is used to display the splash dialog.
In the Return Type list, click void.
In the Function Name text box, type ShowSplashScreen.
In the Parameter Type list, click CWnd* .
In the Parameter Name text box, type pParentWnd.
Click to select the Static check box.
HideSplashScreen(): Method that is used to destroy the splash dialog.
In the Return Type list, click void.
In the Function Name text box, type HideSplashScreen.
PreTranslateAppMessage(MSG* pMsg): Method that is used to hide the splash screen whenever keyboard
or mouse messages are received.
In the Return Type list, click BOOL.
In the Function Name text box, type PreTranslateAppMessage.
In the Parameter Type list, click MSG*.
In the Parameter Name text box, type pMsg.
Click to select the Static check box.
Modify the three methods that you just created as follows:
void CSplashDlg::ShowSplashScreen(CWnd* pParentWnd /*= NULL*/)
{
// Allocate a new splash screen, and create the window.
c_pSplashDlg = new CSplashDlg;
if (!c_pSplashDlg->Create(CSplashDlg::IDD, pParentWnd))
delete c_pSplashDlg;
else
c_pSplashDlg->ShowWindow(SW_SHOW);
c_pSplashDlg->UpdateWindow();
c_pSplashDlg->SetTimer(1,2000, NULL);
}
void CSplashDlg::HideSplashScreen()
{
// Destroy the window, and update the mainframe.
c_pSplashDlg->KillTimer(1);
DestroyWindow();
AfxGetMainWnd()->UpdateWindow();
delete c_pSplashDlg;
c_pSplashDlg = NULL;
}
BOOL CSplashDlg::PreTranslateAppMessage(MSG* pMsg)
{
if (c_pSplashDlg == NULL)
return FALSE;
// If you receive a keyboard or mouse message, hide the splash screen.
if (c_pSplashDlg->m_hWnd != NULL && pMsg->message == WM_KEYDOWN ||
pMsg->message == WM_SYSKEYDOWN ||
pMsg->message == WM_LBUTTONDOWN ||
pMsg->message == WM_RBUTTONDOWN ||
pMsg->message == WM_MBUTTONDOWN ||
pMsg->message == WM_NCLBUTTONDOWN ||
pMsg->message == WM_NCRBUTTONDOWN ||
pMsg->message == WM_NCMBUTTONDOWN)
{
c_pSplashDlg->HideSplashScreen();
return TRUE; // message handled here
}
return FALSE; // message not handled
}
Note You must add the common language runtime support compiler option (/clr:oldSyntax) in Visual C++ 2005 to successfully compile this code sample.
To do this, follow these steps:
Click Project, and then click ProjectName Properties.
Note ProjectName represents the name of the project.
Expand Configuration Properties, and then click General.
Click to select Common Language Runtime Support, Old Syntax (/clr:oldSyntax) in the Common Language Runtime support project setting on the right pane, click Apply, and then click OK.
For more information about the common language runtime support compiler options, visit the following Microsoft Web site:
Override the OnInitDialog method of the CSplashDlg class. To do this, follow these steps:
In Class View, right-click CSplashDlg, and then click Properties.
In the Properties pane, click the Overrides icon to display the list of overridable
methods. In the OnInitDialog field, click <Add> OnInitDialog.
Modify the OnInitDialog override method that you created in step
b. To do this, follow these steps:
BOOL CSplashDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CenterWindow();
SetWindowPos(&CWnd::wndTopMost, 0, 0, 0, 0,
SWP_NOMOVE|SWP_NOSIZE);
return TRUE; // return TRUE unless you set the focus to a control
}
To view the splash screen, open your application source file, MyAppDlg.cpp, and then follow these steps:
Add the following lines of code at the beginning of the
file:
#include "SplashDlg.h"
CSplashDlg* CSplashDlg::c_pSplashDlg; //This is required ( in one of the files ) because the static variable 'c_pSplashDlg' is declared outside this file
In the OnInitDialog() method, add the following code after the line
CDialog::OnInitDialog():
CSplashDlg::ShowSplashScreen(NULL);
Override the PreTranslate Message method of the CMyAppDlg
class. To do this, follow these steps:
In Class View, right-click CMyAppDlg, and then click Properties
In the Properties pane, click the Overrides icon to display the list of overridable methods.
In the PreTranslateMessage field, click <Add>
PreTranslateMessage.
Modify the PreTranslateMessage override method that you created in
step c as follows:
BOOL CMyAppDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and call the base class, or both.
if (CSplashDlg::PreTranslateAppMessage(pMsg))
return TRUE;
return CDialog::PreTranslateMessage(pMsg);
}
For additional information about how to add a splash screen to an MFC dialog-based application in Microsoft Visual Studio 6.0, click the following article number to view the article in the Microsoft Knowledge Base:
190684
(http://support.microsoft.com/kb/190684/
)
HOWTO: Insert a Splash Screen into a Dialog-Based Application