启动画面关闭后才显示主程序...在这过程中进行程序的初始化.
2011-07-26 18:59
344 查看
#pragma once #include "afxwin.h" class CSplashWnd : public CWnd { public: CSplashWnd(void); ~CSplashWnd(void); CBitmap mBitmap;//初始画面位图 static CSplashWnd* c_pSplashWnd; //指向初始画面窗口的指针 /* c_pSplashWnd为静态成员变量,应在类的实现文件(.cpp)开头说明:*/ // CSplashWnd* CSplashWnd::c_pSplashWnd; static void ShowSplashScreen(CWnd *pParentWnd); virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL); //BOOL CSplashWnd::Create(CWnd *pParentWnd) DECLARE_MESSAGE_MAP() afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); afx_msg void OnTimer(UINT_PTR nIDEvent); virtual void PostNcDestroy(); afx_msg void OnPaint(); };
#include "StdAfx.h" #include "SplashWnd.h" #include "resource.h" CSplashWnd* CSplashWnd::c_pSplashWnd; CSplashWnd::CSplashWnd(void) { } CSplashWnd::~CSplashWnd(void) { } BOOL CSplashWnd::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) { // TODO: 在此添加专用代码和/或调用基类 if(!mBitmap.LoadBitmap(IDB_SPLASH)) //载入位图 return FALSE; BITMAP bm; mBitmap.GetBitmap(&bm); return CreateEx(0, AfxRegisterWndClass(0, AfxGetApp()->LoadStandardCursor(IDC_ARROW)), NULL, WS_POPUP | WS_VISIBLE, 0, 0, bm.bmWidth, bm.bmHeight, pParentWnd->GetSafeHwnd(), NULL); //return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext); } void CSplashWnd::ShowSplashScreen(CWnd *pParentWnd) { //此函数传递的参数是主框架窗口 if(c_pSplashWnd!=NULL) return; c_pSplashWnd=new CSplashWnd; RECT rect={50,50,50,50}; if(!c_pSplashWnd->Create(NULL,NULL,NULL,rect,pParentWnd,NULL,0)) { delete c_pSplashWnd; } else { c_pSplashWnd->UpdateWindow(); } //显示初始画面窗口 }; BEGIN_MESSAGE_MAP(CSplashWnd, CWnd) ON_WM_CREATE() ON_WM_TIMER() ON_WM_PAINT() END_MESSAGE_MAP() int CSplashWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CWnd::OnCreate(lpCreateStruct)==-1) return -1; CenterWindow(); SetTimer(1,3000,NULL); //时间控制 return 0; } void CSplashWnd::OnTimer(UINT_PTR nIDEvent) { // TODO: 在此添加消息处理程序代码和/或调用默认值 DestroyWindow(); //销毁初始画面窗口 AfxGetMainWnd()->UpdateWindow(); //CWnd::OnTimer(nIDEvent); } void CSplashWnd::PostNcDestroy() { // TODO: 在此添加专用代码和/或调用基类 DestroyWindow(); //销毁初始画面窗口 AfxGetMainWnd()->ShowWindow(SW_SHOWNORMAL); CWnd::PostNcDestroy(); } void CSplashWnd::OnPaint() { CPaintDC dc(this); CDC dcImage; if(!dcImage.CreateCompatibleDC(&dc)) return; BITMAP bm; mBitmap.GetBitmap(&bm); CBitmap* pOldBitmap=dcImage.SelectObject(&mBitmap); dc.BitBlt(0,0,bm.bmWidth,bm.bmHeight,&dcImage,0,0,SRCCOPY); }
1.在APP中instance把选择为hide m_pMainWnd->ShowWindow(SW_HIDE);,这样就可以保证在显示启动画面的同时,程序在启动中,并且不显示出来;2.在启动画面摧毁之后将程序显现出来AfxGetMainWnd()->ShowWindow(SW_SHOWNORMAL); 3.在mainframe里面调用ShowSplashScreen函数即可.
相关文章推荐
- Linux + Qt 程序启动画面(先显示图片后载入动画)点击进入主程序
- 【旧资料整理】MFC--实现在程序启动画面关闭后再显示窗口
- DBA_Oracle Startup / Shutdown启动和关闭过程详解(概念)(对数据库进行各种维护操作)
- Android系统开机启动画面显示过程简要说明
- 使用U盘PE安装系统,显示安装程序无法重新启动计算机,请关闭所有应用程序并且关机,以便继续进行XP安装。找不到网络路径。的解决方法
- 在程序启动之前显示一个画面
- iOS程序启动内部过程(从点击图标到显示界面)
- Linux下apache服务器安装,sqlite安装,apache启动,关闭,重启,编写cig程序进行测试,浏览器访问cig程序
- 在程序启动之前显示一个画面
- 使用U盘PE安装系统,显示安装程序无法重新启动计算机,请关闭所有应用程序并且关机,以便继续进行XP安装。找不到网络路径。的解决方法
- C#Winform实现程序关闭隐藏窗体,二次程序启动时显示
- Android 应用启动时,显示加载画面后进入主画面(处理耗时的初始化)
- 监听tomcat服务器启动/关闭并从配置文件中读取参数进行初始化
- 在vb程序中对存储过程的参数变量进行初始化:如下:
- Linux 启动过程, 初始化和关闭
- ARM64的启动过程之(三):为打开MMU而进行的CPU初始化
- DBA_Oracle Startup / Shutdown启动和关闭过程详解(概念)(对数据库进行各种维护操作)
- Emacs显示时间、隐藏菜单栏工具栏、关闭启动画面、高亮当前行
- ARM64的启动过程之(三):为打开MMU而进行的CPU初始化
- 监听tomcat服务器启动/关闭并从配置文件中读取参数进行初始化