友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
富士康小说网 返回本书目录 加入书签 我的书架 我的书签 TXT全本下载 『收藏到我的浏览器』

C语言实例教程(PDF格式)-第36部分

快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!





class CVolumeDlg : public CDialog  



{  



// 构造  



public:  



void SetVolume(CActiveMovie* pAmovie);  



CVolumeDlg(CWnd* pParent = NULL); // 标准构造函数  



//{{AFX_DATA(CVolumeDlg)  


…………………………………………………………Page 406……………………………………………………………

enum { IDD = IDD_VOLUME };  



CSliderCtrl m_sld;  



//}}AFX_DATA  



    



// 重载  



//{{AFX_VIRTUAL(CVolumeDlg)  



protected:  



virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持  



//}}AFX_VIRTUAL  



// 实现  



protected:  



CActiveMovie* m_pAmovie;  



//{{AFX_MSG(CVolumeDlg)  



virtual BOOL OnInitDialog();  



afx_msg void OnHScroll(UINT nSBCode; UINT nPos; CScrollBar* pScrollBar);  



//}}AFX_MSG  



DECLARE_MESSAGE_MAP()  



};  



// VolumeDlg。cpp : 实现文件  



//  



#include 〃stdafx。h〃  



#include 〃VideoPlayer。h〃  



#include 〃VolumeDlg。h〃  



#include 〃activemovie。h〃  



/////////////////////////////////////////////////////////////////////////////  



// CVolumeDlg 对话框  


…………………………………………………………Page 407……………………………………………………………

CVolumeDlg::CVolumeDlg(CWnd* pParent /*=NULL*/)  



: CDialog(CVolumeDlg::IDD; pParent)  



{  



//{{AFX_DATA_INIT(CVolumeDlg)  



// 注意:ClassWizard 将在这里添加对成员的初始化代码  



//}}AFX_DATA_INIT  



}  



void CVolumeDlg::DoDataExchange(CDataExchange* pDX)  



{  



CDialog::DoDataExchange(pDX);  



//{{AFX_DATA_MAP(CVolumeDlg)  



DDX_Control(pDX; IDC_SLIDER1; m_sld);  



//}}AFX_DATA_MAP  



}  



BEGIN_MESSAGE_MAP(CVolumeDlg; CDialog)  



//{{AFX_MSG_MAP(CVolumeDlg)  



ON_WM_HSCROLL()  



//}}AFX_MSG_MAP  



END_MESSAGE_MAP()  



/////////////////////////////////////////////////////////////////////////////  



// CVolumeDlg 消息处理函数  



BOOL CVolumeDlg::OnInitDialog()   



{  



CDialog::OnInitDialog();  



// 设置音量滑块的最小值和最大值、标度和当前位置等  



m_sld。SetRange(…10000; 0);  


…………………………………………………………Page 408……………………………………………………………

m_sld。SetTicFreq(1000);  



m_sld。SetLineSize(200);  



m_sld。SetPageSize(1000);  



// 以 ActiveMovie 控件的当前音量作为音量滑块的当前位置  



m_sld。SetPos(m_pAmovie…》GetVolume());  



return TRUE;  



}  



// 提供给类外部的使用者的编程接口方法  



void CVolumeDlg::SetVolume(CActiveMovie * pAmovie)  



{  



m_pAmovie=pAmovie;  



// 如果未加载任何媒体文件,则音量调节不可用。ActiveMovie 控件的 CurrentState 属  



// 性返回控件的当前状态,…1 表示未加载任何文件,此时弹出出错提示信息  



if (m_pAmovie…》GetCurrentState()!=…1)  



{  



DoModal();  



}  



else  



{  



MessageBox(〃音频设备尚未加载,请先打开一个媒体文件。〃);  



}  



}  



// 在用户拖动或点击滑块控件时,将所作的改变立即作用于 ActiveMovie 控件  



void CVolumeDlg::OnHScroll(UINT nSBCode; UINT nPos; CScrollBar* pScrollBar)   



{  



CSliderCtrl *pSlider=(CSliderCtrl *)pScrollBar;  


…………………………………………………………Page 409……………………………………………………………

int nVolume=pSlider…》GetPos();  



m_pAmovie…》SetVolume(nVolume);  



CDialog::OnHScroll(nSBCode; nPos; pScrollBar);  



}  



8。  设计用于调节左右声道平衡的对话框。该对话框如图7。6所示,其 

资源ID为IDD_BALANCE。由ClassWizard创建的新类CBalanceDlg封装 

了该对话框。同前面的对话框IDD_VOLUME相类似,CBalanceDlg定义 

了公有成员函数SetBalance以供类外部的使用者调用,该函数同样使 

用一个指向CActiveMovie对象的指针作为其参数。  



                                                      



                      图7。 6 用于调节左右声道平衡的对话框:  

                                   IDD_BALANCE  



根据下面提供的代码来完成类CBalanceDlg。  



// BalanceDlg。h : 头文件  



//  



class CActiveMovie;  



/////////////////////////////////////////////////////////////////////////////  



// CBalanceDlg 对话框  



class CBalanceDlg : public CDialog  



{  



// 构造  



public:  



void SetBalance(CActiveMovie* pAmovie);  



CBalanceDlg(CWnd* pParent = NULL); // 标准构造函数  



// 对话框数据  



//{{AFX_DATA(CBalanceDlg)  


…………………………………………………………Page 410……………………………………………………………

enum { IDD = IDD_BALANCE };  



CSliderCtrl m_sld;  



//}}AFX_DATA  



    



// 重载  



//{{AFX_VIRTUAL(CBalanceDlg)  



protected:  



virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持  



//}}AFX_VIRTUAL  



// 实现  



protected:  



CActiveMovie *m_pAmovie;  



//{{AFX_MSG(CBalanceDlg)  



virtual BOOL OnInitDialog();  



afx_msg void OnHScroll(UINT nSBCode; UINT nPos; CScrollBar* pScrollBar);  



//}}AFX_MSG  



DECLARE_MESSAGE_MAP()  



};  



// BalanceDlg。cpp : 实现文件  



//  



#include 〃stdafx。h〃  



#include 〃VideoPlayer。h〃  



#include 〃BalanceDlg。h〃  



#include 〃activemovie。h〃  



/////////////////////////////////////////////////////////////////////////////  



// CBalanceDlg 对话框  


…………………………………………………………Page 411……………………………………………………………

    



CBalanceDlg::CBalanceDlg(CWnd* pParent /*=NULL*/)  



: CDialog(CBalanceDlg::IDD; pParent)  



{  



//{{AFX_DATA_INIT(CBalanceDlg)  



// NOTE: the ClassWizard will add member initialization here  



//}}AFX_DATA_INIT  



}  



    



void CBalanceDlg::DoDataExchange(CDataExchange* pDX)  



{  



CDialog::DoDataExchange(pDX);  



//{{AFX_DATA_MAP(CBalanceDlg)  



DDX_Control(pDX; IDC_SLIDER1; m_sld);  



//}}AFX_DATA_MAP  



}  



    



BEGIN_MESSAGE_MAP(CBalanceDlg; CDialog)  



//{{AFX_MSG_MAP(CBalanceDlg)  



ON_WM_HSCROLL()  



//}}AFX_MSG_MAP  



END_MESSAGE_MAP()  



/////////////////////////////////////////////////////////////////////////////  



// CBalanceDlg 消息处理函数  



BOOL CBalanceDlg::OnInitDialog()   



{  


…………………………………………………………Page 412……………………………………………………………

CDialog::OnInitDialog();  



// 初始化音量调节滑块的最大值和最小值、标度以及当前位置等  



m_sld。SetRange(…10000; 10000);  



m_sld。SetTicFreq(2000);  



m_sld。SetLineSize(500);  



m_sld。SetPageSize(2000);  



m_sld。SetPos(m_pAmovie…》GetBalance());  



return TRUE;  



}  



// 提供给类外部的使用者的接口方法  



void CBalanceDlg::SetBalance(CActiveMovie * pAmovie)  



{  



m_pAmovie=pAmovie;  



// 如果当前 ActiveMovie 未加载任何文件,则音量调节不可用并弹出出错信息  



// ActiveMovie 控件的 CurrentState 属性返回了当前控件的状态,…1 表示未加载任何文 

件  



if (m_pAmovie…》GetCurrentState()!=…1)  



{  



DoModal();  



}  



else  



{  



MessageBox(〃音频设备尚未加载,请先打开一个媒体文件。〃);  



}  



}  



// 当用户在拖动或点击滑块时,将用户的改变立即作用于 ActiveMovie 控件  



void CBalanceDlg::OnHScroll(UINT nSBCode; UINT nPos; CScrollBar* pScrollBar)   


…………………………………………………………Page 413……………………………………………………………

{  



CSliderCtrl *pSlider=(CSliderCtrl *)pScrollBar;  



// 得到滑块控件的当前位置  



int nVolume=pSlider…》GetPos();  



// 设置 ActiveMovie 控件的当前的声道平衡设置  



m_pAmovie…》SetBalance(nVolume);  



CDialog::OnHScroll(nSBCode; nPos; pScrollBar);  



}  



9。  按下面所给的代码来修改类CVideoPlayerDlg,在注意的是,这里 

的大部分菜单处理的声明是使用ClassWizard添加的:  



// VideoPlayerDlg。h : 头文件  



//  



//{{AFX_INCLUDES()  



#include 〃activemovie。h〃  



//}}AFX_INCLUDES  



/////////////////////////////////////////////////////////////////////////////  



// CVideoPlayerDlg 对话框  



class CVideoPlayerDlg : public CDialog  



{  



// 构造  



public:  



CVideoPlayerDlg(CWnd* pParent = NULL); // 标准构造函数  



// 对话框数据  



//{{AFX_DATA(CVideoPlayerDlg)  



enum { IDD = IDD_VIDEOPLAYER_DIALOG };  



CActiveMovie m_amovie;  


…………………………………………………………Page 414……………………………………………………………

//}}AFX_DATA  



//{{AFX_VIRTUAL(CVideoPlayerDlg)  



protected:  



virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持  



//}}AFX_VIRTUAL  



// 实现  



protected:  



void MoveMovieWindow();  



HICON m_hIcon;  



//{{AFX_MSG(CVideoPlayerDlg)  



virtual BOOL OnInitDialog();  



afx_msg void OnSysmand(UINT nID; LPARAM lParam);  



afx_msg void OnPaint();  



afx_msg HCURSOR OnQueryDragIcon();  



afx_msg void OnFileOpen();  



afx_msg void OnOpenpleteAmovie();  



afx_msg void OnReadyStateChangeAmovie(long ReadyState);  



afx_msg void OnFileClose();  



afx_msg void OnStateChangeAmovie(long oldState; long newState);  



afx_msg void OnDisplayModeChangeAmovie();  



afx_msg void OnFileExit();  



afx_msg void OnPlayStart();  



afx_msg void OnPlayStop();  



afx_msg void OnAudeoVolumn();  



afx_msg void OnErrorAmovie(short SCode; LPCTSTR Description;   



LPCTSTR Source; BOOL FAR* CancelDisplay);  


…………………………………………………………Page 415……………………………………………………………

afx_msg void OnAudeoBalance();  



afx_msg void OnVideo1x();  



afx_msg void OnVideo2x();  



afx_msg void OnPlayPause();  



afx_msg void OnHelpAbout();  



DECLARE_EVENTSINK_MAP()  



//}}AFX_MSG  



DECLARE_MESSAGE_MAP()  



};  



// VideoPlayerDlg。cpp : 实现文件  



//  



#include 〃stdafx。h〃  



#include 〃VideoPlayer。h〃  



#include 〃VideoPlayerDlg。h〃  



#include 〃VolumnDlg。h〃  



#include 〃BalanceDlg。h〃  



// 在此省略了定义和实现类 CAboutDlg 的代码  



// 。。。  



/////////////////////////////////////////////////////////////////////////////  



// CVideoPlayerDlg 对话框  



CVideoPlayerDlg::CVideoPlayerDlg(CWnd* pParent /*=NULL*/)  



: CDialog(CVideoPlayerDlg::IDD; pParent)  



{  



//{{AFX_DATA_INIT(CVideoPlayerDlg)  



//}}AFX_DATA_INIT  



// 注意:LoadIcon 函数并不需要的后面调用 Win32 中的 DestroyIcon  


…………………………………………………………Page 416……………………………………………………………

m_hIcon = AfxGetApp()…》LoadIcon(IDR_MAINFRAME);  



}  



void CVideoPlayerDlg::DoDataExchange(CDataExchange* pDX)  



{  



CDialog::DoDataExchange(pDX);  



//{{AFX_DATA_MAP(CVideoPlayerDlg)  



DDX_Control(pDX; IDC_AMOVIE; m_amovie);  



//}}AFX_DATA_MAP  



}  



// 类 CVideoPlayerDlg 的消息映射  



BEGIN_MESSAGE_MAP(CVideoPlayerDlg; CDialog)  



//{{AFX_MSG_MAP(CVideoPlayerDlg)  



ON_WM_SYSMAND()  



ON_WM_PAINT()  



ON_WM_QUERYDRAGICON()  



ON_MAND(ID_FILEOPEN; OnFileOpen)  



ON_MAND(ID_FILECLOSE; OnFileClose)  



ON_MAND(ID_FILEEXIT; OnFileExit)  



ON_MAND(ID_PLAYSTART; OnPlayStart)  



ON_MAND(ID_PLAYSTOP; OnPlayStop)  



ON_MAND(ID_AUDEOVOLUMN; OnAudeoVolumn)  



ON_MAND(ID_AUDEOBALANCE; OnAudeoBalance)  



ON_MAND(ID_VIDEO1X; OnVideo1x)  



ON_MAND(ID_VIDEO2X; OnVideo2x)  



ON_MAND(ID_PLAYPAUSE; OnPlayPause)  



ON_MAND(ID_HELPABOUT; OnHelpAbout)  


…………………………………………………………Page 417……………………………………………………………

//}}AFX_MSG_MAP  



END_MESSAGE_MAP()  



/////////////////////////////////////////////////////////////////////////////  



// CVideoPlayerDlg 消息处理函数  



BOOL CVideoPlayerDlg::OnInitDialog()  



{  



CDialog::OnInitDialog();  



// 为对话框设置图标。对于不使用对话框作为主窗口的应用程序,这一步骤由框架自动完成  



SetIcon(m_hIcon; TRUE); // 设置大图标  



SetIcon(m_hIcon; FALSE); // 设置小图标  



// 设置 ActiveMovie 控件的初始文件为空  



m_amovie。SetFileName(〃〃);  



// 改变窗口的大小以适应 ActiveMovie 控件的大小  



MoveMovieWindow();  



return TRUE;  



}  



// 如果向对话框中添加到最小化按钮,您将需要编写代码来绘制相应的图标。对于使用了  



// 文档/视结构的应用程序,这一操作由框架自动完成  



void CVideoPlayerDlg::OnPaint()   



{  



if (IsIconic())  



{  



CPaintDC dc(this); // 绘制设备上下文  



SendMessage(WM_ICONERASEBKGND; (WPARAM) dc。GetSafeHdc(); 0);  



// 在客户区矩形内居中图标  



int cxIcon = GetSystemMetrics(SM_CXICON);  


…………………………………………………………Page 418……………………………………………………………

int cyIcon = GetSystemMetrics(SM_CYICON);  



CRect rect;  



GetClientRect(&rect);  



int x = (rect。Width() cxIcon + 1) / 2;  



int y = (rect。Height() cyIcon + 1) / 2;  



// 绘制图标  



dc。DrawIcon(x; y; m_hIcon);  



}  



else  



{  



CDialog::OnPaint();  



}  



}  



// 当用户拖动最小化了的窗口时,系统调用该函数来获得显示使用的光标  



HCURSOR CVideoPlayerDlg::OnQueryDragIcon()  



{  



return (HCURSOR) m_hIcon;  



}  



// 打开媒体文件  



void CVideoPlayerDlg::OnFileOpen()   



{  



CFileDialog dlg(TRUE; NULL; NULL; 0; 〃所有文件 |*。*〃; NULL);  



if (dlg。DoModal()==IDOK)  



{  



m_amovie。SetFileName(dlg。GetPathName());  



}  


…………………………………………………………Page 419……………………………………………………………

}  



// ActiveMovie 控件 IDC_AMOVIE 的消息映射  



BEGIN_EVENTSINK_MAP(CVideoPlayerDlg; CDialog)  



//{{AFX_EVENTSINK_MAP(CVideoPlayerDlg)  



ON_EVENT(CVideoPlayerDlg; IDC_AMOVIE; 50 /* Openplete */;   



OnOpenpleteAmovie; VTS_NONE)  



ON_EVENT(CVideoPlayerDlg; IDC_AMOVIE; …609 /* ReadyStateChange */;   



OnReadyStateChangeAmovie; VTS_I4)  



ON_EVENT(CVideoPlayerDlg; IDC_AMOVIE; 1 /* StateChange */;   



OnStateChangeAmovie; VTS_I4 VTS_I4)  



ON_EVENT(CVideoPlayerDlg; IDC_AMOVIE; 51 /* DisplayModeChange */;   



OnDisplayModeChangeAmovie; VTS_NONE)  



ON_EVENT(CVideoPlayerDlg; IDC_AMOVIE; 999 /* Error */;   



OnErrorAmovie; VTS_I2 VTS_BSTR VTS_BSTR VTS_PBOOL)  



//}}AFX_EVENTSINK_MAP  



END_EVENTSINK_MAP()  



// 当 ActiveMovie 控件完成媒体文件的加载时自动播放该文件  



void CVideoPlayerDlg::OnOpenpleteAmovie()   



{  



m_amovie。Run();   



}  



// 当 ActiveMovie 控件的准备状态发生改变时,在需要的情况下改变对话框的大小以适应  



// ActiveMovie 控件的大小  



void CVideoPlayerDlg::OnReadyStateChangeAmovie(long ReadyState)   



{  



MoveMovieWindow();  


…………………………………………………………Page 420……………………………………………………………

}  



// 关闭媒体文件,即简单的将 ActiveMovie 控件的 FileName 属性值设置为空  



void CVideoPlayerDlg::OnFileClose()   



{  



m_amovie。SetFileName(〃〃);  



}  



// 当 ActiveMovie 控件的状态发生改变时,在需要的情况下改变对话框的大小以适应  



// ActiveMovie 控件的大小  



void CVideoPlayerDlg::OnStateChangeAmovie(long oldState; long newState)   



{  



MoveMovieWindow();   



}  



// 改变对话框在大小以适应 ActiveMovie 控件的大小  



void CVideoPlayerDlg::MoveMovieWindow()  



{  



CRect rc1; rc2; rc3;  



//
返回目录 上一页 下一页 回到顶部 9 9
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!