北京时间23点11分 2018年12月20日

前面已经完成了vlc的环境的搭建,下面便开始真正的编程。

前面的界面是这样的:

理想的界面应该是这样的:

所以添加按钮、进度条和播放列表控件,并且修改好ID。

界面设计完成,运行,还是只是一个空壳,因为没加任何处理函数。

接下来就要实现拖拽文件或者文件夹到对话框时,自动添加路径到播放列表控件上。

首先先把对话框属性中的Accept Files设为TRUE,然后再设置消息处理函数。

在类向导里面添加文件拖拽响应信息

在OnDropFiles里面添加一下处理函数

void CVlcPlayerCsdnDlg::OnDropFiles(HDROP hDropInfo)
{// TODO: 在此添加消息处理程序代码和/或调用默认值UINT nFileCount = ::DragQueryFile(hDropInfo, (UINT)-1, NULL, 0);TCHAR        szFileName[_MAX_PATH] = _T("");CFileStatus  fStatus;CStringArray strArray;ShowPlaylist(TRUE);// 获取拖拽进来文件和文件夹for (UINT i = 0; i < nFileCount; i++){// 获取文件路径::DragQueryFile(hDropInfo, i, szFileName, sizeof(szFileName));CFile::GetStatus(szFileName, fStatus);// 是否为文件夹if (fStatus.m_attribute & FILE_ATTRIBUTE_DIRECTORY){::SetCurrentDirectory(szFileName);  // 将当前目录设置在此           EnumerateFiles(strArray);           // 枚举目录中所有文件}else{strArray.Add(szFileName);}}// 过滤需要的文件m_listPlay.SetRedraw(FALSE);m_listPlay.SetHorizontalExtent(1500); // 这里只是简单的设置为500宽度,若要刚好匹配路径宽度,请参见msdn里的例子for (int i = 0; i < strArray.GetCount(); i++){if (IsWantedFile(strArray[i])){m_listPlay.AddString(strArray[i]);}}m_listPlay.SetRedraw(TRUE);::DragFinish(hDropInfo);CDialog::OnDropFiles(hDropInfo);}

其中,用到的m_listPlay变量为播放列表控件变量,m_listInfo为音频显示控件信息的控件变量。

EnumerateFiles的函数定义为:

void EnumerateFiles(CStringArray &strArray)
{WIN32_FIND_DATA fd;HANDLE hFind = ::FindFirstFile(_T("*.*"), &fd);if (hFind != INVALID_HANDLE_VALUE){do{// 如果为目录if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){// 如果不为当前目录.或上一层目录..if (_tcscmp(fd.cFileName, _T(".")) && _tcscmp(fd.cFileName, _T(".."))){::SetCurrentDirectory(fd.cFileName);    // 进入该目录EnumerateFiles(strArray);               // 递归枚举::SetCurrentDirectory(_T(".."));        // 返回该目录上一层目录}}// 如果为文件else{CString strDir;TCHAR   lpDir[MAX_PATH];::GetCurrentDirectory(MAX_PATH, lpDir);strDir = lpDir;if (strDir.Right(1) != _T("\\")){strDir += _T("\\");}strDir += fd.cFileName;strArray.Add(strDir);}} while (::FindNextFile(hFind, &fd));::FindClose(hFind);}
}

IsWantedFile的函数定义为:

BOOL IsWantedFile(const CString &str)
{CString strLower;TCHAR   szExt[_MAX_EXT] = _T("");const   CString STR_FileFilter =_T("*.rm;*.rmvb;*.flv;*.f4v;*.avi;*.3gp;*.mp4;*.wmv;*.mpeg;*.mpga;*.asf;*.dat;*.mov;*.mkv;*")_T("*.mp3;*.wma;*.wav;*.mid;*.rmi;*.aac;*.ac3;*.aiff;*.m4a;*.mka;*.mp2;*.ogg;*");_tsplitpath_s(str, NULL, 0, NULL, 0, NULL, 0, szExt, _MAX_EXT);   // 获取后缀名strLower = szExt;strLower.MakeLower();if (!strLower.IsEmpty())    // 没有后缀名的不符合条件{strLower += _T(";*");   // .mo不符合条件,由于会匹配到.mov,所以在后面加上【;*】来判断是否完全匹配return -1 != STR_FileFilter.Find(strLower);}return FALSE;
}

ShowPlaylist的定义为:

void CVlcPlayerCsdnDlg::ShowPlaylist(BOOL bShow)
{CRect rcWnd, rcPlaylist;GetWindowRect(&rcWnd);m_listPlay.GetClientRect(&rcPlaylist);if (m_listPlay.IsWindowVisible() != bShow) // 只有显示状态发生变化时,才调整窗口大小{if (bShow){SetWindowPos(NULL, 0, 0, rcWnd.Width() + rcPlaylist.Width(), rcWnd.Height(), SWP_NOMOVE);}else{SetWindowPos(NULL, 0, 0, rcWnd.Width() - rcPlaylist.Width(), rcWnd.Height(), SWP_NOMOVE);}}m_listPlay.ShowWindow(bShow ? SW_SHOW : SW_HIDE);m_listInfo.ShowWindow(bShow ? SW_SHOW : SW_HIDE);
}

运行,如下:

最后的最后,再实现一下一开始隐藏播放列表的功能。

在初始化函数隐藏,代码为:

CRect rcWnd, rcPlaylist;GetWindowRect(&rcWnd);m_listPlay.GetClientRect(&rcPlaylist);SetWindowPos(NULL, 0, 0, rcWnd.Width() - rcPlaylist.Width() - GetSystemMetrics(SM_CXFRAME) - GetSystemMetrics(SM_CXBORDER), rcWnd.Height() , SWP_NOMOVE);GetDlgItem(IDC_LIST_PLAY)->ShowWindow(SW_HIDE);GetDlgItem(IDC_LIST_MUSINFO)->ShowWindow(SW_HIDE);

好了,运行,播放列表已经隐藏:

拖拽如文件后,播放列表再次显示:

行了,运行完成!

代码已经上传,你们可以看一下。下载地址

注意:1、本人是萌新,大佬们可以直接跳过阅读我的文章,写这个目的就是为了赚点分数以后可以用,当然也是想和其他萌新一起学习。

2、我会尽力快点更新,如果有什么问题大家可以在底下评论,我看到便会回复的,我的个人邮箱iszhangyongxin@163.com

3、每一期我都会尽量放上源代码,希望能帮到大家的学习。

MFC 基于VLC的视频播放器(三)---界面设计以及对话框接受文件的拖拽相关推荐

  1. MFC 基于VLC的视频播放器(四)---播放器的双击列表播放文件以及时间轴显示

    北京时间08点43分 2018年12月27号 前面的文章已经完成了界面设计,还有接受文件拖拽,这文章则是完成双击播放列表时播放文件. 首先,在类向导里面添加播放列表双击播放的响应函数. 添加代码: v ...

  2. 视频播放器的界面设计并实现播放器

    类MediaController extends FrameLayout: 属性: TransportController mController:播放的接口 Context  mContext;上下 ...

  3. rtsp协议_基于libVLC的视频播放器(支持RTSP协议)

    VLC Media Player是一款优秀的播放器,大多数多媒体开发人员都使用过.VLC是一款开源的.跨平台的.可扩展的.多媒体播放器.流媒体服务器及框架,可播放大多数多媒体文件,以及DVD.音频CD ...

  4. 最简单的基于 DirectShow 的视频播放器

    源程序下载链接:https://download.csdn.net/download/bmjhappy/11250669 50行代码实现的一个最简单的基于 DirectShow 的视频播放器 本文介绍 ...

  5. 基于vlc-Qt的视频播放器(支持添加视频列表、单曲循环等)

    基于libvlc和Qt实现了一个视频播放器,可实现列表循环播放,单曲播放等,效果好于Qt自带的视频播放库.网上已有诸多基于vlc库的视频播放器,但设计列表播放的资源较少,基于vlc实现列表播放主要利用 ...

  6. 转:最简单的基于 DirectShow 的视频播放器

    50行代码实现的一个最简单的基于 DirectShow 的视频播放器 本文介绍一个最简单的基于 DirectShow 的视频播放器.该播放器对于初学者来说是十分有用的,它包含了使用 DirectSho ...

  7. 基于android的视频播放器,基于Android的视频播放器的设计与实现-.doc

    基于Android的视频播放器的设计与实现- 基于Android的视频播放器的设计与实现 中 文 摘 要 如今,随着基于Android的智能手机的,.因此,设计一个基于android手机的多功能播放器 ...

  8. 最简单的基于libVLC的例子:最简单的基于libVLC的视频播放器

    最简单的基于libVLC的例子文章列表: 最简单的基于libVLC的例子:最简单的基于libVLC的视频播放器 最简单的基于libVLC的例子:最简单的基于libVLC的视频播放器(图形界面版) 最简 ...

  9. 基于FFmpeg开发视频播放器, 基本流程(一)

    刚开始学习FFmpeg,用几篇文章记录下,使用ffmpeg开发一个简单的视频播放器,大概的过程.这里只讨论核心代码,如解封装,音频的解码播放,视频的解码播放,音视频同步,不涉及UI布局. 基于FFmp ...

最新文章

  1. JAVA NIO - Buffer Channel
  2. TCP、UDP绑定同一端口通信的解释
  3. python浅拷贝和深拷贝
  4. (建议收藏)产品经理要懂的SaaS知识,一文打包给你
  5. python引入redis_十六大Python面试题!看完面试官给了我40K的薪资
  6. 2009年5月软件设计师考前预测试题及考点解析
  7. html:(30):继承和特殊性
  8. Winform开发之ADO.NET对象Connection、Command、DataReader、DataAdapter、DataSet和DataTable简介...
  9. 转载:Linux批量远程管理主机命令_pssh用法详解
  10. gsoap 实现 C/C++ 调用web service
  11. mysql之多表联合查询并输入数据来自哪张表
  12. Ubuntu下TP5隐藏入口文件
  13. javascript实现前程无忧的选择城市
  14. MT6577供放问题
  15. PDF如何导出成图片,操作教程
  16. 二重积分的概念与性质——重点部分笔记
  17. 企业金融App评测系列——微众银行以App构筑企业金融服务新生态,成为企业的随身数字银行
  18. BookCollectionSoftware - 图书管理(知识点糅合::类,对象,抽象类,接口,封装,继承,多态,顺序表)- java - 细节狂魔
  19. Python爬虫爬取豆瓣书籍数据
  20. CentOS 7 关闭 swap 分区

热门文章

  1. m数据结构 day5 栈:后进先出,只能在表尾插入和删除的线性表
  2. 热释电探测器多用在_热敏电阻和热释电探测器分别适合探测哪种形式的辐射信号?...
  3. Vcastr 3.0 开源的在线FLV播放器
  4. 【038】MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义?
  5. 一夜狼人杀-一觉睡醒( ̄ー ̄)发现游戏结束了。。
  6. Linux 入门教程(摘自www.linuxsir.org)
  7. 奋斗吧,程序员——第三十七章.雄关漫道真如铁,而今迈步从头越
  8. 【单片机】辉光管时钟系列<四>温度芯片DS18B20显示
  9. 字体生成GAN(GlyphGAN)学习笔记
  10. ALSA声卡驱动中的DAPM详解之一:kcontrol