(一)概要:

文章描写叙述了如何通过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对单文档或者多文档程序制作启动画面的更多相关文章

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

     如何为自己的程序加入启动画面 观察我们平常使用的软件,当我们双击软件的时候,会在主界面出现前,先行出现一个启动画面,由于前一阵子写了一个基于对话框的程序,亲自实验了下,今天就为大家简单的介绍下,在我 ...

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

    IOS编程教程(八):在你的应用程序添加启动画面   虽然你可能认为你需要编写闪屏的代码,苹果已经可以非常轻松地把它做在Xcode中.不需要任何编码.你只需要做的是设置一些配置. 什么是闪屏 对于那些 ...

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

    平时我们常常能够看到非常多应用程序启动过程非常酷.什么百叶窗.渐变,各种效果,今天我们看一下怎样在程序中添加这样的效果. 一.演示样例展示: watermark/2/text/aHR0cDovL2Js ...

  4. 【VC编程技巧】窗口☞3.4利用bitmap改变对话框的背景。

    效果图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hlbl9qaW50/font/5a6L5L2T/fontsize/400/fill/I0JBQ ...

  5. VC编程技巧:IE控件的高级用法

    一.如何显示内存中的 HTML 网页 二.屏蔽 IE 控件的上下文菜单 三.扩展 HTML 脚本中的 external 对象 四.显示 HTML 样式的对话窗 五.执行 HTML 脚本 http:// ...

  6. 【VC编程技巧】文件☞2.3CArchive的用法

    CArchive 对象提供了一个类型安全缓冲机制CArchive 对象提供了一个类型安全缓冲机制.用于将可序列化对象写入CFile 对象或从中读取可序列化对象.通常,CFile 对象表示磁盘文件:但是 ...

  7. 用VC制作应用程序启动画面

    摘 要:本文提供了四种启动画面制作方法. 使用启动画面一是可以减少等待程序加载过程中的枯燥感(尤其是一些大型程序):二是 可以用来显示软件名称和版权等提示信息.怎样使用VC++制作应用程序的启动画面呢 ...

  8. VC编程小技巧之框架窗口及其他

    1.修改主窗口风格 AppWizard生成的应用程序框架的主窗口具有缺省的窗口风格,比如在窗口标题条中自动添加文档名.窗口是叠加型的.可改变窗口大小等.要修改窗口的缺省风格,需要重载CWnd::Pre ...

  9. 积累的VC编程小技巧之框架窗口及其他

    1.修改主窗口风格 AppWizard生成的应用程序框架的主窗口具有缺省的窗口风格,比如在窗口标题条中自动添加文档名.窗口是叠加型的.可改变窗口大小等.要修改窗口的缺省风格,需要重载CWnd::Pre ...

随机推荐

  1. php处理传值为空

    if(isset($_GET['id'])){}else{}isset($_GET['id'])==null

  2. putty和xshell使用和免密登录

    putty和xshell使用和免密登录 XSHELL的设置 事前:我们先去关闭防火墙和selinux 关闭防火墙:   ufw disable 再去看看selinux 一.查看SELinux状态命令: ...

  3. [转]SURF算法解析

    SURF算法解析 一.积分图像    积分图像的概念是由Viola和Jones提出的.积分图像中任意一点(i,j)的值为原图像左上角到任意点(i,j)相应的对焦区域的灰度值的总和,其数学公式如图1所示 ...

  4. SQL数据库链接代码的解释

    SqlConnection conn = new SqlConnection(); conn.ConnectionString = "Data Source=(local);Initial ...

  5. Matlab与C++混合编程

    原文链接:http://blog.csdn.net/zouxy09/article/details/20553007 一不小心,成了一个忠实复制者...

  6. OnLineML一:关于Jubatus 的简介...

    一:简介:原文链接:jubat.us/en/  xuwenq.iteye.com/blog/1702746 Jubatus http://jubat.us/en/overview.html 是一个面向 ...

  7. Resolving Strong Reference Cycles for Closures

    You resolve a strong reference cycle between a closure and a class instance by defining a capture li ...

  8. 浅谈[^>]在正则中的2种用法

    /^A/会匹配"An e"中的A,但是不会匹配"ab A"中的A,此时^A的意思是“匹配开头的A” /[^a-z\s]/会匹配"my 3 sister ...

  9. Python数据结构2-----队列和堆

    一.线性结构:栈.队列.双端队列.列表 二.非线性结构:树.图.堆 [算法中看堆是非线性的,因为其相当于完全二叉树,但堆的存储元素是采用线性的顺序表数组来实现的] 三.队列: 1.队列类型:FIFO. ...

  10. kernel相关前沿技术了解

    Intel MPX https://en.wikipedia.org/wiki/Intel_MPX SPDK http://aidaiz.com/spdk/ TCMalloc http://goog- ...