闪屏,我们自己动手做,相当简单
2008-08-07 20:43
351 查看
闪屏,就是在主对话框弹出之前先在屏幕上显示一张图片,或一小段动画以介绍产品的信息等。
初一看,在屏幕上显示一张图片或动画是不太容易的事情,但我们仔细一想便会发现,其实是挺简单的。
我们应该这样来考虑,在屏幕上显示一个对话框估计只要学过MFC的人都会做,我们可以将对话框的边框和按钮都去掉,只剩下一个面板,而且这个面板上只有一张图片,这个也不算太难(别忘了设置对话框的visible属性)。然后再用classWizzard为这个对话框新建一个类,比如叫CMySplash吧。好,至此准备工作已经做完。下面我们就将这个伪图片做成闪屏。
1.要想让这张图片在主对话框出现之前出现,首先我们得知道主对话框是在哪里弹出的。
观察BOOL CMyClassApp::InitInstance()中的代码,我们不难发现有这样一段:
CMyClassDlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: Place code here to handle when the dialog is
// dismissed with OK
}
else if (nResponse == IDCANCEL)
{
// TODO: Place code here to handle when the dialog is
// dismissed with Cancel
}
很明显,这段代码的意思是弹出主对话框。所以我们的闪屏对话框的出现和消息代码应该在它之前出现。
2.建立一个非模态对话框,来显示我们的闪屏对话框。为什么要建立一个非模态对话框呢?因为非模态对话框不会阻断我们代码的运行,这样我们就可以通过Sleep函数来轻松控制闪屏显示的时间了。(当然可能模态对话框也可以)
在上面的那段代码之前加上如下代码(紧挨着加就行了):
CMySplash spDlg;
spDlg.Create(IDD_DIALOG_MySplash);
spDlg.ShowWindow(SW_SHOW);
Sleep(2000);
spDlg.DestroyWindow();
当然你也可以用指针来实现,但是要记住用 new产生的指针在不用时要销毁掉。
CMySplash spDlg;
spDlg.Create(IDD_DIALOG_MySplash);
spDlg.ShowWindow(SW_SHOW);
Sleep(2000);
spDlg.DestroyWindow();
CMySplash* spDlg;
spDlg=new CMySplash;
spDlg->Create(IDD_DIALOG_MySplash);//通过Create函数将对话框ID与对象相关联
spDlg->ShowWindow(SW_SHOW);//显示窗口
Sleep(2000);//停留2秒
spDlg->DestroyWindow();//销毁窗口
下面在响应WM_NCDESTROY的函数OnNcDestroy()中来销毁指针
void CMySplash::OnNcDestroy()
{
CDialog::OnNcDestroy();
// TODO: Add your message handler code here
/ delete this;
}
至此再运行你的程序看一下,是不是在你主对话框出现之前弹出了闪屏?当然你也可以在闪屏对话框中响应计时器消息来制作动态的闪屏,这里就不再举例了。
初一看,在屏幕上显示一张图片或动画是不太容易的事情,但我们仔细一想便会发现,其实是挺简单的。
我们应该这样来考虑,在屏幕上显示一个对话框估计只要学过MFC的人都会做,我们可以将对话框的边框和按钮都去掉,只剩下一个面板,而且这个面板上只有一张图片,这个也不算太难(别忘了设置对话框的visible属性)。然后再用classWizzard为这个对话框新建一个类,比如叫CMySplash吧。好,至此准备工作已经做完。下面我们就将这个伪图片做成闪屏。
1.要想让这张图片在主对话框出现之前出现,首先我们得知道主对话框是在哪里弹出的。
观察BOOL CMyClassApp::InitInstance()中的代码,我们不难发现有这样一段:
CMyClassDlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: Place code here to handle when the dialog is
// dismissed with OK
}
else if (nResponse == IDCANCEL)
{
// TODO: Place code here to handle when the dialog is
// dismissed with Cancel
}
很明显,这段代码的意思是弹出主对话框。所以我们的闪屏对话框的出现和消息代码应该在它之前出现。
2.建立一个非模态对话框,来显示我们的闪屏对话框。为什么要建立一个非模态对话框呢?因为非模态对话框不会阻断我们代码的运行,这样我们就可以通过Sleep函数来轻松控制闪屏显示的时间了。(当然可能模态对话框也可以)
在上面的那段代码之前加上如下代码(紧挨着加就行了):
CMySplash spDlg;
spDlg.Create(IDD_DIALOG_MySplash);
spDlg.ShowWindow(SW_SHOW);
Sleep(2000);
spDlg.DestroyWindow();
当然你也可以用指针来实现,但是要记住用 new产生的指针在不用时要销毁掉。
CMySplash spDlg;
spDlg.Create(IDD_DIALOG_MySplash);
spDlg.ShowWindow(SW_SHOW);
Sleep(2000);
spDlg.DestroyWindow();
CMySplash* spDlg;
spDlg=new CMySplash;
spDlg->Create(IDD_DIALOG_MySplash);//通过Create函数将对话框ID与对象相关联
spDlg->ShowWindow(SW_SHOW);//显示窗口
Sleep(2000);//停留2秒
spDlg->DestroyWindow();//销毁窗口
下面在响应WM_NCDESTROY的函数OnNcDestroy()中来销毁指针
void CMySplash::OnNcDestroy()
{
CDialog::OnNcDestroy();
// TODO: Add your message handler code here
/ delete this;
}
至此再运行你的程序看一下,是不是在你主对话框出现之前弹出了闪屏?当然你也可以在闪屏对话框中响应计时器消息来制作动态的闪屏,这里就不再举例了。
相关文章推荐
- 自己动手做简单移动电源 - 工程师创意 - 中国电子技术论坛 - 最好最受欢迎电子论坛!
- 自己动手做简单的播放器和录音机
- 【SoftKeyboard研究系列】自己动手做最简单的SoftKeyboard
- C语言三字棋游戏先简单介绍一下三子棋的规则,方便我们接下来的编程和理解。规则如下: 在九宫格棋盘上,只要将自己的三个棋子走成一条线(横、竖、对角线),对方就算输了。
- JavaScript,自己动手做了一个简单的鼠标拖动的实例
- 这是我的第一篇博客,技术含量相当低下,不过我会随着时间慢慢买成长,加油,为我们自己!
- 你就是一个画家!你现在想绘制一幅画,但是你现在没有足够颜色的颜料。为了让问题简单,我们用正整数表示不同颜色的颜料。你知道这幅画需要的n种颜色的颜料,你现在可以去商店购买一些颜料,但是商店不能保证能供应所有颜色的颜料,所以你需要自己混合一些颜料。混合两种不一样的颜色A和颜色B颜料可以产生(A XOR B)这种颜色的颜料(新产生的颜料也可以用作继续混合产生新的颜色,XOR表示异或操作)。本着勤俭节约的
- 摘要:我们经常会用到递归函数,但是如果递归深度太大时,往往导致栈溢出。而递归深度往往不太容易把握,所以比较安全一点的做法就是:用循环代替递归。文章最后的原文里面讲了如何用10步实现这个过程,相当精彩。本文翻译了这篇文章,并加了自己的一点注释和理解。
- 简单缓存的实现,相当牛叉!自己看吧,只有50行代码。
- 自己动手做一个简单的WebPart
- 简单缓存的实现,相当牛叉!自己看吧,只有50行代码。
- 在人工智能时代,我们更需要理解自己的智能 | 艾伦脑科学研究所所长克里斯托夫·科赫STEP峰会演讲实录
- 每周一计-自己动手做的电源
- 【自己的整理】socket.io官方demo|创建简单的聊天应用
- 自己实现一个简单ArrayList
- 我们是否太在意自己的感觉?[zt]
- 从兽首事件看我们自己缺什么
- RabbitMQ系列教程之一:我们从最简单的事情开始!Hello World
- 自己实现一个简单的RPC框架
- 生命是美丽的,这种美丽需要我们自己去体验