📄 dialog.txt
字号:
移入avi播放对话框功能涉及的文件:
//实现播放功能的类定义和类实现文件
DIGITALVIDEO.CPP
DIGITALVIDEO.H
//avi消息对话框类的定义和实现文件
INFODLG.CPP
INFODLG.H
//资源ID数值定义文件
RESOURCE.H
//预定义头文件
STDAFX.CPP
STDAFX.H
//资源文件,定义了各种对话框、菜单、工具栏、字串...
VIDEOPLAYER.RC
//播放对话框的定义和实现文件
VIDEOPLAYERDLG.CPP
VIDEOPLAYERDLG.H
//播放程序中用到的两个图标文件资源
ICON1.ICO
IDR_MAIN.ICO
移入avi播放对话框功能的流程:
1.先将
DIGITALVIDEO.CPP, DIGITALVIDEO.H;
INFODLG.CPP, INFODLG.H;
VIDEOPLAYERDLG.CPP, VIDEOPLAYERDLG.H;
ICON1.ICO, IDR_MAIN.ICO;
共8个文件拷到要移入的工程的目录中;即“分割镜头提取关键帧”工程目录;其他列出的文件只要引入或合并其中的信息;
2.在VC的FileView中右击“avisample files”添加前6个文件到工程中,ICON1.ICO, IDR_MAIN.ICO会由后面的合并资源文件时加入;
3.参照播放程序中的STDAFX.H修改你的程序中的StdAfx.h文件,主要是对比#include语句部分,把STDAFX.H中有的而你的StdAfx.h文件没有的#include语句加进去。因为播放程序功能的实现要用到这些头文件。STDAFX.CPP文件对于两个工程是一样的,所以用不到。
4.接下来是RESOURCE.H和你的文件中的Resource.h的合并。用写字板打开播放程序中的RESOURCE.H,这里只需要把#define ID...这一大块粘贴到你的程序中的Resource.h对应位置,因为下面一部分两者是相同的;然后关键就是处理那些重复的ID了,这里名字不可以重复但是数值可以(因为ID名识别了不同的对象,菜单、按钮等,而数值表示的是消息编号,相同的值可以实现不同的对象发出同一消息;最简单的例子就是工具栏中的打开文件按钮和菜单栏里的打开文件菜单项ID不同但数值相同:))。重复ID处理的方法是如果你的Resource.h中有的项,就把RESOURCE.H中的用“//”注释掉,一般来说这是可行的,单具体也涉及什么ID是必须的,这里是为了保证原有程序能正确运行。
5.然后就是VIDEOPLAYER.RC和你的程序中的avisample.rc的合并。同样用写字板打开播放程序中的VIDEOPLAYER.RC,avisample.rc可以用写字板打开也可以在工程中打开,你只要搜索其中的一个ID,然后双击搜索到的avisample.rc文件中条目就可以以文本方式打开rc文件了。资源文件的合并较简单,只要把VIDEOPLAYER.RC里Icon资源的说明语句“IDR_MAINFRAME ICON DISCARDABLE "idr_main.ico"”
复制粘贴到avisample.rc中对应的Icon说明后面,VIDEOPLAYER.RC里Dialog资源说明部分也一样,只是第一个对话框IDD_ABOUTBOX DIALOG(到那个END为止的这一段)不要加到avisample.rc中,因为avisample.rc中有一个相同的对话框,由于这个对话框对于实现播放功能不重要,所以直接不要这个对话框,后面也会看到在播放程序的文件VIDEOPLAYERDLG.CPP也要把与这个对话框有关的代码注释掉。
6.好了,大的修改基本完成,现在还需要对三个类的实现文件做一些小改动。先是注释掉DIGITALVIDEO.CPP,INFODLG.CPP和VIDEOPLAYERDLG.CPP中的“#include "VideoPlayer.h"”语句,这是原播放程序中的app类头文件,这里用不到;然后就是把VIDEOPLAYERDLG.CPP中和CAboutDlg有关的语句注释掉,前面也提到了这相当于不要播放功能中实现的About对话框。你在工程中搜索CAboutDlg,应该会出现26个条目,其中VIDEOPLAYERDLG.CPP中的13个是要注释掉的,前面的12行可以用块注释符号
/* */注释,后面的//CAboutDlg dlgAbout; //dlgAbout.DoModal();两句都要注释掉,所以一共是14行。
7.OK,播放功能相关的文件算是引入完成了:)。接下来就是在主菜单中加入菜单项并实现播放对话框的调用了。先在MainFrm.cpp文件中加入#include "VideoPlayerDlg.h",这样才能在里面使用CVideoPlayerDlg类。添加菜单项你已经会了,命名为ID_AVI_PLAY,其他也行。然后按我说过的方法加入菜单项响应函数,“在VC界面左边的ClassView里右击CMainFrame类->Add windows message handle...,然后在Class or object to handle:里选择那个菜单项的ID_AVI_PLAY,然后双击COMMAND,确定,就会自动生成一个空的处理那个菜单点击消息的函数CMainFrame::OnAviPlay,之后在里面加入调用播放对话框的代码:
CVideoPlayerDlg dlg;
//m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: Place code here to handle when the dialog is
// dismissed with OK
}
else if (nResponse == IDCANCEL)
{
// TODO: Place code here to handle when the dialog is
// dismissed with Cancel
}
8.如果前面没有出错,现在可以全部重建了,然后就可以运行。
所有过程中比较重要的就是第3、4和5步,如果还有问题再说!
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -