【VC编程技巧】窗体?3.5对单文档或者多文档程序制作启动画面

(一)概要:

文章描述了怎样通过Visual C++ 2012或者Visual C++ .NET,为单文档或者多文档程序制作启动画面。在Microsoft Visual Studio 6.0中对于单文档程序(SDI)我们可以很方便利用微软提供的组件Visual C++ Component (Splash Screen)。因为在Microsoft Visual Studio 6.0以后的版本或者Visual C++ .NET没有提供这个组件,我们可以通过自定义对话框来实现Splash Screen功能。

(二)对于单文档或者多文档程序制作启动画面

1.启动Microsoft Visual Studio 2012创建默认的单文档程序;(很简单,不需要多说)

2.在工程的资源编辑器中,创建一个对话框(启动画面)

修改对话框的属性:

对话框ID:IDD_SPLASH

对话框Title Bar:False

对话框Border:Thin

3.添加图片控件picture control在启动画面

修改控件属性:

控件type:bitmap

4.创建启动画面添加关联类CSplashDlg,

类CSplashDlg的基类:CDialog

5.对于类CSplashDlg添加如下函数(根据Microsoft Visual Studio 6.0中Splash Screen控件自动生成):

// CSplashDlg メッセージ ハンドラー

//说明:静态函数,用于显示启动画面( splash screen )
//参数:pParentWnd 父窗口指针
void CSplashDlg::ShowSplashScreen(CWnd* pParentWnd)
{
	// 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);
}

//说明:用于销毁启动画面( splash screen )
//参数:无
void CSplashDlg::HideSplashScreen(void)
{
	// Destroy the window, and update the mainframe.
	c_pSplashDlg->KillTimer(1);
	DestroyWindow();
	AfxGetMainWnd()->UpdateWindow();
	delete c_pSplashDlg;
	c_pSplashDlg = NULL;
}

//说明:静态函数,用于键盘或鼠标消息触发时,退出启动画面( splash screen )
//参数:pMsg MFC标准消息
BOOL CSplashDlg::PreTranslateAppMessage(MSG* pMsg)
{
	if (c_pSplashDlg == NULL)
		return FALSE;

	// If you receive a keyboard or a 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
}

//说明:用于控制启动画面( splash screen )持续的时间
//参数:MFC标准Event
void CSplashDlg::OnTimer(UINT_PTR nIDEvent)
{
	// TODO: ここにメッセージ ハンドラー コードを追加するか、既定の処理を呼び出します。

	// Destroy the splash screen window.
	HideSplashScreen();

	//CDialogEx::OnTimer(nIDEvent);
}

BOOL CSplashDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// TODO:  ここに初期化を追加してください
	//设置启动画面的图片
	SetImage(_T("1.png"), IDC_PIC);
	//启动画面居中
	CenterWindow();
	//启动画面置定
	SetWindowPos(&CWnd::wndTopMost, 0, 0, 0, 0,
      SWP_NOMOVE|SWP_NOSIZE);

	return TRUE;  // return TRUE unless you set the focus to a control
	// 例外 : OCX プロパティ ページは必ず FALSE を返します。
}

//说明:将图片显示在指定PictureControl上
//参数:pszFileName 图片名(全路径/相对路径)
//      uID        PictureControl控件ID
VOID CSplashDlg::SetImage(LPCTSTR pszFileName, UINT uID)
{
	CStatic* pWnd = (CStatic*)GetDlgItem(uID);
    CImage image;
    image.Load(pszFileName);
    HBITMAP hBmp = image.Detach();
	CRect rect;
	GetClientRect(&rect);
    pWnd->SetBitmap(hBmp);
    pWnd->SetWindowPos(NULL,
		rect.left,
		rect.top,
		rect.right,
		rect.bottom,
        SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER);
	return VOID();
}

6.通过调用上面类CSplashDlg的成员函数,控制启动画面。

在单文档框架显示之前显示启动画面

// CSplashSDIApp 初期化

BOOL CSplashSDIApp::InitInstance()
{
	...

	//添加启动画面
	CSplashDlg::ShowSplashScreen(NULL);

	// メイン ウィンドウが初期化されたので、表示と更新を行います。
	m_pMainWnd->ShowWindow(SW_SHOW);
	m_pMainWnd->UpdateWindow();
	return TRUE;
}

截取主框架消息(当有鼠标或者键盘消息时,启动画面退出)

BOOL CSplashSDIApp::PreTranslateMessage(MSG* pMsg)
{
	// TODO: ここに特定なコードを追加するか、もしくは基本クラスを呼び出してください。

	if(CSplashDlg::PreTranslateAppMessage (pMsg))
		return TRUE;

	return CWinAppEx::PreTranslateMessage(pMsg);
}

(三)运行效果图:

【VC编程技巧】窗体?3.5对单文档或者多文档程序制作启动画面,布布扣,bubuko.com

时间: 2024-08-02 06:47:20

【VC编程技巧】窗体?3.5对单文档或者多文档程序制作启动画面的相关文章

【VC编程技巧】窗体?3.8静态窗口分割

窗口分割在平时编成中用的特别多,Windows的资源管理器,编写代码的IDE(Visual Stdio,Eclipse)都有窗口分割,下面我们以单文档维例开始讲如何进行窗口分割! CSplitterWnd Class class CSplitterWnd : public CWnd CSplitterWnd类很方便的提供了窗口分割的功能,只需下面几步就能完成窗口分割: 定义CSplitterWnd对象在窗口框架类(CFrameWnd或者CMDIChildWnd)中: 重载框架类成员函数CFram

【VC编程技巧】窗体?3.9静态窗口分割 (固定分割线)

上一章节说明了如何静态的分割窗口,分割后窗口的分割线是可以拖动的,有的时候我们需要固定分割线,那么如何实现固定分割呢? 我们需要构造出固定分割窗口类(CFixedSplitterWnd),来实现我们对窗口的固定分割,以上一章例来说明. 1.新创建MFC类,从CSplitterWnd继承,并重载WM_LBUTTONDOWN ,WM_MOUSEMOVE 和 WM_SETCURSOR消息响应函数. 2.新构造的CFixedSplitterWnd使用方法和CSplitterWnd一样. 通过MFC类向导

【VC编程技巧】窗体?3.7托盘程序介绍(模拟QQ消息)

所谓的托盘程序就是运行时在系统托盘区(就是桌面右下角显示时间的区域)出现一个小图标的程序.代表它运行的图标称作托盘图标.我们可以通过使用小图标来控制应用程序的状态. (一)NOTIFYICONDATA Structure typedef struct _NOTIFYICONDATA { DWORDcbSize;//结构体大小 HWNDhWnd;//接受icon消息的窗口句柄 UINT uID;//icon图标的资源Id UINTuFlags;//标志一些成员是否有效 UINTuCallbackM

【VC编程技巧】窗体?3.4利用bitmap改变对话框的背景。

效果图: 代码: 1.在对话框初始化函数OnInitDialog中加载bitmap,然后创建新的画刷. // CBitmapDemoDlg メッセージ ハンドラー BOOL CBitmapDemoDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // "バージョン情報..." メニューをシステム メニューに追加します. // IDM_ABOUTBOX は.システム コマンドの範囲内になければなりません. ASSERT((IDM_ABOUT

【VC编程技巧】窗体?3.6以渐变效果载入对话框

平时我们经常可以看到很多应用程序启动过程很酷,什么百叶窗,渐变,各种效果,今天我们看一下如何在程序中增加这种效果. 一.示例展示: 二.示例思路: 1.首先介绍两个知识,一个是函数MoveWindow(),一个是定时器.  函数MoveWindow():改变指定窗口的位置和大小.对顶窗口来说,位置和大小取决于屏幕的左上角;对子窗口来    说,位置和大小取决于父窗口客户区的左上角.函数原形如下: BOOL MoveWindow( HWND hWnd, int X, int Y, int nWi

VC++编程中为程序加入启动画面功能

 如何为自己的程序加入启动画面 观察我们平常使用的软件,当我们双击软件的时候,会在主界面出现前,先行出现一个启动画面,由于前一阵子写了一个基于对话框的程序,亲自实验了下,今天就为大家简单的介绍下,在我们的程序中如何实现增加启动画面的功能. 在这里说明说明一下,我们平常使用的编译器是VS2010 或者是VS2012,在早一点的版本中,例如vc6.0中,加入启动画面这一功能,编译器已经为我们封装好,我们直接使用他所提供的CSplashWnd类就行了.单击[Project\Add to Project

IOS编程教程(八):在你的应用程序添加启动画面

IOS编程教程(八):在你的应用程序添加启动画面 虽然你可能认为你需要编写闪屏的代码,苹果已经可以非常轻松地把它做在Xcode中.不需要任何编码.你只需要做的是设置一些配置. 什么是闪屏 对于那些新学代码的人,可能没有听说过“闪屏”把,让我先作一个简单的解释.闪屏是常见于iOS应用程序,以及其他桌面应用程序.这是你启动一个应用程序时,你看到的第一个画面.通常情况下,初始屏幕是一个覆盖整个屏幕的图像,消失后加载主屏幕.下图显示了几种闪屏: 简单闪屏(开始页面) 闪屏的主要目的是为了让用户知道你的程

【VC编程技巧】窗口?3.6以渐变效果加载对话框

平时我们常常能够看到非常多应用程序启动过程非常酷.什么百叶窗.渐变,各种效果,今天我们看一下怎样在程序中添加这样的效果. 一.演示样例展示: 二.演示样例思路: 1.首先介绍两个知识,一个是函数MoveWindow(),一个是定时器. ? 函数MoveWindow():改变指定窗体的位置和大小.对顶窗体来说,位置和大小取决于屏幕的左上角;对子窗体来    说,位置和大小取决于父窗体客户区的左上角.函数原形例如以下: BOOL MoveWindow( HWND hWnd, int X, int Y

【VC编程技巧】控件?4.1位图Button

4.1位图Button 给按钮增加位图,或改变按钮字体,可以让按钮达到跟炫的效果:如何给按钮增加位图,和改变按钮上文字的字体?请看下面示例! 1>创建对话框程序,建立如下对话框: 图1 资源ID说明: 左边按钮ID:IDC_BUTTON1 右边按钮ID:IDCANCEL 2>设置button属性,设置选项如下图箭头处: 图2 3>添加位图到工程,如下图箭头处: 图3 4>给左边按钮添加控件变量(利用类向导); CBitmapButton m_bitmapButton; ※如果类向导