文档章节

将视频演示作为应用程序的启动封面

rise-worlds
 rise-worlds
发布于 2016/06/20 13:41
字数 712
阅读 0
收藏 0
---- 需要解决四个问题:
---- 首先,在应用程序视类的构造函数中创建视频窗口,在初始化函数中开始播放;
---- 其次,建立一个计时器。利用Class Vizard为WM_TIMER增加消息处理函数,以自动关闭视频窗口并显示应用程序主窗口;
---- 另外,为了便于从MCIWnd子类化窗口的鼠标消息处理函数中,对应用程序视类的计时器处理函数进行控制,引入一个布尔型全局变量,用来标示是否可以关闭视频窗口;
---- 最后,也是最关键的,应用程序可以截获发生在主窗口内的鼠标消息,却无法截获发生在视频窗口内的鼠标消息,因为Windows已将视频窗口的鼠标消息处理函数封装在MCIWnd窗口类中。所以,为了截获发生在视频窗口内的鼠标信息,需要重新定义MCIWnd窗口消息处理函数。
---- 具体操作步骤如下(在Visual C++6.0环境下调试通过):
---- (1)在应用程序类的头文件中加入布尔型全局变量:
class CMyApp : public CWinApp
{
public:
bool m_CanClose;
...
}
  
(2)在应用程序类的构造函数中对这一标志变量进行初始化:
CMyApp::CMyApp()
{
m_CanClose=false;
...
}
  
(3)在CMyView类的头文件中,加入成员変量:
private:
HWND m_VideoWnd; //视频窗口句柄
long m_VideoLength; //视频放映总长度
  
(4)在MyView.CPP文件中加入以下内容:
WNDPROC OldProc; //保存原映射函数
LRESULT CALLBACK NewProc(HWND,UINT,
WPARAM,LPARAM);
//新映射函数
...
CMyView::CMyView()
{
CString filename("D:\\Video\\Cover.avi");
//建立视频窗口,并将句柄保存在m_VideoWnd中:
m_VideoWnd = MCIWndCreate(
this- >GetSafeHwnd(),
AfxGetInstanceHandle(),
WS_POPUP|WS_VISIBLE|
MCIWNDF_NOPLAYBAR|
MCIWNDF_NOMENU,
filename);
//使视频窗口在屏幕上居中显示:
RECT rect;
int sx,sy;
::GetWindowRect(m_VideoWnd,&rect);
sx=(::GetSystemMetrics(SM_CXSCREEN)
-rect.right+rect.left)/2;
sy=(::GetSystemMetrics(SM_CYSCREEN)
-rect.bottom+rect.top)/2;
::SetWindowPos(m_VideoWnd,HWND_TOPMOST,sx,
sy,0,0,SWP_SHOWWINDOW|SWP_NOSIZE);
}
  
void CMyView::OnInitialUpdate()
{
CView::OnInitialUpdate();
/* 调用GetWindowLong函数得到
m_VideoWnd窗口原消息处理函数的入口地址,
并保存在OldProc中。*/
OldProc=(WNDPROC) ::GetWindowLong(m_VideoWnd,
GWL_WNDPROC);
/* 调用SetWindowLong函数将
m_VideoWnd窗口消息处理函数的入口地址改为NewProc */
::SetWindowLong(m_VideoWnd,GWL_WNDPROC,
(LONG)NewProc);
m_VideoLength = MCIWndGetLength(m_VideoWnd);
//得到视频放映总长度
MCIWndPlay(m_VideoWnd);
//播放视频文件
SetTimer(1,20,NULL);
//建立计时器,每20毫秒激活一次OnTimer函数
  
}
  
void CMyView::OnTimer(UINT nIDEvent)
{
CMyApp *app=(CMyApp *)AfxGetApp();
if(MCIWndGetPosition(m_VideoWnd) >=m_VideoLength
//自动播放结束
||app-> m_CanClose==true)
//人为按下鼠标左键结束
{
KillTimer(1); //撤消计时器
MCIWndDestroy(m_VideoWnd); //撤消视频窗口
AfxGetMainWnd()- >ShowWindow(SW_SHOWMAXIMIZED);
//显示主窗口
}
CMyView::OnTimer(nIDEvent);
}
  
LRESULT CALLBACK NewProc(HWND hWnd,UINT message,
WPARAM wParam,LPARAM lParam)
{
if(message==WM_LBUTTONDOWN) //鼠标左键被按下
{
CJapanApp *app=(CJapanApp *)AfxGetApp();
app- >m_CanClose=true; //可以关闭视频窗口
}
//如果不是鼠标左键按下消息,则调用原处理函数:
return CallWindowProc(OldProc,hWnd,
message,wParam,lParam);
}

本文转载自:http://www.cnblogs.com/flying_bat/archive/2005/07/09/189180.html

rise-worlds

rise-worlds

粉丝 3
博文 1755
码字总数 0
作品 0
深圳
程序员
私信 提问
阿里云智能视频 AI 重装来袭,现在申领即可试用

近日,阿里云重磅推出视频点播新功能——视频AI,基于深度学习、计算机视觉技术和海量数据,为广大用户提供多场景的视频AI服务。 全新项目 视频智能AI服务是阿里云全新推出的新功能,不仅可以...

imgxr
2018/01/12
0
0
秒杀功能上线,酷客多助力商家快速打造爆款!

多商户小程序V1.4.1小程序版本更新说明 更新时间:2018年7月13号 一、 更新功能清单 运营平台 1、 DIY视频组件增加添加封面功能,在小程序端可展示视频封面; 2、 DIY编辑,快捷入口与底部导...

灵动生活
2018/07/13
0
0
【王佩丰】PowerPoint2010视频教程 2

PowerPoint2010视频教程(第二讲) 课程内容: PowerPoint中大图型封面页制作(上) 涉及功能: 插入文字、图形、图片 PPT中插入矩形和圆形 PPT中设置半透明色 PPT中设置字体变形效果 PPT中图...

xiaopei050
2018/06/29
0
0
上海教育教学-汗微•微课宝专业微课件制作工具软件

汗微微课宝是一款专业的微课等制作工具,集合屏幕录制、电子白板、手写板功能,PPT插件、视频编辑、手写输入板于一体,提供微课制作一体化解决方案。 可用于微课、在线教学视频的制作,也可在...

克隆软件
06/13
0
0
Chrome To Phone 2.0 将你浏览器中的内容实时发送到 Android 手机上

8月12日上午10点,Google 在其 Mountain View 总部召开了移动产品发布会,会上发布了 Chrome To Phone 这个在今年 Google I/O 上演示过的强大功能的最新版本。 Chrome To Phone 2.0 仍旧是由...

红薯
2010/08/13
458
1

没有更多内容

加载失败,请刷新页面

加载更多

MainThreadSupport

MainThreadSupport EventBus 3.0 中的代码片段. org.greenrobot.eventbus.MainThreadSupport 定义一个接口,并给出默认实现类. 调用者可以在EventBus的构建者中替换该实现. public interface ...

马湖村第九后羿
27分钟前
2
0
指定要使用的形状来代替文字的显示

控制手机键盘弹出的功能只能在ios上实现,安卓是实现不了的,所以安卓只能使用type类型来控制键盘类型,例如你要弹出数字键盘就使用type="number",如果要弹出电话键盘就使用type="tel",但这...

前端老手
37分钟前
3
0
总结:Raft协议

一、Raft协议是什么? 分布式一致性算法。即解决分布式系统中各个副本数据一致性问题。 二、Raft的日志广播过程 发送日志到所有Followers(Raft中将非Leader节点称为Follower)。 Followers收...

浮躁的码农
45分钟前
3
0
Flask-admin Model View字段介绍

Model View字段介绍 can_create = True 是否可以创建can_edit = True 是否可以编辑can_delete = True 是否可以删除list_template = 'admin/model/list.html' 修改显......

dillonxiao
今天
5
0
从AnnotationTransactionAspect开始rushSpring事务

0. Spring 事务 with LTW 0.1. Spring 事务 With LTW的原因: Pure Proxy-base mode有缺陷,其失效原因分析及使用方法及运行机制(LoadTimeWeaverBeanDefinitionParser和 AspectJWeavingEnable......

Aruforce
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部