📄 chap07.html
字号:
<P>	virtual BOOL OnInitDialog();</P>
<P>	afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);</P>
<P>	//}}AFX_MSG</P>
<P>	DECLARE_MESSAGE_MAP()</P>
<P>};</P>
<P>// BalanceDlg.cpp : 实现文件</P>
<P>//</P>
<P>#include "stdafx.h"</P>
<P>#include "VideoPlayer.h"</P>
<P>#include "BalanceDlg.h"</P>
<P>#include "activemovie.h"</P>
<P>/////////////////////////////////////////////////////////////////////////////</P>
<P>// CBalanceDlg 对话框</P>
<P> </P>
<P>CBalanceDlg::CBalanceDlg(CWnd* pParent /*=NULL*/)</P>
<P>	: CDialog(CBalanceDlg::IDD, pParent)</P>
<P>{</P>
<P>	//{{AFX_DATA_INIT(CBalanceDlg)</P>
<P>		// NOTE: the ClassWizard will add member initialization here</P>
<P>	//}}AFX_DATA_INIT</P>
<P>}</P>
<P> </P>
<P>void CBalanceDlg::DoDataExchange(CDataExchange* pDX)</P>
<P>{</P>
<P>	CDialog::DoDataExchange(pDX);</P>
<P>	//{{AFX_DATA_MAP(CBalanceDlg)</P>
<P>	DDX_Control(pDX, IDC_SLIDER1, m_sld);</P>
<P>	//}}AFX_DATA_MAP</P>
<P>}</P>
<P> </P>
<P>BEGIN_MESSAGE_MAP(CBalanceDlg, CDialog)</P>
<P>	//{{AFX_MSG_MAP(CBalanceDlg)</P>
<P>	ON_WM_HSCROLL()</P>
<P>	//}}AFX_MSG_MAP</P>
<P>END_MESSAGE_MAP()</P>
<P>/////////////////////////////////////////////////////////////////////////////</P>
<P>// CBalanceDlg 消息处理函数</P>
<P>BOOL CBalanceDlg::OnInitDialog() </P>
<P>{</P>
<P>	CDialog::OnInitDialog();</P>
<P>	</P>
<P>	// 初始化音量调节滑块的最大值和最小值、标度以及当前位置等</P>
<P>	m_sld.SetRange(-10000, 10000);</P>
<P>	m_sld.SetTicFreq(2000);</P>
<P>	m_sld.SetLineSize(500);</P>
<P>	m_sld.SetPageSize(2000);</P>
<P>	m_sld.SetPos(m_pAmovie->GetBalance());</P>
<P>	</P>
<P>	return TRUE;</P>
<P>}</P>
<P>// 提供给类外部的使用者的接口方法</P>
<P>void CBalanceDlg::SetBalance(CActiveMovie * pAmovie)</P>
<P>{</P>
<P>	m_pAmovie=pAmovie;</P>
<P>	// 如果当前 ActiveMovie 未加载任何文件,则音量调节不可用并弹出出错信息</P>
<P>	// ActiveMovie 控件的 CurrentState 属性返回了当前控件的状态,-1 表示未加载任何文件</P>
<P>	if (m_pAmovie->GetCurrentState()!=-1)</P>
<P>	{</P>
<P>		DoModal();</P>
<P>	}</P>
<P>	else</P>
<P>	{</P>
<P>		MessageBox("音频设备尚未加载,请先打开一个媒体文件。");</P>
<P>	}</P>
<P>}</P>
<P>// 当用户在拖动或点击滑块时,将用户的改变立即作用于 ActiveMovie 控件</P>
<P>void CBalanceDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) </P>
<P>{</P>
<P>	CSliderCtrl *pSlider=(CSliderCtrl *)pScrollBar;</P>
<P>	// 得到滑块控件的当前位置</P>
<P>	int nVolume=pSlider->GetPos();</P>
<P>	// 设置 ActiveMovie 控件的当前的声道平衡设置</P>
<P>	m_pAmovie->SetBalance(nVolume);</P>
<P>	CDialog::OnHScroll(nSBCode, nPos, pScrollBar);</P>
<P>}</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">9.	</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>按下面所给的代码来修改类</FONT><FONT SIZE=3>CVideoPlayerDlg</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>,在注意的是,这里的大部分菜单处理的声明是使用</FONT><FONT SIZE=3>ClassWizard</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>添加的:</P>
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=1><P>// VideoPlayerDlg.h : 头文件</P>
<P>//</P>
<P>//{{AFX_INCLUDES()</P>
<P>#include "activemovie.h"</P>
<P>//}}AFX_INCLUDES</P>
<P>/////////////////////////////////////////////////////////////////////////////</P>
<P>// CVideoPlayerDlg 对话框</P>
<P>class CVideoPlayerDlg : public CDialog</P>
<P>{</P>
<P>// 构造</P>
<P>public:</P>
<P>	CVideoPlayerDlg(CWnd* pParent = NULL);	// 标准构造函数</P>
<P>// 对话框数据</P>
<P>	//{{AFX_DATA(CVideoPlayerDlg)</P>
<P>	enum { IDD = IDD_VIDEOPLAYER_DIALOG };</P>
<P>	CActiveMovie	m_amovie;</P>
<P>	//}}AFX_DATA</P>
<P>	//{{AFX_VIRTUAL(CVideoPlayerDlg)</P>
<P>	protected:</P>
<P>	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV 支持</P>
<P>	//}}AFX_VIRTUAL</P>
<P>// 实现</P>
<P>protected:</P>
<P>	void MoveMovieWindow();</P>
<P>	HICON m_hIcon;</P>
<P>	//{{AFX_MSG(CVideoPlayerDlg)</P>
<P>	virtual BOOL OnInitDialog();</P>
<P>	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);</P>
<P>	afx_msg void OnPaint();</P>
<P>	afx_msg HCURSOR OnQueryDragIcon();</P>
<P>	afx_msg void OnFileOpen();</P>
<P>	afx_msg void OnOpenCompleteAmovie();</P>
<P>	afx_msg void OnReadyStateChangeAmovie(long ReadyState);</P>
<P>	afx_msg void OnFileClose();</P>
<P>	afx_msg void OnStateChangeAmovie(long oldState, long newState);</P>
<P>	afx_msg void OnDisplayModeChangeAmovie();</P>
<P>	afx_msg void OnFileExit();</P>
<P>	afx_msg void OnPlayStart();</P>
<P>	afx_msg void OnPlayStop();</P>
<P>	afx_msg void OnAudeoVolumn();</P>
<P>	afx_msg void OnErrorAmovie(short SCode, LPCTSTR Description, </P>
<P>		LPCTSTR Source, BOOL FAR* CancelDisplay);</P>
<P>	afx_msg void OnAudeoBalance();</P>
<P>	afx_msg void OnVideo1x();</P>
<P>	afx_msg void OnVideo2x();</P>
<P>	afx_msg void OnPlayPause();</P>
<P>	afx_msg void OnHelpAbout();</P>
<P>	DECLARE_EVENTSINK_MAP()</P>
<P>	//}}AFX_MSG</P>
<P>	DECLARE_MESSAGE_MAP()</P>
<P>};</P>
<P>// VideoPlayerDlg.cpp : 实现文件</P>
<P>//</P>
<P>#include "stdafx.h"</P>
<P>#include "VideoPlayer.h"</P>
<P>#include "VideoPlayerDlg.h"</P>
<P>#include "VolumnDlg.h"</P>
<P>#include "BalanceDlg.h"</P>
<P>// 在此省略了定义和实现类 CAboutDlg 的代码</P>
<P>// ...</P>
<P>/////////////////////////////////////////////////////////////////////////////</P>
<P>// CVideoPlayerDlg 对话框</P>
<P>CVideoPlayerDlg::CVideoPlayerDlg(CWnd* pParent /*=NULL*/)</P>
<P>	: CDialog(CVideoPlayerDlg::IDD, pParent)</P>
<P>{</P>
<P>	//{{AFX_DATA_INIT(CVideoPlayerDlg)</P>
<P>	//}}AFX_DATA_INIT</P>
<P>	// 注意:LoadIcon 函数并不需要的后面调用 Win32 中的 DestroyIcon</P>
<P>	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);</P>
<P>}</P>
<P>void CVideoPlayerDlg::DoDataExchange(CDataExchange* pDX)</P>
<P>{</P>
<P>	CDialog::DoDataExchange(pDX);</P>
<P>	//{{AFX_DATA_MAP(CVideoPlayerDlg)</P>
<P>	DDX_Control(pDX, IDC_AMOVIE, m_amovie);</P>
<P>	//}}AFX_DATA_MAP</P>
<P>}</P>
<P>// 类 CVideoPlayerDlg 的消息映射</P>
<P>BEGIN_MESSAGE_MAP(CVideoPlayerDlg, CDialog)</P>
<P>	//{{AFX_MSG_MAP(CVideoPlayerDlg)</P>
<P>	ON_WM_SYSCOMMAND()</P>
<P>	ON_WM_PAINT()</P>
<P>	ON_WM_QUERYDRAGICON()</P>
<P>	ON_COMMAND(ID_FILEOPEN, OnFileOpen)</P>
<P>	ON_COMMAND(ID_FILECLOSE, OnFileClose)</P>
<P>	ON_COMMAND(ID_FILEEXIT, OnFileExit)</P>
<P>	ON_COMMAND(ID_PLAYSTART, OnPlayStart)</P>
<P>	ON_COMMAND(ID_PLAYSTOP, OnPlayStop)</P>
<P>	ON_COMMAND(ID_AUDEOVOLUMN, OnAudeoVolumn)</P>
<P>	ON_COMMAND(ID_AUDEOBALANCE, OnAudeoBalance)</P>
<P>	ON_COMMAND(ID_VIDEO1X, OnVideo1x)</P>
<P>	ON_COMMAND(ID_VIDEO2X, OnVideo2x)</P>
<P>	ON_COMMAND(ID_PLAYPAUSE, OnPlayPause)</P>
<P>	ON_COMMAND(ID_HELPABOUT, OnHelpAbout)</P>
<P>	//}}AFX_MSG_MAP</P>
<P>END_MESSAGE_MAP()</P>
<P>/////////////////////////////////////////////////////////////////////////////</P>
<P>// CVideoPlayerDlg 消息处理函数</P>
<P>BOOL CVideoPlayerDlg::OnInitDialog()</P>
<P>{</P>
<P>	CDialog::OnInitDialog();</P>
<P>	// 为对话框设置图标。对于不使用对话框作为主窗口的应用程序,这一步骤由框架自动完成</P>
<P>	SetIcon(m_hIcon, TRUE);			// 设置大图标</P>
<P>	SetIcon(m_hIcon, FALSE);		// 设置小图标</P>
<P>	</P>
<P>	// 设置 ActiveMovie 控件的初始文件为空</P>
<P>	m_amovie.SetFileName("");</P>
<P>	// 改变窗口的大小以适应 ActiveMovie 控件的大小</P>
<P>	MoveMovieWindow();</P>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -