永发信息网

C++2008里如何添加splash screen

答案:2  悬赏:70  手机版
解决时间 2021-03-10 08:08
请问C++2008里如何添加splash screen
最佳答案
自己创建CSplashWnd类吧:

1.?创建一个SDI或MDI工程。
2.?新建或导入一个ID号为IDB_SPLASH的位图。
3.?从CWnd类派生一个名为CSplashWnd的子类,并添加两个保护成员变量:
CBitmap mBitmap;//初始画面位图
static CSplashWnd* c_pSplashWnd;
//指向初始画面窗口的指针
c_pSplashWnd为静态成员变量,应在类的实现文件(.cpp)开头说明:
CSplashWnd* CSplashWnd::c_pSplashWnd;

4.?向CSplashWnd类中加入一个静态公有成员函数ShowSplashScreen,此函数将被主框架窗口调用:
void CSplashWnd::ShowSplashScreen(CWnd ?pParentWnd)
{ //此函数传递的参数是主框架窗口
if(c_pSplashWnd!=NULL) return;
c_pSplashWnd=new CSplashWnd;

if(!c_pSplashWnd->Create(pParentWnd))
//创建初始画面窗口
delete c_pSplashWnd;
else
c_pSplashWnd->UpdateWindow();
//显示初始画面窗口
}
5.?编辑ShowSplashScreen函数中调用的Create函数(保护成员函数):
BOOL CSplashWnd::Create(CWnd ?pParentWnd)
{
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);
//创建主框架窗口的子窗口
}
6. CreateEx将调用OnCreate函数进行窗口的初始化,重载此函数:
int CSplashWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CWnd::OnCreate(lpCreateStruct)==-1)
return -1;

CenterWindow();
SetTimer(1,1000,NULL); //时间控制
return 0;
}
7. 显示窗口时发送WM_PAINT消息,所以我们映射此消息:
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);

dcImage.SelectObject(pOldBitmap);
}
8. 映射WM桾IMER消息,从而在一定时间后销毁窗口:
void CSplashWnd::OnTimer(UINT nIDEvent)
{
DestroyWindow(); //销毁初始画面窗口
AfxGetMainWnd()->UpdateWindow();
//刷新主框架窗口
}
9. 为防止内存溢出,窗口销毁后要释放CSplashWnd对象,为此,我们重载虚拟函数PostNcDestroy,此函数在窗口销毁后调用:
void CSplashWnd::PostNcDestroy()

{
delete this;
}

10. 最后,为了显示初始画面,我们在主框架窗口的OnCreate函数最后调 用ShowSplashScreen函数,当然别忘了将CSplashWnd的头文件包含进去:
CSplashWnd::ShowSplashScreen(this);
全部回答
你好! 老兄,要是你现打的话,你太强了。 如果对你有帮助,望采纳。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
德丽鞋店地址有知道的么?有点事想过去
金融信托由委托人承担风险,银行信贷由银行自
广州江南西地铁站d出口怎么去广百商城
直走用英文怎么
英特公司的创始人是谁?
目前,南海诸岛被六国七方分占的情况如何?(
中国邮政(大益村村邮站)地址有知道的么?有点
王者荣耀是吕布强还是成吉思汉强
如果长江公司2013年的销售收入和净利润均比20
世界上真有吐火的生物吗?电影里面有吐火的恐
荣珍茶业在哪里啊,我有事要去这个地方
为什么西红柿是红的 苹果是青的 梨是黄色的呢
2016年G20峰会期间杭州动车眉笔、洗面奶可以
手机期货软件哪个好
关于亲情的古诗文
推荐资讯
大鼻子作文地址在哪,我要去那里办事
开关柜为什么不允许试验位远方合闸
绥鹤街怎么去啊,有知道地址的么
【传承文明颂中秋手抄报】关于传承文明的手抄
三国中‘奉天子以令不臣’中的‘不臣’是什么
宁乡一中的邮编和精确地址是什么?急要寄东西.
御堂春茶舍我想知道这个在什么地方
一物体从地面被以11米/秒的初速度竖直向上抛
我是六年级的女生,跟一个男生,在QQ上聊的非
天天酷跑的捣蛋机是什么
蛙泳技术要领中,要求先伸胳膊还是先蹬腿?
安顺汽修厂地址在什么地方,想过去办事
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?