继续看雷霄骅的 课程资料 - 基于FFmpeg+SDL的视频播放器的制作
最后一篇,主要是想学一下 MFC 创建和配置。
一、创建 MFC 工程
文件->新建->项目->Visual C++ ->MFC 应用程序
应用程序类型,选择基于对话框
生成效果如下:
二、设置控件
找到“工具箱”,就可以将相应的控件拖拽至应用程序对话框中
常用控件有: Button, Edit Control, Static Text等。
右键找到“属性”选项卡
可以在“ Caption”属性上修改控件上的文字
可以在“ ID” 属性上修改控件上的ID( ID是控件的标识,不可重复)
播放 IDC_PLAY暂停 IDC_PAUSE停止 IDC_STOP关于 IDC_ABORT文件路径 IDC_STATIC示例编辑框 IDC_URL文件... IDC_FILEDIALOG
修改效果如下:
三、添加消息响应函数
双击 Button 控件,就可以给该控件添加消息响应函数。
或者在菜单栏的“项目->类向导”处,可以添加更多种类的消息响应函数。
查看资源视图窗口
视图->其他窗口->资源视图窗口MFC最简单的弹出消息框的函数是AfxMessageBo("HelloWorld");
双击 播放 按钮,写入最简单函数调试出现错误,“AfxMessageBox”: 2 个重载中没有一个可以转换所有参数类型
1>------ 已启动生成: 项目: MFC, 配置: Debug Win32 ------1>MFCDlg.cpp解决方法: 参看:“AfxMessageBox”: 2 个重载中没有一个可以转换所有参数类型 将其改为 AfxMessageBox(_T("Hello world"));
1>d:\zslfchenjuke\work2017\mfc\mfc\mfc\mfcdlg.cpp(161): error C2665: “AfxMessageBox”: 2 个重载中没有一个可以转换所有参数类型
1>c:\program files (x86)\microsoft visual studio\2017\enterprise\vc\tools\msvc\14.10.25017\atlmfc\include\afxwin.h(6544): note: 可能是“int AfxMessageBox(UINT,UINT,UINT)”
1>c:\program files (x86)\microsoft visual studio\2017\enterprise\vc\tools\msvc\14.10.25017\atlmfc\include\afxwin.h(6542): note: 或 “int AfxMessageBox(LPCTSTR,UINT,UINT)”
1>d:\zslfchenjuke\work2017\mfc\mfc\mfc\mfcdlg.cpp(161): note: 尝试匹配参数列表“(const char [12])”时
1>已完成生成项目“MFC.vcxproj”的操作 - 失败。
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
点击“播放”按钮,效果如下:
四、FFmpeg解码器与MFC的整合
拷贝 SDL 开发文件
头文件( *.h)拷贝至项目文件夹的include子文件夹下
导入库文件( *.lib)拷贝至项目文件夹的lib子文件夹下 (不再配置 SDL2main.lib)
动态库文件( *.dll) 拷贝至项目文件夹下
点击右键,选择在资源管理器中打开文件夹,进入项目目录。(注意,如果手动进入注意文件夹位置,我就是没找好位置,试了半天最后才发现,将上面的这些文件拷贝到错误的文件夹下了)
配置开发文件
打开属性面板解决方案资源管理器->右键单击项目->属性
导入库配置
配置属性->链接器->常规->附加库目录,输入“ lib” (刚才拷贝库文件的目录)配置属性->链接器->输入->附加依赖项,输入“ SDL2.lib;avcodec.lib;avformat.lib;avutil.lib;avdevice.lib;avfilter.lib;postproc.lib;swresample.lib;swscale.lib;”(导入库的文件名) (注意不再配置 SDL2main.lib)
测试
双击“文件”按钮,添加相关头文件和代码extern "C"{#include "libavcodec/avcodec.h" };
void CMFCDlg::OnBnClickedFiledialog(){// TODO: 在此添加控件通知处理程序代码CString str2;str2.Format(_T("%s"),avcodec_configuration());AfxMessageBox((str2));}调试结果如下,有信息但是乱码。说明配置是没问题的。但是上面的程序可能是有问题的。具体不清楚了,稍后再研究。