如何作应用程序的进入画面,急!

njjzhu 2002-05-16 05:37:32
在vc中,如何在应用程序框架显示之前全屏显示一幅画面。
谢谢
...全文
26 点赞 收藏 2
写回复
2 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
RodgerLiang 2002-05-16

步骤
1. 创建一个启动窗口类
1) 用C l a s s Wi z a r d创建一个从一般C W n d类派生的普通窗口类。
2) 添加Create( )成员函数到该类,在该函数中装入启动窗口中显示的位图,以及在屏幕中
央创建该窗口。用位图类装入该位图,当把位图画到屏幕上时,允许保留它自己的
调色板。
void CWzdSplash::Create(UINT nID)
{
m _ b i t m a p . L o a d B i t m a p E x ( n I D , FA L S E ) ;
int x = (::GetSystemMetrics (SM_CXSCREEN)-
m _ b i t m a p . m _ Wi d t h ) / 2 ;
int y = (::GetSystemMetrics (SM_CYSCREEN)-
m _ b i t m a p . m _ H e i g h t ) / 2 ;
CRect rect(x,y, x + m _ b i t m a p . m _ Wi d t h , y + m _ b i t m a p . m _ H e i g h t ) ;
C r e a t e E x ( 0 , A f x R e g i s t e r W n d C l a s s ( 0 ) ,"",
W S _ P O P U P | W S _ V I S I B L E | W S _ B O R D E R , r e c t , N U L L , 0 ) ;
}
3) 用C l a s s Wi z a r d添加一个W M _ PA I N T消息处理函数到该窗口类中,在这里用BitBlt( )把
位图绘制到屏幕上。
void CWzdSplash::OnPaint()
{
CPaintDC dc(this); // device context for painting
// get bitmap colors
CPalette *pOldPal =
d c . S e l e c t P a l e t t e ( m _ b i t m a p . G e t P a l e t t e ( ) , FA L S E ) ;
d c . R e a l i z e P a l e t t e ( ) ;
// get device context to select bitmap into
CDC dcComp;
d c C o m p . C r e a t e C o m p a t i b l e D C ( & d c ) ;
d c C o m p . S e l e c t O b j e c t ( & m _ b i t m a p ) ;
// draw bitmap
d c . B i t B l t ( 0 , 0 , m _ b i t m a p . m _ Width,m_bitmap.m_Height, &dcComp,0,0,SRCCOPY);
// reselect old palette
d c . S e l e c t P a l e t t e ( p O l d P a l , FA L S E ) ;
}
应用程序的名字和版权正好在应用
程序运行之前显示
4) 有关该启动窗口类的完备清单,参见本节的“清单—启动窗口类”。
2. 把启动窗口类插入到InitInstance( )中
1) 在应用程序类的InitInstance( )函数的开始处,创建该启动窗口类的一个实例:调用它
的Create( ),并强制它进行绘制。
CWzdSplash wndSplash;
w n d S p l a s h . C r e a t e ( I D B _ W Z D S P L A S H ) ;
w n d S p l a s h . U p d a t e Window(); //send WM_PA I N T
2) 因为启动窗口类创建在堆栈中,一旦InitInstance( )返回,该窗口将被自动销毁,因此,
如果应用程序花费大量时间进行初始化,则不必采用在应用程序中加延时的方法,使启动窗
口停留足够长的时间以确保读取显示的信息;如果应用程序花费很少时间进行初始化,或者
担心高速机器把启动窗口变成影像,添加下面代码行到InitInstance( )的某个地方以对应用程
序进行延时处理。
// add if splash screen too short
Sleep(2000); <<<<<<<
说明
■ 创建一个具有动感的启动窗口,从C A n i m a t e C t r l中派生启动窗口类。在Create( )中装入
一个. a v i文件,而不是一个位图文件,同时把窗口创建在屏幕中间。参见例4 3有关
C A n i m a t e C t r l类的详尽讨论。

清单—启动窗口类
#if !defined WZDSPLASH_H
#define WZDSPLASH_H
// WzdSplash.h : header file
/ /
#include "W z d B i t m a p . h”
/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
// CWzdSplash window
class CWzdSplash : public CWnd
{
// Construction
p u b l i c :
C W z d S p l a s h ( ) ;
// Attributes
p u b l i c :
// Operations
p u b l i c :
void Create(UINT nBitmapID);
// Overrides
// ClassWizard generated virtual function overrides
/ / { { A F X _ V I RT U A L ( C W z d S p l a s h )
/ / } } A F X _ V I RT U A L
// Implementation
p u b l i c :
virtual ~CWzdSplash();
// Generated message map functions
p r o t e c t e d :
/ / { { A F X _ M S G ( C W z d S p l a s h )
afx_msg void OnPaint();
/ / } } A F X _ M S G
D E C L A R E _ M E S S A G E _ M A P ( )
p r i v a t e :
CWzdBitmap m_bitmap;
} ;
/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
#include "WzdBitmap.h"
/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
// CWzdSplash window
class CWzdSplash : public CWnd
{
// Construction
p u b l i c :
C W z d S p l a s h ( ) ;
// Attributes
p u b l i c :
// Operations
p u b l i c :
void Create(UINT nBitmapID);
// Overrides
// ClassWizard generated virtual function overrides
/ / { { A F X _ V I RT U A L ( C W z d S p l a s h )
/ / } } A F X _ V I RT U A L
// Implementation
p u b l i c :
virtual ~CWzdSplash();
// Generated message map functions
p r o t e c t e d :
/ / { { A F X _ M S G ( C W z d S p l a s h )
afx_msg void OnPaint();
/ / } } A F X _ M S G
D E C L A R E _ M E S S A G E _ M A P ( )
p r i v a t e :
CWzdBitmap m_bitmap;
} ;
/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
# e n d i f
// WzdSplash.cpp : implementation file
/ /
#include "stdafx.h"
#include "WzdSplash.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
# e n d i f
/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
// CWzdSplash
C W z d S p l a s h : : C W z d S p l a s h ( )
{ }
C W z d S p l a s h : : ~ C W z d S p l a s h ( )
{ }
BEGIN_MESSAGE_MAP(CWzdSplash, CWnd)
/ / { { A F X _ M S G _ M A P ( C W z d S p l a s h )
O N _ W M _ PA I N T ( )
/ / } } A F X _ M S G _ M A P
E N D _ M E S S A G E _ M A P ( )
/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
// CWzdSplash message handlers
void CWzdSplash::OnPaint()
{
CPaintDC dc(this); // device context for painting
// get bitmap colors
CPalette *pOldPal = dc.SelectPalette(m_bitmap.GetPalette(),FA L S E ) ;
d c . R e a l i z e P a l e t t e ( ) ;
// get device context to select bitmap into
CDC dcComp;
d c C o m p . C r e a t e C o m p a t i b l e D C ( & d c ) ;
d c C o m p . S e l e c t O b j e c t ( & m _ b i t m a p ) ;
// draw bitmap
d c . B i t B l t ( 0 , 0 , m _ b i t m a p . m _ Width,m_bitmap.m_Height, &dcComp, 0,0,SRCCOPY);
// reselect old palette
d c . S e l e c t P a l e t t e ( p O l d P a l , FA L S E ) ;
}
void CWzdSplash::Create(UINT nID)
{
m _ b i t m a p . L o a d B i t m a p E x ( n I D , FA L S E ) ;
int x = (::GetSystemMetrics (SM_CXSCREEN)- m_bitmap.m_Wi d t h ) / 2 ;
int y = (::GetSystemMetrics (SM_CYSCREEN)- m_bitmap.m_Height)/2;
CRect rect(x,y, x + m _ b i t m a p . m _ Wi d t h , y + m _ b i t m a p . m _ H e i g h t ) ;
C r e a t e E x ( 0 , A f x R e g i s t e r W n d C l a s s ( 0 ) , " " ,
W S _ P O P U P | W S _ V I S I B L E | W S _ B O R D E R , r e c t , N U L L , 0 ) ;
}
回复
welcomeplay 2002-05-16
增添Splash screen啊
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2002-05-16 05:37
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……