【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创建默认的单文档程序;(非常easy,不须要多说)
2.在project的资源编辑器中。创建一个对话框(启动画面)
改动对话框的属性:
对话框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);
}
(三)执行效果图:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hlbl9qaW50/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
【VC编程技巧】窗口☞3.5对单文档或者多文档程序制作启动画面的更多相关文章
- VC++编程中为程序加入启动画面功能
如何为自己的程序加入启动画面 观察我们平常使用的软件,当我们双击软件的时候,会在主界面出现前,先行出现一个启动画面,由于前一阵子写了一个基于对话框的程序,亲自实验了下,今天就为大家简单的介绍下,在我 ...
- IOS编程教程(八):在你的应用程序添加启动画面
IOS编程教程(八):在你的应用程序添加启动画面 虽然你可能认为你需要编写闪屏的代码,苹果已经可以非常轻松地把它做在Xcode中.不需要任何编码.你只需要做的是设置一些配置. 什么是闪屏 对于那些 ...
- 【VC编程技巧】窗口☞3.6以渐变效果加载对话框
平时我们常常能够看到非常多应用程序启动过程非常酷.什么百叶窗.渐变,各种效果,今天我们看一下怎样在程序中添加这样的效果. 一.演示样例展示: watermark/2/text/aHR0cDovL2Js ...
- 【VC编程技巧】窗口☞3.4利用bitmap改变对话框的背景。
效果图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hlbl9qaW50/font/5a6L5L2T/fontsize/400/fill/I0JBQ ...
- VC编程技巧:IE控件的高级用法
一.如何显示内存中的 HTML 网页 二.屏蔽 IE 控件的上下文菜单 三.扩展 HTML 脚本中的 external 对象 四.显示 HTML 样式的对话窗 五.执行 HTML 脚本 http:// ...
- 【VC编程技巧】文件☞2.3CArchive的用法
CArchive 对象提供了一个类型安全缓冲机制CArchive 对象提供了一个类型安全缓冲机制.用于将可序列化对象写入CFile 对象或从中读取可序列化对象.通常,CFile 对象表示磁盘文件:但是 ...
- 用VC制作应用程序启动画面
摘 要:本文提供了四种启动画面制作方法. 使用启动画面一是可以减少等待程序加载过程中的枯燥感(尤其是一些大型程序):二是 可以用来显示软件名称和版权等提示信息.怎样使用VC++制作应用程序的启动画面呢 ...
- VC编程小技巧之框架窗口及其他
1.修改主窗口风格 AppWizard生成的应用程序框架的主窗口具有缺省的窗口风格,比如在窗口标题条中自动添加文档名.窗口是叠加型的.可改变窗口大小等.要修改窗口的缺省风格,需要重载CWnd::Pre ...
- 积累的VC编程小技巧之框架窗口及其他
1.修改主窗口风格 AppWizard生成的应用程序框架的主窗口具有缺省的窗口风格,比如在窗口标题条中自动添加文档名.窗口是叠加型的.可改变窗口大小等.要修改窗口的缺省风格,需要重载CWnd::Pre ...
随机推荐
- Java Break和continue实现goto功能
continue实验 1 public class test { static int i =0; public static void main(String[] args) { lable1: w ...
- C#中关于XML与对象,集合的相互转换
XML与对象,集合的相互转化 今天小伙伴在群里问了一下关于XML与对象之间的相互转换,作为菜鸟的我正好趁着闲着的时间学习了一波,直接上代码了,有疑问或者有错误的地方还请大家指正,谢谢.... usin ...
- python课程设计笔记(三)turtle绘图库(海龟库)
实例:绘制一条蟒蛇 #turtle:绘图库(海龟库) import turtle turtle.setup(650,350,200,200) turtle.penup() turtle.fd(-250 ...
- (转载)tnsping不是内部或外部命令
手动添加 D:\app\Administrator\product\11.2.0\client_1\bin 到系统环境变量 path里面
- 【技术累积】【点】【java】【6】时间戳
闲聊 加班多诶,写博客诶. 基本 时间戳,直观理解就是时间上面盖个戳罢了,在时间这个轴上面记录个点: unix时间戳表示从开始的时间点开始,经过了多少秒: 可以简单的看做是一个计时器: 基本定义可以直 ...
- 常用CSS代码片段常见css bug
1.禁止文字被选中 .unselectable { -moz-user-select: -moz-none; -khtml-user-select: none; -webkit-user-select ...
- Js判断一个字符串是否包含一个子串
Js中经常遇到判断一个字符串是否包含一个子串,java语言中有containes的方法,直接调用就可以了.除非引用第三方数据库,Js中没有contains方法. 为了实现更java语言中contain ...
- MySQL安装部署
MySQL安装部署 使用自动化脚本
- UVA455 - Periodic Strings(紫书习题3.4)
如果一个字符串可以被某个长度为k的字符串重复多次得到,则称这个字符串的周期为k.例如,字符串"abcabcabcabc"以3为周期(当然,他也以6.12等等为周期). 现在请你编 ...
- [NOIP 2010] 关押罪犯 (二分+二分图判定 || 并查集)
题目描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用"怨气值"( ...