⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chap07.html

📁 利用软件开发
💻 HTML
📖 第 1 页 / 共 4 页
字号:
<P>&#9;return TRUE;</P>
<P>}</P>

<P>// 如果向对话框中添加到最小化按钮,您将需要编写代码来绘制相应的图标。对于使用了</P>
<P>// 文档/视结构的应用程序,这一操作由框架自动完成</P>

<P>void CVideoPlayerDlg::OnPaint() </P>
<P>{</P>
<P>&#9;if (IsIconic())</P>
<P>&#9;{</P>
<P>&#9;&#9;CPaintDC dc(this); // 绘制设备上下文</P>

<P>&#9;&#9;SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);</P>

<P>&#9;&#9;// 在客户区矩形内居中图标</P>
<P>&#9;&#9;int cxIcon = GetSystemMetrics(SM_CXICON);</P>
<P>&#9;&#9;int cyIcon = GetSystemMetrics(SM_CYICON);</P>
<P>&#9;&#9;CRect rect;</P>
<P>&#9;&#9;GetClientRect(&amp;rect);</P>
<P>&#9;&#9;int x = (rect.Width() - cxIcon + 1) / 2;</P>
<P>&#9;&#9;int y = (rect.Height() - cyIcon + 1) / 2;</P>

<P>&#9;&#9;// 绘制图标</P>
<P>&#9;&#9;dc.DrawIcon(x, y, m_hIcon);</P>
<P>&#9;}</P>
<P>&#9;else</P>
<P>&#9;{</P>
<P>&#9;&#9;CDialog::OnPaint();</P>
<P>&#9;}</P>
<P>}</P>

<P>// 当用户拖动最小化了的窗口时,系统调用该函数来获得显示使用的光标</P>
<P>HCURSOR CVideoPlayerDlg::OnQueryDragIcon()</P>
<P>{</P>
<P>&#9;return (HCURSOR) m_hIcon;</P>
<P>}</P>

<P>// 打开媒体文件</P>
<P>void CVideoPlayerDlg::OnFileOpen() </P>
<P>{</P>
<P>&#9;CFileDialog dlg(TRUE, NULL, NULL, 0, "所有文件|*.*", NULL);</P>
<P>&#9;if (dlg.DoModal()==IDOK)</P>
<P>&#9;{</P>
<P>&#9;&#9;m_amovie.SetFileName(dlg.GetPathName());</P>
<P>&#9;}</P>
<P>}</P>

<P>// ActiveMovie 控件 IDC_AMOVIE 的消息映射</P>
<P>BEGIN_EVENTSINK_MAP(CVideoPlayerDlg, CDialog)</P>
<P>    //{{AFX_EVENTSINK_MAP(CVideoPlayerDlg)</P>
<P>&#9;ON_EVENT(CVideoPlayerDlg, IDC_AMOVIE, 50 /* OpenComplete */, </P>
<P>&#9;&#9;OnOpenCompleteAmovie, VTS_NONE)</P>
<P>&#9;ON_EVENT(CVideoPlayerDlg, IDC_AMOVIE, -609 /* ReadyStateChange */, </P>
<P>&#9;&#9;OnReadyStateChangeAmovie, VTS_I4)</P>
<P>&#9;ON_EVENT(CVideoPlayerDlg, IDC_AMOVIE, 1 /* StateChange */, </P>
<P>&#9;&#9;OnStateChangeAmovie, VTS_I4 VTS_I4)</P>
<P>&#9;ON_EVENT(CVideoPlayerDlg, IDC_AMOVIE, 51 /* DisplayModeChange */, </P>
<P>&#9;&#9;OnDisplayModeChangeAmovie, VTS_NONE)</P>
<P>&#9;ON_EVENT(CVideoPlayerDlg, IDC_AMOVIE, 999 /* Error */, </P>
<P>&#9;&#9;OnErrorAmovie, VTS_I2 VTS_BSTR VTS_BSTR VTS_PBOOL)</P>
<P>&#9;//}}AFX_EVENTSINK_MAP</P>
<P>END_EVENTSINK_MAP()</P>

<P>// 当 ActiveMovie 控件完成媒体文件的加载时自动播放该文件</P>
<P>void CVideoPlayerDlg::OnOpenCompleteAmovie() </P>
<P>{</P>
<P>&#9;m_amovie.Run();&#9;</P>
<P>}</P>

<P>// 当 ActiveMovie 控件的准备状态发生改变时,在需要的情况下改变对话框的大小以适应</P>
<P>// ActiveMovie 控件的大小</P>
<P>void CVideoPlayerDlg::OnReadyStateChangeAmovie(long ReadyState) </P>
<P>{</P>
<P>&#9;MoveMovieWindow();</P>
<P>}</P>

<P>// 关闭媒体文件,即简单的将 ActiveMovie 控件的 FileName 属性值设置为空</P>
<P>void CVideoPlayerDlg::OnFileClose() </P>
<P>{</P>
<P>&#9;m_amovie.SetFileName("");</P>
<P>}</P>

<P>// 当 ActiveMovie 控件的状态发生改变时,在需要的情况下改变对话框的大小以适应</P>
<P>// ActiveMovie 控件的大小</P>
<P>void CVideoPlayerDlg::OnStateChangeAmovie(long oldState, long newState) </P>
<P>{</P>
<P>&#9;MoveMovieWindow();&#9;</P>
<P>}</P>

<P>// 改变对话框在大小以适应 ActiveMovie 控件的大小</P>
<P>void CVideoPlayerDlg::MoveMovieWindow()</P>
<P>{</P>
<P>&#9;CRect rc1, rc2, rc3;</P>
<P>&#9;// 得到 ActiveMovie 控件的大小</P>
<P>&#9;m_amovie.GetWindowRect(rc1);</P>
<P>&#9;// 保证对话框客户区的宽不小于 300 象素,高不小于 225 象素</P>
<P>&#9;if (rc1.Width()&lt;300 || rc1.Height()&lt;225)</P>
<P>&#9;{</P>
<P>&#9;&#9;rc1.right=rc1.left+300;</P>
<P>&#9;&#9;rc1.bottom=rc1.top+225;</P>
<P>&#9;}</P>
<P>&#9;// 获得对话框的大小</P>
<P>&#9;GetWindowRect(rc2);</P>
<P>&#9;// 获得对话框客户区的大小</P>
<P>&#9;GetClientRect(rc3);</P>
<P>&#9;// 改变对话框的大小以适应 ActiveMovie 控件的大小</P>
<P>&#9;MoveWindow(rc2.left, rc2.top, </P>
<P>&#9;&#9;rc2.Width()-rc3.Width()+rc1.Width(), </P>
<P>&#9;&#9;rc2.Height()-rc3.Height()+rc1.Height());</P>
<P>&#9;// 获得 ActiveMovie 控件的大小</P>
<P>&#9;m_amovie.GetWindowRect(rc1);</P>
<P>&#9;GetClientRect(rc3);</P>
<P>&#9;// 使 ActiveMovie 控件在对话框的客户区居中</P>
<P>&#9;m_amovie.MoveWindow((rc3.Width()-rc1.Width())/2,</P>
<P>&#9;&#9;(rc3.Height()-rc1.Height())/2, rc1.Width(), rc1.Height());</P>
<P>}</P>

<P>// 当 ActiveMovie 控件的显示模式发生改变时,改变对话框的大小以适应这个改变</P>
<P>void CVideoPlayerDlg::OnDisplayModeChangeAmovie() </P>
<P>{</P>
<P>&#9;MoveMovieWindow();&#9;</P>
<P>}</P>

<P>// 关闭应用程序</P>
<P>void CVideoPlayerDlg::OnFileExit() </P>
<P>{</P>
<P>&#9;OnCancel();&#9;</P>
<P>}</P>

<P>// 开始播放所选定的媒体文件,由 ActiveMovie 控件的 Run 方法来实现</P>
<P>void CVideoPlayerDlg::OnPlayStart() </P>
<P>{</P>
<P>&#9;m_amovie.Run();&#9;</P>
<P>}</P>

<P>// 停止播放正在播放的媒体文件,由 ActiveMovie 控件的 Stop 方法来实现</P>
<P>void CVideoPlayerDlg::OnPlayStop() </P>
<P>{</P>
<P>&#9;m_amovie.Stop();&#9;</P>
<P>}</P>

<P>// 调节音量</P>
<P>void CVideoPlayerDlg::OnAudeoVolumn() </P>
<P>{</P>
<P>&#9;CVolumnDlg dlgVolumn;</P>
<P>&#9;dlgVolumn.SetVolumn(&amp;m_amovie);</P>
<P>}</P>

<P>// 处理 ActiveMovie 的出错事件,这里我们只是简单的弹出一个消息以告诉用户</P>
<P>// 出错的代码和描述</P>
<P>void CVideoPlayerDlg::OnErrorAmovie(short SCode, LPCTSTR Description, </P>
<P>&#9;LPCTSTR Source, BOOL FAR* CancelDisplay) </P>
<P>{</P>
<P>&#9;CString str;</P>
<P>&#9;str.Format("出现错误[%d]:\n\n%s", SCode, Description);</P>
<P>&#9;MessageBox(str);</P>
<P>&#9;*CancelDisplay=TRUE;</P>
<P>}</P>

<P>// 调节左右声道的平衡</P>
<P>void CVideoPlayerDlg::OnAudeoBalance() </P>
<P>{</P>
<P>&#9;CBalanceDlg dlgBalance;</P>
<P>&#9;dlgBalance.SetBalance(&amp;m_amovie);</P>
<P>}</P>

<P>// 设置视频窗口为视频文件的原始大小</P>
<P>void CVideoPlayerDlg::OnVideo1x() </P>
<P>{</P>
<P>&#9;m_amovie.Pause();</P>
<P>&#9;m_amovie.SetMovieWindowSize(0);</P>
<P>&#9;m_amovie.Run();</P>
<P>}</P>

<P> </P>
<P>// 设置视频窗口为视频文件的两倍大小</P>
<P>void CVideoPlayerDlg::OnVideo2x() </P>
<P>{</P>
<P>&#9;m_amovie.Pause();</P>
<P>&#9;m_amovie.SetMovieWindowSize(1);</P>
<P>&#9;m_amovie.Run();</P>
<P>}</P>

<P>// 暂停媒体文件的播放,由 ActiveMovie 控件的 Pause 方法来实现</P>
<P>void CVideoPlayerDlg::OnPlayPause() </P>
<P>{</P>
<P>&#9;m_amovie.Pause();</P>
<P>}</P>

<P>// 显示关于对话框</P>
<P>void CVideoPlayerDlg::OnHelpAbout() </P>
<P>{</P>
<P>&#9;CAboutDlg dlgAbout;</P>
<P>&#9;dlgAbout.DoModal();</P>
<P>}</P>

</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">9.&#9;</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>最后补充一点,在应用程序</FONT><FONT SIZE=3>VideoPlayer</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的运行过程中,我们可能不希望用户通过其它的方式来更改</FONT><FONT SIZE=3>ActiveMovie</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>控件的状态。因为这有可能会破坏整个程序用户界面的一致性。举一个例子,在正常情况下,用户可以在</FONT><FONT SIZE=3>ActiveMovie</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>控件上右击鼠标来改变</FONT><FONT SIZE=3>ActiveMovie</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>控件的一些显示元素,如面板和控件条等。这些操作都会改变</FONT><FONT SIZE=3>ActiveMovie</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>控件的大小发生改变,而且在这种情况下,容纳该控件的对话框的大小不会同时发生改变,这样就会破坏应用程序的外观。因此,我们有必要禁止用户这样做。</P>
<P ALIGN="JUSTIFY">在资源编辑器中打开应用程序的主对话框,再打开</FONT><FONT SIZE=3>ActiveMovie</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>控件的属性页对话框。在</FONT><FONT SIZE=3>General</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>选项卡中选择</FONT><FONT SIZE=3>Disabled</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>;在“重放”选项卡中选择“播放次数”单选钮,并输入播放次数为</FONT><FONT SIZE=3>1</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>;在“控件”选项卡中清除“显示面板”和“控制面板”两个复选框。</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">现在就可以编译和生成该应用程序了。图</FONT><FONT SIZE=3>7.7</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>为应用程序</FONT><FONT SIZE=3>VideoPlayer</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>播放</FONT><FONT SIZE=3>VCD</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>文件时的效果。</P>
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=1><P ALIGN="CENTER"><IMG SRC="Image366.gif" tppabs="http://166.111.167.223/computer/cai/visual_c++_5.0_programming/Image366.gif" WIDTH=235 HEIGHT=187></P>
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=1><P ALIGN="CENTER">图</FONT><FONT SIZE=1>7. 7 </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=1>应用程序</FONT><FONT SIZE=1>VideoPlayer</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=1>播放</FONT><FONT SIZE=1>VCD</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=1>文件时的运行效果</P>

<UL>
</FONT><FONT FACE="黑体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY"><LI>技巧:</LI></P>
</FONT><FONT FACE="楷体_GB2312" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY"><LI>从上面的示例程序可以看出,</FONT><FONT SIZE=3>ActiveMovie</FONT><FONT FACE="楷体_GB2312" LANG="ZH-CN" SIZE=3>控件提供了非常完善的音频和视频媒体文件的回放功能。它能够支持多种文件格式,从最常见的</FONT><FONT SIZE=3>WAV</FONT><FONT FACE="楷体_GB2312" LANG="ZH-CN" SIZE=3>文件和</FONT><FONT SIZE=3>AVI</FONT><FONT FACE="楷体_GB2312" LANG="ZH-CN" SIZE=3>文件到使用</FONT><FONT SIZE=3>MPEG</FONT><FONT FACE="楷体_GB2312" LANG="ZH-CN" SIZE=3>压缩格式的</FONT><FONT SIZE=3>VCD</FONT><FONT FACE="楷体_GB2312" LANG="ZH-CN" SIZE=3>视频文件,都可以正常的进行播放。因此,若正在编写的应用程序需要提供多媒体支持,那么使用</FONT><FONT SIZE=3>ActiveMovie</FONT><FONT FACE="楷体_GB2312" LANG="ZH-CN" SIZE=3>是一个很好的主意。事实上,很多优秀的多媒体应用程序,其内部的多媒体回放就是使用</FONT><FONT SIZE=3>ActiveMovie</FONT><FONT FACE="楷体_GB2312" LANG="ZH-CN" SIZE=3>来实现的。只要精心的设计应用程序的用户界面,我们可以把一切“隐藏”得滴水不漏。而且,在</FONT><FONT SIZE=3>Windows 95/98</FONT><FONT FACE="楷体_GB2312" LANG="ZH-CN" SIZE=3>和</FONT><FONT SIZE=3>Windows NT</FONT><FONT FACE="楷体_GB2312" LANG="ZH-CN" SIZE=3>的最新版本中,</FONT><FONT SIZE=3>ActiveMovie</FONT><FONT FACE="楷体_GB2312" LANG="ZH-CN" SIZE=3>控件已作为操作系统的一部分来提供。即使用户的系统中没有安装</FONT><FONT SIZE=3>ActiveMovie</FONT><FONT FACE="楷体_GB2312" LANG="ZH-CN" SIZE=3>控件,</FONT><FONT SIZE=3>Microsoft</FONT><FONT FACE="楷体_GB2312" LANG="ZH-CN" SIZE=3>的许可协议也允许在你的应用程序的发行包中发布</FONT><FONT SIZE=3>ActiveMovie</FONT><FONT FACE="楷体_GB2312" LANG="ZH-CN" SIZE=3>的运行时文件。充分的使用各种优秀的第三方</FONT><FONT SIZE=3>ActiveX</FONT><FONT FACE="楷体_GB2312" LANG="ZH-CN" SIZE=3>控件,可使不费力的使用你的应用程序增色不少,这也就是</FONT><FONT SIZE=3>ActiveX</FONT><FONT FACE="楷体_GB2312" LANG="ZH-CN" SIZE=3>控件本身的一个魅力之所在。</LI></P></UL>
</FONT></BODY>
</HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -