2DotNet平台技术实验报告4.docx
《2DotNet平台技术实验报告4.docx》由会员分享,可在线阅读,更多相关《2DotNet平台技术实验报告4.docx(12页珍藏版)》请在冰豆网上搜索。
2DotNet平台技术实验报告4
实验4多媒体程序的开发
专业班级计算机XXX学号XXXXXX姓名XXX
一、实验目的
了解多媒体的概念;掌握使用.NET平台开发多媒体程序。
二、实验内容
做一个多媒体播放器,能够选择文件、播放、暂停、拖动播放、停止等功能。
三、核心源代码
//media.h:
PROJECT_NAME应用程序的主头文件
//
#pragmaonce
#ifndef__AFXWIN_H__
#error"在包含此文件之前包含“stdafx.h”以生成PCH文件"
#endif
#include"resource.h"//主符号
//CmediaApp:
//有关此类的实现,请参阅media.cpp
//
classCmediaApp:
publicCWinApp
{
public:
CmediaApp();
//重写
public:
virtualBOOLInitInstance();
//实现
DECLARE_MESSAGE_MAP()
};
externCmediaApptheApp;
(续)
//mediaDlg.h:
头文件
//
#pragmaonce
#include"afxwin.h"
//CmediaDlg对话框
classCmediaDlg:
publicCDialogEx
{
//构造
public:
CmediaDlg(CWnd*pParent=NULL);//标准构造函数
//对话框数据
enum{IDD=IDD_MEDIA_DIALOG};
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDV支持
//实现
protected:
HICONm_hIcon;
//生成的消息映射函数
virtualBOOLOnInitDialog();
afx_msgvoidOnSysCommand(UINTnID,LPARAMlParam);
afx_msgvoidOnPaint();
afx_msgHCURSOROnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
afx_msgvoidOnBnClickedOk();
afx_msgvoidOnLbnSelchangeList2();
CListBoxm_list;
};
(续)
//media.cpp:
定义应用程序的类行为。
//
#include"stdafx.h"
#include"media.h"
#include"mediaDlg.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#endif
//CmediaApp
BEGIN_MESSAGE_MAP(CmediaApp,CWinApp)
ON_COMMAND(ID_HELP,&CWinApp:
:
OnHelp)
END_MESSAGE_MAP()
//CmediaApp构造
CmediaApp:
:
CmediaApp()
{
//支持重新启动管理器
m_dwRestartManagerSupportFlags=AFX_RESTART_MANAGER_SUPPORT_RESTART;
//TODO:
在此处添加构造代码,
//将所有重要的初始化放置在InitInstance中
}
//唯一的一个CmediaApp对象
CmediaApptheApp;
//CmediaApp初始化
BOOLCmediaApp:
:
InitInstance()
{
//如果一个运行在WindowsXP上的应用程序清单指定要
//使用ComCtl32.dll版本6或更高版本来启用可视化方式,
//则需要InitCommonControlsEx()。
否则,将无法创建窗口。
INITCOMMONCONTROLSEXInitCtrls;
InitCtrls.dwSize=sizeof(InitCtrls);
//将它设置为包括所有要在应用程序中使用的
//公共控件类。
InitCtrls.dwICC=ICC_WIN95_CLASSES;
InitCommonControlsEx(&InitCtrls);
CWinApp:
:
InitInstance();
AfxEnableControlContainer();
//创建shell管理器,以防对话框包含
//任何shell树视图控件或shell列表视图控件。
CShellManager*pShellManager=newCShellManager;
//标准初始化
//如果未使用这些功能并希望减小
//最终可执行文件的大小,则应移除下列
//不需要的特定初始化例程
//更改用于存储设置的注册表项
//TODO:
应适当修改该字符串,
//例如修改为公司或组织名
SetRegistryKey(_T("应用程序向导生成的本地应用程序"));
CmediaDlgdlg;
m_pMainWnd=&dlg;
INT_PTRnResponse=dlg.DoModal();
if(nResponse==IDOK)
{
//TODO:
在此放置处理何时用
//“确定”来关闭对话框的代码
}
elseif(nResponse==IDCANCEL)
{
//TODO:
在此放置处理何时用
//“取消”来关闭对话框的代码
}
//删除上面创建的shell管理器。
if(pShellManager!
=NULL)
{
deletepShellManager;
}
//由于对话框已关闭,所以将返回FALSE以便退出应用程序,
//而不是启动应用程序的消息泵。
returnFALSE;
}
//mediaDlg.cpp:
实现文件
//
#include"stdafx.h"
#include"media.h"
#include"mediaDlg.h"
#include"afxdialogex.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#endif
//用于应用程序“关于”菜单项的CAboutDlg对话框
classCAboutDlg:
publicCDialogEx
{
public:
CAboutDlg();
//对话框数据
enum{IDD=IDD_ABOUTBOX};
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDV支持
//实现
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg:
:
CAboutDlg():
CDialogEx(CAboutDlg:
:
IDD)
{
}
voidCAboutDlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialogEx:
:
DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg,CDialogEx)
END_MESSAGE_MAP()
//CmediaDlg对话框
CmediaDlg:
:
CmediaDlg(CWnd*pParent/*=NULL*/)
:
CDialogEx(CmediaDlg:
:
IDD,pParent)
{
m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
voidCmediaDlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialogEx:
:
DoDataExchange(pDX);
DDX_Control(pDX,IDC_LIST2,m_list);
}
BEGIN_MESSAGE_MAP(CmediaDlg,CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDOK,&CmediaDlg:
:
OnBnClickedOk)
ON_LBN_SELCHANGE(IDC_LIST2,&CmediaDlg:
:
OnLbnSelchangeList2)
END_MESSAGE_MAP()
//CmediaDlg消息处理程序
BOOLCmediaDlg:
:
OnInitDialog()
{
CDialogEx:
:
OnInitDialog();
//将“关于...”菜单项添加到系统菜单中。
//IDM_ABOUTBOX必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX<0xF000);
CMenu*pSysMenu=GetSystemMenu(FALSE);
if(pSysMenu!
=NULL)
{
BOOLbNameValid;
CStringstrAboutMenu;
bNameValid=strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if(!
strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);
}
}
//设置此对话框的图标。
当应用程序主窗口不是对话框时,框架将自动
//执行此操作
SetIcon(m_hIcon,TRUE);//设置大图标
SetIcon(m_hIcon,FALSE);//设置小图标
//TODO:
在此添加额外的初始化代码
returnTRUE;//除非将焦点设置到控件,否则返回TRUE
}
voidCmediaDlg:
:
OnSysCommand(UINTnID,LPARAMlParam)
{
if((nID&0xFFF0)==IDM_ABOUTBOX)
{
CAboutDlgdlgAbout;
dlgAbout.DoModal();
}
else
{
CDialogEx:
:
OnSysCommand(nID,lParam);
}
}
//如果向对话框添加最小化按钮,则需要下面的代码
//来绘制该图标。
对于使用文档/视图模型的MFC应用程序,
//这将由框架自动完成。
voidCmediaDlg:
:
OnPaint()
{
if(IsIconic())
{
CPaintDCdc(this);//用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND,reinterpret_cast(dc.GetSafeHdc()),0);
//使图标在工作区矩形中居中
intcxIcon=GetSystemMetrics(SM_CXICON);
intcyIcon=GetSystemMetrics(SM_CYICON);
CRectrect;
GetClientRect(&rect);
intx=(rect.Width()-cxIcon+1)/2;
inty=(rect.Height()-cyIcon+1)/2;
//绘制图标
dc.DrawIcon(x,y,m_hIcon);
}
else
{
CDialogEx:
:
OnPaint();
}
}
//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSORCmediaDlg:
:
OnQueryDragIcon()
{
returnstatic_cast(m_hIcon);
}
voidCmediaDlg:
:
OnBnClickedOk()
{
//TODO:
在此添加控件通知处理程序代码
//CDialogEx:
:
OnOK();
intnlndex1=m_list.AddString("杭州乐园");
}
voidCmediaDlg:
:
OnLbnSelchangeList2()
{
//TODO:
在此添加控件通知处理程序代码
//intnlndex=m_list.GetCurSel();
//m_list.GetText(nlndex,"杭州乐园");
//m_list.AddString("杭州乐园");
UpdateData();
structmedia{
CStringname;
};
intnlndex=m_list.GetCurSel();
mediaaa;
aa.name="杭州乐园";
m_list.SetItemDataPtr(nlndex,newmedia(aa));
//UpdateData(FALSE);
intnlndex1=m_list.AddString("杭州乐园");
}
四、运行结果(贴图)
播放运行图
五、指导教师评议