简单播放器的制作MFC_第1页
简单播放器的制作MFC_第2页
简单播放器的制作MFC_第3页
简单播放器的制作MFC_第4页
简单播放器的制作MFC_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 计算机与信息工程学院 Windows程序设计项目实践报告 设计题目 MP3播放器的设计 作者姓名 冯晶 所学专业名称 网络工程 指导教师 杨 斌 2012年5月26日目录摘 要11 绪论11.1 系统的研究背景11.2 系统实现功能11.3 本文的主要结构12 MFC概述22.1 MFC概况简介22.2 MFC的特点23 系统分析33.1 系统模块33.2 系统业务处理流程34系统实现44.1 开发平台44.1.1 开发环境44.2 内部主要函数44.3 外部主要函数94.3.1 菜单的初始化94.3.2 系统托盘的实现104.3.3 系统从托盘还原114.3.4 实现对话框的拖动114.3

2、.5实现退出124.3.6实现文件的添加124.3.7实现音乐的播放124.3.8实现文件的暂停134.3.9实现音乐的继续播放134.3.10 实现音乐的停止134.3.11 实现歌曲上一首的切换144.3.12 实现歌曲的下一首切换154.3.13 实现文件播放进度滑块的响应164.3.17 实现音量的调节185 测试与实现195.1 主界面195.2 添加列表195.3播放205.4上一首205.5 下一首215.6 删除215.7 最小化到托盘21结论22参考文献22MP3播放器的设计摘 要:本程序设计的是一个简单的MP3播放器,本系统是基于MFC开发的,完成音乐的播放以及相关简单的功

3、能的设计。其功能就是能够播放常见的音频文件,如mp3,wmv以及wma格式的音乐文件.还有切歌、音量调节以及终止和暂停的操作功能,音频文件是从本地文件中直接读取。本程序还能在播放歌曲中,显示歌曲的清单,以及播放的进度。也能通过选择按钮来选歌,或者删除歌曲,另外通过按钮可以实现切歌功能。当然该系统还有许多不尽如人意地方,比如用户界面不美观。关键词:MP3播放器;MFC1 绪论1.1 系统的研究背景目前,随着人们生活水平的不断提高,高质量的生活成为人们日益追逐的目标。MP3播放器就可以让音乐爱好者更好的享受音乐带给我们的乐趣。对于音乐爱好者来说,歌曲就是最好的精神食粮。因此,开发一套人性化,大众喜

4、爱的MP3音乐是很有必要的,但由于知识积累及时间关系,这次课程设计我所设计的播放器不是很完善,有些地方没有考虑到,所以实用性大打折扣,后面有时间将会将系统设计的全面些,更具有实用性。1.2 系统实现功能基于MFC的MP3播放器主要实现的功能有:音乐文件的添加,音乐的播放、暂停、继续、停止、删除、切歌以及音量的调节等。1.3 本文的主要结构本文主要描述了MP3音乐播放器的简单开发,包括绪论,系统分析,系统设计,系统实现,结论,参考文献,附录和致谢。第一章为绪论,主要描述了系统的研究背景和系统的研究目标。第二章为MFC概述,主要介绍MFC的概况以及特点。第三章为系统分析,系统模块和系统业务处理流程

5、。第四章为系统实现,系统开发环境以及主要函数的介绍。第五章为系统的测试与实现,主要介绍了系统的各个功能的测试。结论,总结了系统的设计和实现过程,分析了系统的优点和不足之处,并得出了自己的心得体会。2 MFC概述2.1 MFC概况简介MFC(微软基础类库,Microsoft Foundation Classes),是一个由微软公司提供的类库,以C+类的形式封装了Windows的API,可提供一个应用程序的框架,以减少应用程序开发人员的工作量。其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。借助于MFC可实现多种应用程序的开发。MFC 应用程序的总体结构通

6、常由开发人员从MFC类派生的几个类和一个CWinApp类对象(应用程序对象)组成。MFC 提供了MFC AppWizard 自动生成框架。 Windows 应用程序中,MFC 的主包含文件为Afxwin.h。 此外MFC的部分类为MFC/ATL 通用,可以在Win32 应用程序中单独包含并使用这些类。 由于它的易用性,初学者常误认为VC+开发必须使用MFC。这种想法是错误的。作为Application Framework,MFC的使用只能提高某些情况下的开发效率,只起到辅助作用,而不能替代整个Win32 程序设计。 2.2 MFC的特点 MFC是Win API与C+的结合,API,即微软提供的

7、Windows下应用程序的编程语言接口,是一种软件编程的规范,但不是一种程序开发语言本身,可以允许用户使用各种各样的第三方(如我是一方,微软是二方,Borland就是第三方)的编程语言来进行对Windows下应用程序的开发,使这些被开发出来的应用程序能在Windows下运行,比如VB,VC+,JavaDelhpi编程语言函数本质上全部源于API,因此用它们开发出来的应用程序都能工作在Windows的消息机制和绘图里,遵守Windows作为一个操作系统的内部实现,这其实也是一种必要,微软如果不提供API,这个世上对Windows编程的工作就不会存在,微软的产品就会迅速从时尚变成垃圾,上面说到MF

8、C是微软对API函数的专用C+封装,这种结合一方面让用户使用微软的专业C+ SDK来进行Windows下应用程序的开发变得容易,因为MFC是对API的封装,微软做了大量的工作,隐藏了好多程序开发人员在Windows下用C+ & MFC编制软件时的大量内节,如应用程序实现消息的处理,设备环境绘图,这种结合是以方便为目的的,必定要付出一定代价(这是微软的一向作风),因此就造成了MFC对类封装中的一定程度的的冗余和迂回,但这是可以接受的。3 系统分析3.1 系统模块3.2 系统业务处理流程4系统实现4.1 开发平台4.1.1 开发环境 Microsoft Visual C+6.0Visual C+

9、6.0,简称VC或者VC6.0,是微软推出的一款C+编译器,将“高级语言”翻译为“机器语言(低级语言)”的程序。Visual C+是一个功能强大的可视化软件开发工具。自1993年Microsoft公司推出Visual C+1.0后,随着其新版本的不断问世,Visual C+已成为专业程序员进行软件开发的首选工具。虽然微软公司推出了 Visual C+.NET(Visual C+7.0),但它的应用有很大的局限性,只适用于Windows 2000、Windows XP和Windows NT4.0。所以实际中,更多的是以Visual C+6.0为平台。 4.2 内部主要函数DWORD MCIMP3

10、:MCIOpen(const CString &strPath) MCI_OPEN_PARMS mciOP; DWORD dwReturn; ASSERT(m_wID=NULL); mciOP.lpstrDeviceType=NULL; mciOP.lpstrElementName=strPath; dwReturn=mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_ELEMENT|MCI_WAIT|MCI_OPEN_SHAREABLE, (DWORD)(LPVOID)&mciOP); if (dwReturn=0) m_wID=mciOP.wDeviceID; if

11、(this-MCIGetLength(&m_dwLength)!=0) m_dwLength=0; else m_wID=NULL; return dwReturn;/关闭MCI设备DWORD MCIMP3:MCIClose() MCI_GENERIC_PARMS mciGP; DWORD dwReturn; dwReturn=mciSendCommand(m_wID,MCI_CLOSE,MCI_NOTIFY|MCI_WAIT, (DWORD)(LPVOID)&mciGP); m_wID=NULL; return dwReturn;/播放DWORD MCIMP3:MCIPlay()MCI_PL

12、AY_PARMS mciPP; return mciSendCommand(m_wID,MCI_PLAY,MCI_NOTIFY,(DWORD)(LPVOID)&mciPP);/暂停DWORD MCIMP3:MCIPause()MCI_GENERIC_PARMS mciGP;return mciSendCommand(m_wID,MCI_PAUSE,MCI_NOTIFY|MCI_WAIT,(DWORD)(LPVOID)&mciGP);/继续 (从暂停恢复)DWORD MCIMP3:MCIResume()MCI_GENERIC_PARMS mciGP;return mciSendCommand(m

13、_wID,MCI_RESUME,MCI_NOTIFY|MCI_WAIT,(DWORD)(LPVOID)&mciGP);/停止播放DWORD MCIMP3:MCIStop()MCI_GENERIC_PARMS mciGP;return mciSendCommand(m_wID,MCI_STOP,MCI_NOTIFY|MCI_WAIT,(DWORD)(LPVOID)&mciGP);/到dwTo处DWORD MCIMP3:MCISeekTo(DWORD dwTo) DWORD dwreturn; if (dwTo0& dwTo=m_dwLength) dwreturn=MCISeekToEnd();

14、 else dwreturn=MCISeekToStart(); return dwreturn;/到开始处DWORD MCIMP3:MCISeekToStart()MCI_SEEK_PARMS mciSP;return mciSendCommand(m_wID,MCI_SEEK,MCI_WAIT|MCI_NOTIFY|MCI_SEEK_TO_START,(DWORD)(LPVOID)&mciSP);/到结束处DWORD MCIMP3:MCISeekToEnd() MCI_SEEK_PARMS mciSP; return mciSendCommand(m_wID,MCI_SEEK,MCI_WA

15、IT|MCI_NOTIFY|MCI_SEEK_TO_END, (DWORD)(LPVOID)&mciSP);/得到播放文件长度DWORD MCIMP3:MCIGetLength(DWORD *dwLength)MCI_STATUS_PARMS mciSP;mciSP.dwItem=MCI_STATUS_LENGTH;DWORD dwReturn=mciSendCommand(m_wID,MCI_STATUS,MCI_STATUS_ITEM,(DWORD)(LPVOID)&mciSP);if(dwReturn=0)*dwLength=mciSP.dwReturn/1000;return dwRe

16、turn;/设置播放文件的音量DWORD MCIMP3:MCISetvolume(DWORD vol) DWORD dwreturn;MCI_DGV_SETAUDIO_PARMS setvolume;/这是设置音量的参数数据结构setvolume.dwCallback=NULL;setvolume.dwItem=MCI_DGV_SETAUDIO_VOLUME;/动作是设置音量setvolume.dwValue=vol;/音量值是voldwreturn=mciSendCommand(m_wID,MCI_SETAUDIO,MCI_DGV_SETAUDIO_ITEM|MCI_DGV_SETAUDIO

17、_VALUE,(DWORD)(LPVOID)&setvolume);return dwreturn;/得到当前播放文件播放到的地方DWORD MCIMP3:MCIGetPos(DWORD *dwPos)MCI_STATUS_PARMS mciSP;mciSP.dwItem=MCI_STATUS_POSITION;DWORD dwReturn=mciSendCommand(m_wID,MCI_STATUS,MCI_STATUS_ITEM,(DWORD)(LPVOID)&mciSP);if(dwReturn=0) *dwPos=mciSP.dwReturn/1000;return dwReturn

18、;/静音DWORD MCIMP3:MCISetMute(BOOL bMute)MCI_SET_PARMS mciSP;mciSP.dwAudio=MCI_SET_AUDIO_ALL;DWORD dwFlags;if(bMute)dwFlags=MCI_WAIT|MCI_SET_AUDIO|MCI_SET_OFF;elsedwFlags=MCI_WAIT|MCI_SET_AUDIO|MCI_SET_ON;return mciSendCommand(m_wID,MCI_SET,dwFlags,(DWORD)(LPVOID)&mciSP);/判断是否播放BOOL MCIMP3:MCIIsPlayin

19、g()MCI_STATUS_PARMS mciSP;mciSP.dwItem=MCI_STATUS_MODE;DWORD dwReturn=mciSendCommand(m_wID,MCI_STATUS,MCI_STATUS_ITEM,(DWORD)(LPVOID)&mciSP);if(dwReturn=0)if(mciSP.dwReturn=MCI_MODE_PLAY)return true;return false;/判断是否打开BOOL MCIMP3:MCIIsOpened()MCI_STATUS_PARMS mciSP;mciSP.dwItem=MCI_STATUS_MODE;DWOR

20、D dwReturn=mciSendCommand(m_wID,MCI_STATUS,MCI_STATUS_ITEM,(DWORD)(LPVOID)&mciSP);if(dwReturn=0)if(mciSP.dwReturn=MCI_MODE_OPEN|mciSP.dwReturn=MCI_MODE_PLAY|mciSP.dwReturn=MCI_MODE_PAUSE|mciSP.dwReturn=MCI_MODE_STOP|mciSP.dwReturn=MCI_MODE_SEEK)return true;return false;4.3 外部主要函数4.3.1 菜单的初始化BOOL CPl

21、ayerDlg:OnInitDialog()CDialog:OnInitDialog(); MoveWindow(200,200,800,500); m_volume.SetRange(0,1000);/滑块的移动范围01000m_volume.SetPos(500);/滑块指针的初始位置设为500代表初始音量为50ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAb

22、outMenu);SetIcon(m_hIcon, TRUE);SetIcon(m_hIcon, FALSE);return TRUE; void CPlayerDlg:OnNotifyIcon(WPARAM wParam, LPARAM lParam) switch(lParam)case WM_LBUTTONDBLCLK:toTray(false);break;4.3.2 系统托盘的实现void CPlayerDlg:toTray(bool show) NOTIFYICONDATA pnid;pnid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);pnid.hI

23、con=AfxGetApp()-LoadIcon(IDR_MAINFRAME);strcpy(pnid.szTip,MP3播放 );pnid.hWnd=m_hWnd;pnid.uCallbackMessage=WM_SHOWWINDOW; pnid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP;pnid.uID=ID_TASKBARICON; pnid.uID=(UINT)m_hIcon; if(show)Shell_NotifyIcon(NIM_ADD,&pnid); ShowWindow(SW_HIDE);elseShell_NotifyIcon(NIM_DELE

24、TE,&pnid);ShowWindow(SW_SHOW); void CPlayerDlg:OnMin() toTray(true);4.3.3 系统从托盘还原void CPlayerDlg:DeleteTray() NOTIFYICONDATA pnid; pnid.cbSize=(DWORD)sizeof(NOTIFYICONDATA); pnid.hWnd=this-m_hWnd; pnid.uID=IDR_MAINFRAME; pnid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ; pnid.uCallbackMessage=WM_SHOWWINDOW;

25、/自定义的消息名称 pnid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME); Shell_NotifyIcon(NIM_DELETE,&pnid); /在托盘区删除图标 ShowWindow(SW_SHOWMAXIMIZED);/New Add Here 4.3.4 实现对话框的拖动void CPlayerDlg:OnLButtonDown(UINT nFlags, CPoint point) PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point

26、.x, point.y);CDialog:OnLButtonDown(nFlags, point);4.3.5实现退出void CPlayerDlg:OnExit() exit(0);4.3.6实现文件的添加void CPlayerDlg:OnOpen() CFileDialog file(TRUE,NULL,NULL,OFN_HIDEREADONLY,MP3 Files (*.mp3)|*.mp3|AVI Files(*.avi)|*.avi|WAV Files(*.wav)|*.wav|WMA Files(*.wma)|*.wma); file.DoModal(); m_Path=file

27、.GetPathName(); int nIndex=m_list.InsertString(-1,m_Path); m_list.SetCurSel(j);j+; file1=1; 4.3.7实现音乐的播放void CPlayerDlg:OnPlay() if(play=0&file1=1) m_ctrlSlider.SetRange(0,100); SetTimer(1,1000,NULL); m_mp3player.MCIOpen(m_Path);m_mp3player.MCIPlay(); play=1;path=m_Path;/path UpdateData(FALSE);4.3.8

28、实现文件的暂停void CPlayerDlg:OnPause() if(play=1)KillTimer(1);m_mp3player.MCIPause(); pause=1;4.3.9实现音乐的继续播放void CPlayerDlg:OnResume() if(play=1&pause=1)SetTimer(1,1000,NULL);m_mp3player.MCIResume();4.3.10 实现音乐的停止void CPlayerDlg:OnStop() if(play=1)m_mp3player.MCIStop();KillTimer(1);m_ctrlSlider.SetPos(0);

29、m_mp3player.MCIClose(); play=0;file1=0;i=0;view(); UpdateData(FALSE);4.3.11 实现歌曲上一首的切换void CPlayerDlg:OnPre() int n=m_list.GetCurSel();if( play=1 & file1=1 & n-1=0)CString p;KillTimer(1);m_list.GetText(n-1,p);m_Path=p;i=0;m_list.SetCurSel(n-1);OnStop();file1 = 1;play = 1;m_mp3player.MCIOpen(m_Path);

30、m_mp3player.MCIPlay(); path=m_Path;SetTimer(1,1000,NULL);if(play=1 & file1=1 & n-10)KillTimer(1);m_list.SetCurSel(j-1);CString p;m_list.GetText(j-1,p);m_Path=p;i=0;OnStop();file1 = 1;play = 1;m_mp3player.MCIOpen(m_Path);m_mp3player.MCIPlay();path=m_Path;SetTimer(1,1000,NULL);4.3.12 实现歌曲的下一首切换void CP

31、layerDlg:OnNext() int n=m_list.GetCurSel(); if( play=1 & file1=1 & n+1=j)n=0;KillTimer(1);m_list.SetCurSel(n);CString p;m_list.GetText(n,p);m_Path=p;i=0;OnStop();file1 = 1;play = 1;m_mp3player.MCIOpen(m_Path);m_mp3player.MCIPlay();path=m_Path;SetTimer(1,1000,NULL);4.3.13 实现文件播放进度滑块的响应void CPlayerDlg

32、:OnTimer(UINT nIDEvent) if(iGetDlgCtrlID()=IDC_SLIDER1&play=1)KillTimer(1); nPos=m_ctrlSlider.GetPos(); time=nPos*m_mp3player.m_dwLength/100; i=nPos*m_mp3player.m_dwLength/100; m_mp3player.MCISeekTo(time);m_mp3player.MCIPlay();SetTimer(1,1000,NULL);4.3.16 实现音乐列表的显示void CPlayerDlg:OnDblclkList() int

33、nIndex=m_list.GetCurSel();if(nIndex!=LB_ERR|play=1|file1=1)CString p;m_list.GetText(nIndex,p);m_Path=p;i=0; OnStop();m_mp3player.MCIOpen(m_Path);m_mp3player.MCIPlay();path=m_Path; SetTimer(1,1000,NULL);play=1;file1=1;4.3.17 实现音量的调节void CPlayerDlg:OnCustomdrawVolume(NMHDR* pNMHDR, LRESULT* pResult) U

34、pdateData(true);m_vol=m_volume.GetPos()/10; m_mp3player.MCISetvolume(m_volume.GetPos();UpdateData(false);*pResult = 0;5 测试与实现5.1 主界面5.2 添加列表5.3播放5.4上一首5.5 下一首5.6 删除 5.7 最小化到托盘结论 该程序基本完成了一个播放器需要的基本功能,能显示进度条 能通过进度条的拖动到歌曲相应位置,能调节音量,但是不足之处也是很多,没有完成连续播放,随机播放,单曲循环等等,在时间的位置没有把秒转化为分钟:秒的样子,由于时间的原因从原先不会MCI到现在

35、懂得了点皮毛并作出了个播放器,我觉得我收获还是挺大的,通过这个程序以及这一周来的时间做的课程设计,我对对话框的编程又有了更深入的认识,明显比上次做计算器要来的熟练的多,希望以后通过程序的制作能提高我的编程能力。参考文献 1黄维通,贾续涵.Visual C+面向对象与可视化程序设计M.北京:清华大学出版社,2011年2梁普选.Visual C+程序设计与实践:实验与指导M.北京:清华大学出版社,北京交通大学出版社,2007年附录:CPlayerDlg/ playerDlg.cpp : implementation file/#include stdafx.h#include player.h#i

36、nclude playerDlg.h#include Digitalv.h#ifdef _DEBUG#define new DEBUG_NEW#define ID_TASKBARICON 100 #undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialogpublic:CAboutDlg();/ Dialog Data/AFX_DATA(CAboutDlg)enum IDD = IDD_ABOUTBOX ;/AF

37、X_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV support/AFX_VIRTUAL/ Implementationprotected:/AFX_MSG(CAboutDlg)/AFX_MSGDECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)/AFX_DATA_IN

38、IT(CAboutDlg)/AFX_DATA_INITvoid CAboutDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CAboutDlg)/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CAboutDlg, CDialog)/AFX_MSG_MAP(CAboutDlg)/ No message handlers/AFX_MSG_MAPEND_MESSAGE_MAP()/ CPlayerDlg dialogCPlayerDlg:CPlayerDlg(CWnd* pP

39、arent /*=NULL*/): CDialog(CPlayerDlg:IDD, pParent)/AFX_DATA_INIT(CPlayerDlg)path = _T();m_time = _T(); i=0; temp=0; nPos=0; play=0; file1=0; pause=0; j=0; flag=0;m_vol = 0;/AFX_DATA_INIT/ Note that LoadIcon does not require a subsequent DestroyIcon in Win32m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAM

40、E);void CPlayerDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CPlayerDlg)DDX_Control(pDX, IDC_VOLUME, m_volume);DDX_Control(pDX, IDC_SLIDER1, m_ctrlSlider);DDX_Control(pDX, IDC_LIST, m_list);DDX_Text(pDX, ID_NAME, path);DDX_Text(pDX, ID_TIME, m_time);DDX_Text(pDX, ID

41、C_VOL, m_vol);DDV_MinMaxInt(pDX, m_vol, 0, 100);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CPlayerDlg, CDialog)/AFX_MSG_MAP(CPlayerDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(ID_MIN, OnMin)ON_BN_CLICKED(IDC_ABOUT, OnAbout)ON_BN_CLICKED(IDC_EXIT, OnExit)ON_BN_CLICKED(IDC_OPEN, OnOpen)ON

42、_BN_CLICKED(IDC_PLAY, OnPlay)ON_BN_CLICKED(IDC_PAUSE, OnPause)ON_BN_CLICKED(IDC_RESUME, OnResume)ON_BN_CLICKED(IDC_STOP, OnStop)ON_BN_CLICKED(IDC_PRE, OnPre)ON_BN_CLICKED(IDC_NEXT, OnNext)ON_BN_CLICKED(IDC_DELLIST, OnDellist)ON_NOTIFY(NM_CUSTOMDRAW, IDC_VOLUME, OnCustomdrawVolume) ON_MESSAGE(WM_SHOW

43、WINDOW,OnNotifyIcon)ON_WM_TIMER()ON_WM_LBUTTONDOWN()ON_WM_HSCROLL()ON_LBN_DBLCLK(IDC_LIST, OnDblclkList)/AFX_MSG_MAPEND_MESSAGE_MAP()/ CPlayerDlg message handlersBOOL CPlayerDlg:OnInitDialog()CDialog:OnInitDialog(); MoveWindow(200,200,800,500); m_volume.SetRange(0,1000);/滑块的移动范围01000m_volume.SetPos(

44、500);/滑块指针的初始位置设为500代表初始音量为50/ Add About. menu item to system menu./ IDM_ABOUTBOX must be in the system command range.ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ Set the icon for this dialog.

45、The framework does this automatically/ when the applications main window is not a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small icon/ TODO: Add extra initialization herereturn TRUE; / return TRUE unless you set the focus to a controlvoid CPlayerDlg:OnSysCommand(UINT

46、nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog:OnSysCommand(nID, lParam);/ If you add a minimize button to your dialog, you will need the code below/ to draw the icon. For MFC applications using the document/view model,/ this is automatically done for you by the framework.void CPlayerDlg:OnPaint() if (IsIconic()CPaintDC dc(this); / device con

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论