给VS2008/VS2010nbsp;MFC项目添加…

2024-06-04 18:58
文章标签 项目 mfc vs2008 vs2010nbsp

本文主要是介绍给VS2008/VS2010nbsp;MFC项目添加…,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在VC6.0时代,我们通过在MFC工程中插入Splash组件来简单方便的实现这个功能,但在VS2008以后就没有了这个功能,所以如果想给自己的程序添加一个显示Logo的启动画面,就需要自己添加代码来实现,参考了下VC6.0中这个Splash组件添加后的代码,就很容易在自己的项目里实现这个功能。如下图。

 

首先,在菜单的“项目”中选择“类向导”,生成一个启动画面的Splash类。


 

然后,实现代码主要是在CwzdSplash类的头文件和cpp文件中实现。在CwzdSplash类的头文件中我们添加下面的代码:

 

 

[cpp]   view plain copy
  1. #pragma once  
  2. // CWzdSplash  
  3. class CWzdSplash public CWnd  
  4.  
  5.     DECLARE_DYNAMIC(CWzdSplash)  
  6. public 
  7.     CWzdSplash();  
  8.     virtual ~CWzdSplash();  
  9. protected 
  10.     DECLARE_MESSAGE_MAP()  
  11. public 
  12.     CBitmap m_bitmap;  
  13. //  void Create(void);  
  14.     void Create(UINT nBitmapID);  
  15.     afx_msg void OnPaint();  
  16.     afx_msg void OnTimer(UINT_PTR nIDEvent);  
  17. };  
 


在CwzdSplash类的cpp文件中我们添加下面的代码:


 

[cpp]   view plain copy
  1. // WzdSplash.cpp 实现文件  
  2. //  
  3. #include "stdafx.h"  
  4. #include "TinyPlusCompiler.h"  
  5. #include "WzdSplash.h"  
  6. // CWzdSplash  
  7. IMPLEMENT_DYNAMIC(CWzdSplash, CWnd)  
  8.     CWzdSplash::CWzdSplash()  
  9.  
  10.  
  11. CWzdSplash::~CWzdSplash()  
  12.  
  13.  
  14. BEGIN_MESSAGE_MAP(CWzdSplash, CWnd)  
  15.     ON_WM_PAINT()  
  16.     ON_WM_TIMER()  
  17. END_MESSAGE_MAP()  
  18. // CWzdSplash 消息处理程序  
  19. void CWzdSplash::Create(UINT nBitmapID)  
  20.  
  21.     m_bitmap.LoadBitmap(nBitmapID);  
  22.     BITMAP bitmap;  
  23.     m_bitmap.GetBitmap(&bitmap);  
  24.     //CreateEx(0,AfxRegisterWndClass(0),"",WS_POPUP|WS_VISIBLE|WS_BORDER,0,0,bitmap.bmWidth,bitmap.bmHeight,NULL,0);  
  25.     CreateEx(0,  
  26.             AfxRegisterWndClass(0, AfxGetApp()->LoadStandardCursor(IDC_ARROW)),  
  27.             NULL, WS_POPUP WS_VISIBLE, 0, 0, bitmap.bmWidth, bitmap.bmHeight, NULL NULL);  
  28.  
  29. void CWzdSplash::OnPaint()  
  30.  
  31.     // TODO: 在此处添加消息处理程序代码  
  32.     // 不为绘图消息调用 CWnd::OnPaint()  
  33.     CPaintDC dc(this); // device context forpainting  
  34.     BITMAP bitmap;  
  35.     m_bitmap.GetBitmap(&bitmap);  
  36.     CDC dcComp;  
  37.     dcComp.CreateCompatibleDC(&dc);  
  38.     dcComp.SelectObject(&m_bitmap);  
  39.     // draw bitmap  
  40.     dc.BitBlt(0,0,bitmap.bmWidth,bitmap.bmHeight,&dcComp,0,0,SRCCOPY);  
  41.  
  42. void CWzdSplash::OnTimer(UINT_PTR nIDEvent)  
  43.  
  44.     // TODO: 在此添加消息处理程序代码和/或调用默认值  
  45.     //CWnd::OnTimer(nIDEvent);  
  46.     DestroyWindow(); //销毁初始画面窗口  
  47.  


最后在项目的主窗口视图的Create函数中添加下面的实例化过程就可以显示出我们自定义的Logo启动画面了:

 

[c-sharp]   view plain copy
  1. ///显示Splash,2010-10-15///  
  2.        CWzdSplash wndSplash;                 //创建启动窗口类的实例  
  3. wndSplash.Create(IDB_SPLASH);  
  4. wndSplash.CenterWindow();  
  5. wndSplash.UpdateWindow();          //send WM_PAINT  
  6. Sleep(1500);  
  7. wndSplash.DestroyWindow();//销毁初始画面窗口  



注明一下要注意的地方:wndSplash.Create(IDB_SPLASH);中的IDB_SPLASH是在添加位图资源时添加进来的资源ID,自己可以定义自己所喜欢的启动图画。


如果不使用Sleep()函数让线程休眠几秒,我们很难看到这个启动画面,但这样存在一个问题,让线程休眠不是一个好的办法,感觉应该用定时器去实现这功能的,但不是很熟悉定时器的使用,研究一下再把它改过来。

这篇关于给VS2008/VS2010nbsp;MFC项目添加…的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1030843

相关文章

JAVA项目swing转javafx语法规则以及示例代码

《JAVA项目swing转javafx语法规则以及示例代码》:本文主要介绍JAVA项目swing转javafx语法规则以及示例代码的相关资料,文中详细讲解了主类继承、窗口创建、布局管理、控件替换、... 目录最常用的“一行换一行”速查表(直接全局替换)实际转换示例(JFramejs → JavaFX)迁移建

JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)

《JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)》:本文主要介绍如何在IntelliJIDEA2020.1中创建和部署一个JavaWeb项目,包括创建项目、配置Tomcat服务... 目录简介:一、创建项目二、tomcat部署1、将tomcat解压在一个自己找得到路径2、在idea中添加

解决idea启动项目报错java: OutOfMemoryError: insufficient memory

《解决idea启动项目报错java:OutOfMemoryError:insufficientmemory》:本文主要介绍解决idea启动项目报错java:OutOfMemoryError... 目录原因:解决:总结 原因:在Java中遇到OutOfMemoryError: insufficient me

python项目环境切换的几种实现方式

《python项目环境切换的几种实现方式》本文主要介绍了python项目环境切换的几种实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 如何在不同python项目中,安装不同的依赖2. 如何切换到不同项目的工作空间3.创建项目

SpringBoot项目整合Netty启动失败的常见错误总结

《SpringBoot项目整合Netty启动失败的常见错误总结》本文总结了SpringBoot集成Netty时常见的8类问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一、端口冲突问题1. Tomcat与Netty端口冲突二、主线程被阻塞问题1. Netty启动阻

python项目打包成docker容器镜像的两种方法实现

《python项目打包成docker容器镜像的两种方法实现》本文介绍两种将Python项目打包为Docker镜像的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目录简单版:(一次成功,后续下载对应的软件依赖)第一步:肯定是构建dockerfile,如下:第二步

Python + Streamlit项目部署方案超详细教程(非Docker版)

《Python+Streamlit项目部署方案超详细教程(非Docker版)》Streamlit是一款强大的Python框架,专为机器学习及数据可视化打造,:本文主要介绍Python+St... 目录一、针对 Alibaba Cloud linux/Centos 系统的完整部署方案1. 服务器基础配置(阿里

在SpringBoot+MyBatis项目中实现MySQL读写分离的实战指南

《在SpringBoot+MyBatis项目中实现MySQL读写分离的实战指南》在SpringBoot和MyBatis项目中实现MySQL读写分离,主要有两种思路:一种是在应用层通过代码和配置手动控制... 目录如何选择实现方案核心实现:应用层手动分离实施中的关键问题与解决方案总结在Spring Boot和

gitlab项目实现添加新成员

《gitlab项目实现添加新成员》:本文主要介绍gitlab项目实现添加新成员方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录gitlabhttp://www.chinasem.cn项目添加新成员1、进入项目2、手动输入要添加成员的账号或者搜索总结gitlab项

vite搭建vue3项目的搭建步骤

《vite搭建vue3项目的搭建步骤》本文主要介绍了vite搭建vue3项目的搭建步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1.确保Nodejs环境2.使用vite-cli工具3.进入项目安装依赖1.确保Nodejs环境