How to insert a splash screen in a dialog-based application by using Visual C++ .NET or Visual C++ 2005 (817372)
The information in this article applies to:
- Microsoft Visual C++ 2005 Express Edition
- Microsoft Visual C++ .NET (2003)
- Microsoft Visual C++ .NET (2002)
SUMMARYIn 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
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. back to the topCreate and Insert a
Splash Screen in a Dialog-based ApplicationTo create and insert a splash screen in dialog-based
applications, follow these steps:
- Start Visual Studio .NET or Microsoft Visual Studio 2005
- On the File menu, point to New, and then click Project.
- Click Visual C++ Projects under Project Types, and then click MFC Application under Templates.
Note In Visual Studio 2005, click Visual C++ under Project Types, and then click MFC Application under Templates. - Name the project MyApp, and then click OK.
- The MFC Application Wizard dialog box appears.
- Click Application Type, click Dialog based, and then click Finish.
back to the topCreate a Dialog Box in
the Resource Editor To create a dialog box in the resource editor that is both visible
and centered, with a thin border and no caption, follow these steps:
- In Resource View, expand MyApp.rc, right-click the Dialog folder, and then click Insert Dialog. By default, IDD_DIALOG1 is
created.
- Remove the OK button and the Cancel button from IDD_DIALOG1. To do this, right-click each button, and then click Delete.
- Right-click in IDD_DIALOG1, and then click Properties.
- Under Misc, double-click ID.
Note In Visual Studio 2005, double-click ID under Horizontal Scrollbar. - In the ID property, click IDD_DIALOG1, and then type IDD_SPLASH.
- Under Appearance, set the Title Bar property to False, and then set the Border property to Thin.
back to the topAdd Text to Your Splash
Screen- Add a Static Text control to IDD_SPLASH.
- Edit the text in Caption property.
back to the
topCreate a New CDialog
Derived Class- Double-click the dialog box. The MFC Class Wizard dialog box appears.
- Type CSplashDlg in the Class name text box, and
then click CDialog in the Base class list.
- Click Finish. SplashDlg.cpp and SplashDlg.h are added to your project.
back to the
topAdd Functions to Your Project- 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: - Add the OnTimer event. To do this, follow these steps:
- In Class View, right-click CSplashDlg, and then click Properties.
- In the Properties pane, click the Messages icon to view the messages.
- In the WM_TIMER field, click OnTimer.
- Modify the method as follows:
void CSplashDlg::OnTimer(UINT nIDEvent)
{
// Destroy the splash screen window.
HideSplashScreen();
}
- 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
}
back to the
topDisplay the Splash Screen 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);
} back to the
topCompile the
Solution Press F5 to compile the solution and to run
the application. You may see that the splash screen is
displayed. back to the
topREFERENCES
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
HOWTO: Insert a Splash Screen into a Dialog-Based Application
back to
the top
| Modification Type: | Major | Last Reviewed: | 1/6/2006 |
|---|
| Keywords: | kbHOWTOmaster kbinfo kbhowto kbDlg kbLangCPP KB817372 kbAudDeveloper |
|---|
|
|
|
©2004 Microsoft Corporation. All rights reserved.
|
|