给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

相关文章

一文教你如何将maven项目转成web项目

《一文教你如何将maven项目转成web项目》在软件开发过程中,有时我们需要将一个普通的Maven项目转换为Web项目,以便能够部署到Web容器中运行,本文将详细介绍如何通过简单的步骤完成这一转换过程... 目录准备工作步骤一:修改​​pom.XML​​1.1 添加​​packaging​​标签1.2 添加

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

springboot集成Deepseek4j的项目实践

《springboot集成Deepseek4j的项目实践》本文主要介绍了springboot集成Deepseek4j的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录Deepseek4j快速开始Maven 依js赖基础配置基础使用示例1. 流式返回示例2. 进阶

SpringBoot项目启动报错"找不到或无法加载主类"的解决方法

《SpringBoot项目启动报错找不到或无法加载主类的解决方法》在使用IntelliJIDEA开发基于SpringBoot框架的Java程序时,可能会出现找不到或无法加载主类com.example.... 目录一、问题描述二、排查过程三、解决方案一、问题描述在使用 IntelliJ IDEA 开发基于

SpringBoot项目使用MDC给日志增加唯一标识的实现步骤

《SpringBoot项目使用MDC给日志增加唯一标识的实现步骤》本文介绍了如何在SpringBoot项目中使用MDC(MappedDiagnosticContext)为日志增加唯一标识,以便于日... 目录【Java】SpringBoot项目使用MDC给日志增加唯一标识,方便日志追踪1.日志效果2.实现步

Ubuntu中Nginx虚拟主机设置的项目实践

《Ubuntu中Nginx虚拟主机设置的项目实践》通过配置虚拟主机,可以在同一台服务器上运行多个独立的网站,本文主要介绍了Ubuntu中Nginx虚拟主机设置的项目实践,具有一定的参考价值,感兴趣的可... 目录简介安装 Nginx创建虚拟主机1. 创建网站目录2. 创建默认索引文件3. 配置 Nginx4

SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法

《SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法》本文主要介绍了SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法,具有一定的参考价值,感兴趣的可以了解一下... 目录方法1:更改IDE配置方法2:在Eclipse中清理项目方法3:使用Maven命令行在开发Sprin

Nginx实现高并发的项目实践

《Nginx实现高并发的项目实践》本文主要介绍了Nginx实现高并发的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录使用最新稳定版本的Nginx合理配置工作进程(workers)配置工作进程连接数(worker_co

Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)

《Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)》文章介绍了如何使用dhtmlx-gantt组件来实现公司的甘特图需求,并提供了一个简单的Vue组件示例,文章还分享了一... 目录一、首先 npm 安装插件二、创建一个vue组件三、业务页面内 引用自定义组件:四、dhtmlx

SpringBoot项目注入 traceId 追踪整个请求的日志链路(过程详解)

《SpringBoot项目注入traceId追踪整个请求的日志链路(过程详解)》本文介绍了如何在单体SpringBoot项目中通过手动实现过滤器或拦截器来注入traceId,以追踪整个请求的日志链... SpringBoot项目注入 traceId 来追踪整个请求的日志链路,有了 traceId, 我们在排