《DirectShow视频采集方案.docx》由会员分享,可在线阅读,更多相关《DirectShow视频采集方案.docx(24页珍藏版)》请在三一办公上搜索。
1、2.3DireCtShOW视频采集方案流媒体处理技术以其困难性和技术性始终受到人们的关注.防着网络技术的不断发展.流媒体在网络上得到了广泛地应用.如何能修简洁、有效地进行流媒体处埋.已成为一个熊点问趣.为此.MiCrOson推出了DireaShODireaShOW是Microsoft推出的菸于Windows平台的流媒体处理开发包,它与DirectX,起发布,DireciShow对流媒体的捕获、回放供应了强大的支持,运用它还可以在域于WDM必动的采集卡上进行数据捕获。本节将介绍有关DinxtShow的相关学问.DirectShow系统结构分析DircetShoW主要由过谑器(FilterGmph
2、)图表构成.过谑图农中包含/各种Eilter,这些FiIter旎够按肯定依次连接在起.构成一条流水缓.从功能的角度划分,Filter大体可以分为3类,SourceFillers,TransformFiltersRenderingFilters.SoUgFilterS主要负责获得数据,可以是一个文件、一个聚集卡、声卡或数码相机等TmnSft三Fike上负费数据的转换、传输.例如各种编码器、解码器等。RCnderingFillerS负责数据的最终去向,例如将数据传送到声卡、显卡或存储为文件.在开发DirCCtShCW应用程序时,通常须要设计个过/图农(FihCrGraPh),向过酒图我中添加相应的
3、过沙器,最终连接过泄器的引脚就完成了功能的设计。例如,实现个荷沽的视频预览功能,须要向过沙图表中添加一个视频捕获源过沌器和一个VideRendCrer过沌器,将视领捕获源过池器的输出引脚与VideoRCIKkrer过谑器的输入引脚相连就可以了.而在程序中只须要依据设计过泄图表的捕获添加过漉零并连接过沌潺引脚就可以了.在连接过沌零引脚时须要注意:只能是输出过逑器引肥与输入过沙器引脚相连,两个给出过谑器或两个输入过港器引脚是不能相连的.为了在程序中运用DireClShow,须要单独安装DireCtX,当前DireaX的域新版本为9.0,即DireCIX9.0,用户可以从MiE三h的官方网站上免费卜
4、战,在安装DiNCIX之后,程序中须要引用Fshumh头文件,并3入51四洞,.g库文件和“quartzlib”库文件才可以运用DimCtShOW.代眄如下:#Pragmacomment(Iib1wStrmiids)#Pragmacomment(lib,quartz)“includeFilter图表设计为了使利用户设计过波图衣,DireCIX供应了个GntPhEdiI工具,用户可以单击“起先”菜单下的“MicrvsofiDirectX9SDKDir;IXUtiIiliesVGraphEdit”菜单项打开GraphEdil工具,如图2.10所示。IS2.10GraphEditZA卜面笔者介绍如何
5、运用GraphEdit工具设计过谑图表,过游图衣的功能是实现视猱的预览功能,详细步骤如卜:(1)在图2.4中单击“GraphAnscrtFmenr菜单项打开M添加过谑器”窗口,如图2.11所示。jInyertFilter|CI0”VhichfiltersdJrOQvastto5ert?.BDASoBCeFiltersBDATrftniportIafomtionKandrrsD*vcControlFilter*,DirectShcvFilters:DIwAudioCaptxirttEffects5DIMAUdioBffcltDWVideoEffects;ExternalRiidrtrsVidiR
6、ndrr4BVldVOCpSreSoxircero3OlWp,511)VId*oCorprtsortAlWStremDeCgPremgDevicesRAlWStrQSingCpturDtvicxAIftStrsiComunicationTrnfornt&KlWStremincCrossbarDevicesAMStrosingDITraxixfomx图2.11添加过流器的口(2)在“VideoCapiureSoUrCeS”节点下选择一个视频捕获源过渡器,单击“InsertFiller按钮将其添加到过沙图衣中,如图2.12所示图2.12添加视婉桶茯源过沙器窗口提示;假如系统中没有安装摄像头及其驱动
7、程序,该节点下将不会有视频捕获源过谑器,(3)在“DirorlSh。WFilg”节点卜选择“VideoRenderer”过滤罂,籽其添加到图表中,如图2.13所示。图2.13添加“VideoRCndCRr”过湖器窗口(4)利用鼠标将视频捕获源过谑器的“Capture”引胆与VideoRCndCrer过渡器的“VMRInPMr引脚相连,如图2.14所示。图2.14连接过渡引脚窗11(5)单击工具栏中的“上b按钮运行过滤图发,将显示一个视频预览窗口,如图2.15所示,Aelve1*vicVib4*呼三一版本控制之道PragmaticVersionControl图2.15税嫉预览窗I】枚举系统设备运
8、用GraPhEdit工具,用户可以特别便利地扶疗与某一系统设备相关的过港器.但是,在程序中该如何获得这些过港器呢?用户可以采纳枚举的方式列举系统中安装的设备“以列举系统中的视频捕获设招为例,件先定义一个设需列举接口ICrealeDeVEnUm的一个指针,调用CoCreaieInstance方法创建ICneateDevEnum实例,然后定义一个列举监视器!EnumMonikcr的个指针,试用ICrCHtCDCVEnUm实例的CrcatcciassEnumcrator方法创建IEniImMOnikCr实例,最终以指环的方式调用IEnUmMOlIiker实例的NeXI方法遍历系统设备,调用IEnll
9、mMOniker实例的BindToObjeci方法将系统设备绑定到过游器上。在上面的描述中.ICrcatcDdEnum实例的CrMCClaSEEIWmCnHOr方法的第个参数瑜定枚举的系统设备.例如笫个参数为CisiD-VidcolnpulDcviccCalcgory,22示将要枚举系统中的视物甫奈卡,为Cl-SlD3WcoComprcssrCatcgory.表示枚举系统中的视频压缩器。下面的代码演示了如何枚举系统中的视频捕获卡枚举视频设备ICreatcDcvEnum*pDcvEnum=NU1.1.:CoCrcatclnsancc(CIID-SystcmDcviccEnum.NU1.1.C1.
10、SCTXNPRQC,IIDJCfa(eDevEnum(void*)&pDevEnum);IEjiuniMonikcr*pClassEnum=NU1.1.:pDcvEnum-XkcatcClassEnumcrator(C1.SIDVidcolnputDcviccCatcgriry.ApCIassEnum.0):U1.ONGcFctchcd;while(pClasEnumNex(I.pMoniker-BindTObjxt(0.0.HD_IBaseFiher.(void*)Rclcasc():break;JpClassEnurn-Relcasc():而下面的代眄则用于推断系统中是否安装了指定的视频压
11、缩器.ICrcatcDcvEnumfpDcvEnum=NU1.1.;CoCreateInstance(C1.SID_Sys(emDeviceEnum,NU1.1.C1.SCTX.INPROC.IID,ICrcaleDevEnum.(void*)pDevEnum);IEnumMonikcr4pClasEnum=NU1.1.:列举视频压缩设备pDevEiniin-XreateClassEnumeratortC1.SID.VideoCompressofCategor),.ApCIassEnumi0);while(pClaxsEnum-Nexl(1.&pMoniker.AcFelched)=S_OK(
12、IPmpcrtyBag4PProP-NU1.1.;pMonikerBindToSorage(void*5*)p-Rcad(1.,FriendlyNamcw,varNan,O);CStringsir=varName.bstrVal;if(str.Fil(,MicrsoftVideo.0)!=-1)(pMonikcr-BindT(K)bjcct(0.O,HDeIBaseFihcr4(void*,)pComprcss);pMonikerRelease();break;JVariantCIcar(AvarNanK);)pClassEnun-Release();查找FilterPin每一个过渡器(Fil
13、ter)至少应有一个引脚(Pin).或者是输入引脚或者是输出用脚。有线过渡器还拥有多个引脚,即又情人引脚又有除出引脚.但是过漉零的谕入、怆出引脚并不是对应的,有些过漉零可以有多个谕入引脚.而只有一个横出引脚或齐没有输出引脚,在程序中为了连接过酒器间的引脚,逋常须要狭得过渔器的各个引脚.用户可以运用IEnumPins接11来枚举某一个过滤器的输入、蛤出引脚.过灌器IBaseFiItcr供应了一个EnumPins方法用于生成一个IEnUmPinS接口实例,这样,通过调用IEnUmPinS的Next方法便可以访问各个引脚了。下面的代码定义了一个FindPin函数.用于获得某个过源潺的输入或徜出引脚.
14、查找引脚IPin*CKinescopeDIgjjFindRindBaseFiherj*pRlter,PIN_DIRECTIONdir)IEnumPins*pEnumPins:IPin*putin;P1N.D1RECTIONpDir:pFilter-EnumPins(&pEnumPins):while(pEnumPins-Ncxt(l.&pOutpin,Nl;1.1.)=S_OK)pO(pin-QuerjDitection(pDir);tfDir=:/pSrc的输出引脚HRESU1.Tresult;result=pGraph-X7onncctDirect(pOutpinfpComIn,NU1.1
15、.);视频预览设计方案在开发视领应用程序时.一个最基本的功能足视顿预览.本日将介绍如何应用DieCtShoW实现视算预览.效果加图2.16所示.Delphi数据库系统开发完全手册DHaM*xI海,图2.16视频预览设计方案在运用DiNCIShOw开发应用程序时,通常须要先设计过谑图去,然后依据图表来设计应用程序,在设计视频预览过滤图表时,只须要两个步骤,第一个步骤是添加觇频捕获的源过游器,其次个步臊是添加VideURCndCr过滤器,并连接两个过波曙引脚.过湖图我详细设计步骤如下:(I)启动GraphEdit工具,在GraphEditJ1.具中单击“GraphXlnscrtFmerS喋单J打开
16、“添加过谑器窗口”,在“VideoCaptureSOUn;es”节点下选择一个视频捕获流过逑器,单击“InsertFiher”按钮将其添加到过泄图表中,如图2.11所示。(2)在“DirortShowFilg”节点卜将“VideoRender”过谑器添加1到图表中,如图2.17所示。图2J7过滤图衣设计1(3)连接过滤器型脚,如图2.18所示。图2.18过港图表设计2至此,完成视域预览过灌图表的i殳计推由“Play按钮运行过/图衣,物弹出一个视频狡览窗口,如图2.19所示.WindowVisualc+程序开发范例宝典MBM图2.19DeriCtShoWBi览窗口程序详细步骡如下:实例位置:光盘
17、mr22.3M)l(1)创建一个基于对话框的工程,在对话框类的头文件中引用Pshowh”头文件。#pragnuicomment(lib.*StrmiidsM)#Pragmacomment(libqua117,*)#include(2)在对话框类中定义如下成员变量。IMcdiaControIIGrophBuiIdcrIBaseFiIcerIMoniker媒体限制过湖图农过港器赛视器pMcdiaContro!:pGraph;“pSr产PPreView;pMniker(3)向对话框类中添加Fin(IPin方法,查找过谑器的引脚。克找出脚1Pin*CPrcVCWDIg=FindPinaBaSCFikC
18、rpR!tcr,PINeDIRECTIONdir)(IEnumPinstpEnumPins;IPin*pu(pin:PlN.DIRECTIONpDi11pFihcr-EnunPins(pEnumPins);while(EwnPins-Nex(I,Outpin,NU1.1.)=S.OK)(p()utpin-QucrDircction(pDir):if(pDir=dir)(returnpulpin;)1returnO;)(4)在应用程序类的Initlnstancc方法中初始化COm接口.初始化ComColniiiaIize(NU1.1.):(5)在对话框初始化时枚举视频捕获设饴,设计过沌图表。IC
19、aptUrcGraphBUiIdCr2pBuldcr=NU1.1.;pGraph=NU1.1.;PMediaControI=NU1.1.:枚举视频设法!CreatcDcvEnum4pDcvEnum=NU1.1.:CoCrcatclnstancc(Cl-SID_SystcmDcviccEnum,NU1.1.,C1.SCTXNPRoC,IIDJCreateDevEnum.(void*)DevEnum);IEnumMoniker*pClassEnum=NU1.1.:pDcvEnum-CrcatcClassEnumcrator(C1.SlDVidcolnputDcviccCatcgfry.ApCIas
20、sEnum.0):U1.ONGcFctchcd;iffpClassEnumNext(l.&pMoniker.&cFe(ched)=SJDK)(pMonikcr-BmdTo()bjcct().O.IJD-lBaseEiltcr.(void4)pSrc);pMonikcr-Rclcasc();JpClassEnurn-Relcasc():CoCrcatcInslancc(C1.SlD_CapturcGraphBui!dcr2.0.C1.SCTX_INPROC_SERVERJID_ICaptureGraphBuiklcr2Xvoid*)&pBuildcr);CoCreateInstance(C1.S
21、ID,FihefGraph.NU1.1.、C1.SCTXNPRoc1.SERVER,liD_IGruphBuilder.(void*)pGraph):pBuilckr-SctEhcrgraph(p(jraph);pGraph-Qucr)ln(erfacc(IID_lMcdiaCon(rol,(void*)&pMcdiaControl);PGraPh-AddFiliertpSa1.Fvi);PPrcV沁W=NU1.1.;CoCrcatclnstancc(C1.SlD-VidcoRcndcrcrJhC1.SCrX_A1.1.IIDJBascFihcr,(void*f)pPrcvicw);if(pP
22、vview!=NU1.1.)pGraph-?ddFi!teitpPreviewJ1.MpreviewM);连接羽脚IPin*PsOUrCCout:PSoUrCeOU1.FindPin(PSrC.P1NDIR_OIJTPUT);IPwPPNm=FindPimPPNViewPNDIRNPUT);pGraph-ConncclDirt(pSourccOu:获得预览窗口IV,ideoWindowepVicwVnd=NU1.1.;pPn?view-QueryInterfaceput_Owncrkng)m_hWnd);pVicwWnd-put_1.cft(1);pVicwWnd-put_Tnp(1);获褥预
23、览演口风格longstyle;pVicwWnd-gct_WindowStylc(&stylc):style=style&-WS.CAPTION;style=style&WS_D1.GFKAME;SIyle=style&WS-CHl1.D:pVicwWnd-putWindowStyldstyIc):设置预览窗【】变位和高度CRectrc;GelQiCnIReCHre):pVicwWnd-putHeight(rc.Hcight(-60);pVicwWnd-put,WklRun():J事务通知设计方案在运用DlrcCtShtW开发应用程序时.通常须要DiratShOw与应用程序之间进行交互.例如,在
24、运用DireCtShOw播放影视文件时,在文件播放完毕后,应用程序须要加到通知,并通知用户文件播放完毕.Din:CtShCW果纳了事分通知的机制与用户应用程序进行交互,行过泄器的状态变更时,或者虫画视频窗口时,都将产生相应的任务,由DiwIShOw处理并转发给应用程序,应用程序能卷接收到该产务,井依据犷务的不同类型作出相应的处理。Di代CIShoW供应了3个有关事务通知的按口,分别为TMCdiaEVESink、IMediaEvenfTMcdiaEvenlEx1.其中,IMediaEYemEX接口是IMCdiaEVCm接口的犷展,在应用程序中常常运用该接11类处埋事务.IMCdiaEVCntEX
25、接口的主要方法如下:I.GeiNotifyFlags该方法用于获得事务通知是否被激活.语法如E:HRESU1.TGCtNOtifyHagS(IOng*lplNoNMifHags);参数说明:IPlNONoifyFlags:确定裂务通知是否被激活。假如为零,表示业务通知被激活,为Az1.MEDIAEVENT_NONoTlFY,表示事务通知不行用。2. SctNotifyHags方法该方法用于设置事务通知是否被激活.国法如下:HRESU1.TSetNwifyFlags(longINoNoiifjHags):IpINoNotifyFIags:假如为零,表示激活少务通知,为AN1.MEDlAEVENT
26、_NoNoTIFY,表示禁止犷务通知。3. SetNotifyWindow方法该方法用于注册一个窗口来处理事务通知.i?i法如下:HRESUiTSctNxiyWindow(OAHWNDhwnd,longIMsg.longIInstanccData);参数说明:hwnd:表示处理事务通知的窗口句柄.IMsg:表示与事芬通知关联的窗口消息.IInstanccData:作为IMSg消息处理函数的IParam参数被传递.4. GeiEventHandleZf法该方法用于获得人工重置事务对象的句柄。语法如MHRESUEGctEventHandIefOAEVENT*hEvcnt):参数说明:hEvenc;
27、表示返回的人工由K小芬对象的句柄。5. GelEVenl方法该方法用于从消息队列中返回下一个事务通知.谙法如下:HRESUIT(long*IEvcntCodc,long4IParamI,long*IParam2,longmsTimcout):参数说明:IEYCmCode;衣示接收的事务通知代码.IParamI:表示第一个事务参数.IParamZ:表示第2个事务参数.msTimeoiH:表示超时时间,假如为NFlNlTE,将始终等待,直到有小分通知为止,6. FreCEVCnlParamS方法该函数用于群放事务参数.谱法如下:HRESUITFrCCEvCntParam$(longIEvcntCo
28、dc.longIParaml.IOngIParam2);参数说明:IEvcnlCode:衣示接收的事务通知代码,IParamI:表示第一个事务参数.lParam2表示第2个事务参数.7. CanceIDefauItHandIing方法该方法用于取消DirCUShOW对事务进行的欣认处理,语法如卜.:HRESUECancclDcfaultHandling(longIEvCodO:参数说明:IEvCode:表示步务通知代码,8. ResuwcDeIaultHandIing方法该方法用于立原DirCCtShOW对默认消息的处理.谙法如下:HRESUIJRcstorcDelaultHandling(l
29、ongIEvCodc);参数说明:IEVCode:表示事务通知代码.在应用程序中可以有两种方式来接收和处理DireClShOW中的事务.第一种方武是让DirCClShow向应用程序的窗1.l中发送消息.第2种方式是通过事务对望(这里的对是指Wind。WS内核对象).向对而言,第一种方式比较简洁,也比较常用,而第2种方式多用于控制台应用程序或多线程应用程序,下面空者将分别以这两种方式来实现货务通知消息,为了演示应用程序获得了DircxtShow发送的事务通知,卜面的两个例子均以播放一个AVI文件为例,在DiRxlShow播放完AVl文件.将向应用程序发出通知应用程序获得通知后.将弹出对话框供应用
30、户,如图2.20,图2.21所示.图2.20裂务通Hl方式I效果图图2.21步务通知方式2效果图I基于窗口消息的事务通知&实例位置:光盘mr22.3W)l创建一个基于对话框的工程,在对话框中添加按钮、图像控件,如图2.22所示.图2.22事务通知方式I对话框设计(2)在类向导的“MemberVariables”选项卡中为图像控件命名,如图2.23所示.图2.23类向导窗口(3)在对话框类的头文件中引用Pshow./头文件并导入相应的库文件#pragmacomment(librStrmikk,*)#Pragmacomment(lib.quafiz*)#include(4)在应用程序的IniUnS
31、taiMX方法中初始化Com库。BOO1.CNotifyEvcntApp:Initlns(ancc()(AfXEnablCCOnIroIComainE):#ifdcf.AEXD1.1.Enablc3dControls();#el$eEnable3dContlsStali()#CndirCoInitiaIizc(NUl-1.);CNotifyEveinDIgdig;m-pMainWnd=&dlg;intnRcsponsc=dlg.lA!odal():if(nRcsponsc=IDOK)()elseif(nRcsponsc=1DCANCE1.)IJreturnFA1.SE;J(5)改写应用程序的E
32、XiUnmncC方法,在应用程序退出时卸我Com.摩.intCN(MifyEYenlAPpiExitInsunceO(CoUninitializcO;rdurnCWinApp:ExitInscanceO;J(6)在对话框类中添加如下成员变埴,IMediaCoiHroIpMediaConrol;媒体跟叼IGniphBuiIder+pGraph;“过渡图表IBascEiltcr*pSrc:过/JKIMonikcr*pMonikcr;BOO1.m_Previewed;IMediaEventExIPEVelH:IVidcoWindowpVicwWnd;监视器是否进行预览”事务”预览窗口句柄(7)自定义
33、一个消息,用于在完成文件播放时向窗口中发送通知.defineCM.NOTIFYWM_USER+1向对话框类中添加自定义消息处理函数OnGraphNotiNvoidCNotifyEvcntDlg:OnGraphNotify(WPARAMwParam.1.PARAMIParam)(if(pEve11)(1.ONGcvcntdc=0.pram1=0.param2=O;while(SUCCEEDED(pEvcnt-GctEvcnt(&cvcntcodc.¶ml.¶m2.0)(pEvent-FreeEventParams(eventc(le.paranI.pa11112);switch(
34、eventcode)caseEC1.COMP1.ETE:(m_Prcvicwcd=FA1.SE:pMcdiaControl-Stop();pMediaControl-Release();pG11ph-Release();pVicwWnd-put_VisibIc(FA1.SE);MCSSageBoX(预览先成,提示);m_Panel.ShowVindow(SW_HIDE);m_Panel.ShowVindow(SW_SIIOW);break:J)I(9)在对话框的消息映射部分添加消息,映射宏,将消息与消息处理函数关联起来“BEGlh1.MESSAGE-MARCNolifyEveniDkCDial
35、og)/(AFX_MSG_MAP(CNotifyEvcntDlg)ON_WM_SYSCOMMAND。ON_WM_P/INT()ON_WM_QUERYDRAGlCoNOON_BN_C1.1CKEDON_MESSAGE(CM_NOTIFY.OnGraphNotify)/)AFX-MSG-MPEND_MBSSAGE_MAP()(10)处理”设置文件”按钮的单击事务.起先播放AVI文件.voidCNctifyEvcmDlgiOnChooSEOCFileDiaIogfDlg(TRUENU1.1.NU1.1.OFN【IDEREADON1.Y|OFN_0VERWRlTEPROMPTJavi文件产.ak);i
36、f(fDlg.DoMlal()=IIX)K)(CStringStrFiIe=fDlg.GctPathName();1CapC1.SCTX_lNPROC_SERVER.IIDICapturcGrapliBuilder2.(void*)&pBuildur):CoCrcatclnsUnce(C1.SID,EiltcrSeiFikergraph(pGraph);PGriIPhQuCr)InIerTHCe(IIDMCdiilComrO1.(VOid8*)pMcdiaCQngI);pGraphRcnderEilc(strHlc.AI!ocSysString(),NU1.1.);获得预览窗口PVieWWnd
37、=NU1.1.:pGraph-Quer)lmerface(11D.IVkleoWindow.(void*pViewWnd):if(pVicwWnd)(设置预览窗口的拥有者pVicwWnd-put_Owncr(long)m_Panel.m_hWnd):pVicwWndputJxft(I);pViewWndXit.Top(I);获得预览杳口风格longstyle:pVicwWnd-gc(_WindowStylc(&siylc);style=style&-WS.CPTION;style=style&-WS_D1.GFRAME;style=style&WS-CHI1.D:pVicwWndpput-Hc
38、ight(rc.Height();pViewWnd-x113Vidth(vVi;)pCiraphQucr)intcrface(IID_JMcdiaEvcnlEx.(void*)pEvcnt);pEvcnt-SclNVindow(OAHWND)m_hWnd,CM_NOTm:0);pMediRun();ni_Previewcd=TRUE;JJI祭于步务对象的通知*实例位:置:光盘mr22.3W2(1)创建一个基于对话框的I:程,在对话框中添加按钮、图像控件,如图2.241、.12.24方务通知方式2话框设计(2)在类向导的“MemberVariUbICS”选项R中为图像控件命名。(3)在对话柢类的
39、头文件中引用dshowh”头文件.并导入相应的库文件.#Pragnlacomment(lib,wStmnids*)#Pragmacomment(lib.*quanzM)#include(4)在应用程序的Initlnstancc方法中初始化Com库.BOOl.CDircctShowEvcntAppiJnitInstanccOAfxEnableControlContainer();#ifdcf.AEXD1.1.Enablc3dControls();#elseEnable3dControlsStaiic();#CndifCoIniciaIizc(NU1.1.);CDirectSbowEventDIg
40、dig;IiVpMainWnd=&dlg;intnRcsponsc=dlg.IModa!();if(nRcsponsc=-IIX)K)elseif(nRcsponsc=IDCANCE1.)returnFA1.SE:)(5)改写应用程序的EXiunSiaMe方法,在应用程序退出时和我Com库.intCDireCIShOWEVemAPpMExitIftsianceOCoUninitiaIizcO;returnCWinApp:Exiilns(ancc();)(6)在对话框类中添加如卜成员变量。IMcdiaControIIGrophBuiIdcrIBaseFiIcerIMoniker*pMcdiaCo
41、ntrol:pGraph;“pSrv;4pMoniker:媒体限制过港图发过渔器赛视器BOO1.m_Previewed;IMediaEventExpEvent;IVideoWindowpViewWnd:BOOl.m_Complctcd;是否进行预览事务/f视频预览窗口预览是否完成HAND1.Em-hTread;统程句柄(7)在对话机初始化时初始化成员变琏oBOO1.CDircctShowEvcntDlg:OnInitDialog()(CDiak辑。OnInhDkdOg();ASSERT(IDM_ABOUTBOX&OxFFFO)=IDM_ABOUTBOX);ASSERTdDK1.ABOUTBOXAppcndMcnu(Mb1.SEPARAOR;pSysMcnu-AppcMMcnu(MF,STRINQIDM_ABOUTBOX、