PlayerDlg.cpp 94 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704
  1. ////////////////////////////////////////////////////////////////////////////////
  2. //File:PlayerDlg.cpp
  3. /////////////////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "StoneU_HC_CARDOCX.h"
  6. #include "PlayerDlg.h"
  7. #include "vkey.h"
  8. #include "info.h"
  9. #include "cutfile.h"
  10. #include "HelpDlg.h"
  11. #include "CConvertAVI.h"
  12. #include "Extern.h"
  13. #include ".\playerdlg.h"
  14. #include "Global.h"
  15. #ifdef _DEBUG
  16. #define new DEBUG_NEW
  17. #undef THIS_FILE
  18. static char THIS_FILE[] = __FILE__;
  19. #endif
  20. // class used to convert file to avi
  21. CConvertAVI g_classAVI;
  22. CPlayerDlg::CPlayerDlg(CWnd* pParent /*=NULL*/)
  23. : CDialog(CPlayerDlg::IDD, pParent)
  24. {
  25. //{{AFX_DATA_INIT(CPlayerDlg)
  26. m_strPlayStateText = _T("");
  27. //}}AFX_DATA_INIT
  28. // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
  29. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  30. // Init the parameters
  31. m_bInit = false;
  32. }
  33. void CPlayerDlg::DoDataExchange(CDataExchange* pDX)
  34. {
  35. CDialog::DoDataExchange(pDX);
  36. //{{AFX_DATA_MAP(CPlayerDlg)
  37. DDX_Control(pDX, IDC_PLAYSTATETEXT, m_ctrlPlayText);
  38. DDX_Control(pDX, IDC_CAPPIC, m_ctrlBtnCapPic);
  39. DDX_Control(pDX, IDC_SOUND, m_ctrlBtnSound);
  40. DDX_Control(pDX, IDC_STEPBACK, m_ctrlStepBackward);
  41. DDX_Control(pDX, IDC_STEP, m_ctrlStepForward);
  42. DDX_Control(pDX, IDC_SLOW, m_ctrlBtnSlow);
  43. DDX_Control(pDX, IDC_FAST, m_ctrlBtnFast);
  44. DDX_Control(pDX, IDC_GOTOSTART, m_ctrlBtnGStart);
  45. DDX_Control(pDX, IDC_GOTOEND, m_ctrlBtnGEnd);
  46. DDX_Control(pDX, IDC_STOP, m_ctrlBtnStop);
  47. DDX_Control(pDX, IDC_PLAY, m_ctrlBtnPlay);
  48. DDX_Control(pDX, IDC_PAUSE, m_ctrlBtnPause);
  49. DDX_Control(pDX, IDC_SHOW, m_ctrlVideoPic);
  50. DDX_Text(pDX, IDC_PLAYSTATETEXT, m_strPlayStateText);
  51. DDX_Control(pDX, IDC_SOUND_SLIDER, m_SoundSlider);
  52. //}}AFX_DATA_MAP
  53. DDX_Control(pDX, IDC_LIST_VEDIO, m_List_Vedio);
  54. DDX_Control(pDX, IDC_DATETIME_BEGIN, m_timeBegin);
  55. DDX_Control(pDX, IDC_DATETIME_END, m_timeEnd);
  56. DDX_Control(pDX, IDC_BTN_QUERY, m_btnQuery);
  57. }
  58. BEGIN_MESSAGE_MAP(CPlayerDlg, CDialog)
  59. //{{AFX_MSG_MAP(CPlayerDlg)
  60. ON_WM_SYSCOMMAND()
  61. ON_WM_PAINT()
  62. ON_WM_QUERYDRAGICON()
  63. ON_WM_KEYDOWN()
  64. ON_WM_HSCROLL()
  65. ON_WM_LBUTTONDBLCLK()
  66. ON_WM_CLOSE()
  67. ON_WM_TIMER()
  68. ON_WM_SIZE()
  69. ON_WM_DROPFILES()
  70. ON_WM_MOVE()
  71. ON_WM_LBUTTONDOWN()
  72. ON_WM_LBUTTONUP()
  73. ON_WM_DESTROY()
  74. ON_WM_WINDOWPOSCHANGED()
  75. ON_WM_GETMINMAXINFO()
  76. //}}AFX_MSG_MAP
  77. ON_COMMAND_RANGE(IDM_VIEW_FULLSCREEN, IDM_DEVICE3, OnMenuItem)
  78. ON_COMMAND_RANGE(IDC_PLAY, IDC_SOUND, OnButtonItem)
  79. // ON_MESSAGE(WM_FILE_END, PlayMessage)
  80. // ON_MESSAGE(WM_ENC_CHANGE,EncChangeMessage)
  81. // ON_MESSAGE(WM_SEEKOK, SeekOk)
  82. // ON_MESSAGE(WM_DISPLAY_OK, DisplayOk)
  83. // ON_MESSAGE(WM_VIDEOCTRL_OK, VideoCtrlOK)
  84. ON_BN_CLICKED(IDC_BTN_QUERY, OnBnClickedBtnQuery)
  85. ON_NOTIFY(NM_DBLCLK, IDC_LIST_VEDIO, OnNMDblclkListVedio)
  86. ON_WM_CTLCOLOR()
  87. END_MESSAGE_MAP()
  88. /////////////////////////////////////////////////////////////////////////////
  89. // CPlayerDlg message handlers
  90. BOOL CPlayerDlg::OnInitDialog()
  91. {
  92. CDialog::OnInitDialog();
  93. //SetCtrlPos();
  94. // Add "About..." menu item to system menu.
  95. // Set the icon for this dialog. The framework does this automatically
  96. // when the application's main window is not a dialog
  97. SetIcon(m_hIcon, TRUE); // Set big icon
  98. SetIcon(m_hIcon, FALSE); // Set small icon
  99. // TODO: Add extra initialization here
  100. m_pMainMenu = GetMenu();
  101. if(m_pMainMenu == NULL)
  102. {
  103. TRACE("GetMenu is Error!");
  104. return FALSE;
  105. }
  106. SetCtrlPos( CRect(0,0,g_nFrameWeight-15,g_nFrameHeight-100) );
  107. InitList( &m_List_Vedio );
  108. Init();
  109. CTime tmEnd;
  110. tmEnd=CTime::GetCurrentTime();
  111. m_timeEnd.SetTime(&tmEnd);
  112. m_timeEnd.SetFormat(_T("yyyy-M-d HH:mm:ss"));
  113. time_t timeTemp=tmEnd.GetTime();
  114. COleDateTime timeEnd(timeTemp);
  115. COleDateTime timeBegin = timeEnd-COleDateTimeSpan( 2,0,0,0 );
  116. SYSTEMTIME systime;
  117. VariantTimeToSystemTime(timeBegin, &systime);
  118. CTime tmBegin(systime);
  119. m_timeBegin.SetTime(&tmBegin);
  120. m_timeBegin.SetFormat(_T("yyyy-M-d HH:mm:ss"));
  121. CTime tmB(tmBegin.GetYear(),tmBegin.GetMonth(),tmBegin.GetDay(),0,0,0);
  122. m_timeBegin.SetTime( &tmB );
  123. CTime tmE(tmEnd.GetYear(),tmEnd.GetMonth(),tmEnd.GetDay(),23,59,59);
  124. m_timeEnd.SetTime( &tmE );
  125. //m_btnQuery.SetBitmaps(IDB_BITMAP_QUERY, RGB(255, 0, 255));
  126. //m_btnQuery.SetFlat(FALSE);
  127. //m_btnQuery.SetAlign(CButtonST::ST_ALIGN_HORIZ);
  128. //m_btnQuery.SetIcon(IDI_QUERY);
  129. //m_btnQuery.SetFlat(FALSE);
  130. //m_btnQuery.SetAlign(CButtonST::ST_ALIGN_HORIZ);
  131. //SetVideoCtrlPos();
  132. return TRUE; // return TRUE unless you set the focus to a control
  133. }
  134. void CPlayerDlg::SetCtrlPos( CRect rect )
  135. {
  136. this->MoveWindow( rect );
  137. CRect rMain;
  138. this->GetWindowRect( rMain );
  139. ScreenToClient( &rMain );
  140. int W=0,H=0;
  141. //操作
  142. CRect rcSta1;
  143. GetDlgItem(IDC_STATIC_1)->GetWindowRect( rcSta1 );
  144. W = rcSta1.Width();
  145. H = rcSta1.Height();
  146. rcSta1.right = rMain.right-5;
  147. rcSta1.left = rcSta1.right-W;
  148. rcSta1.bottom = rMain.bottom-5;
  149. rcSta1.top = rcSta1.bottom-H;
  150. GetDlgItem(IDC_STATIC_1)->MoveWindow(rcSta1);
  151. CRect rcBtnQuery;
  152. GetDlgItem(IDC_BTN_QUERY)->GetWindowRect( rcBtnQuery );
  153. W = rcBtnQuery.Width();
  154. H = rcBtnQuery.Height();
  155. rcBtnQuery.left = rcSta1.left+10;
  156. rcBtnQuery.right = rcSta1.right-10;
  157. rcBtnQuery.bottom = rcSta1.bottom-5;
  158. rcBtnQuery.top = rcBtnQuery.bottom-H;
  159. GetDlgItem(IDC_BTN_QUERY)->MoveWindow(rcBtnQuery);
  160. CRect rcDateE;
  161. GetDlgItem(IDC_DATETIME_END)->GetWindowRect( rcDateE );
  162. W = rcDateE.Width();
  163. H = rcDateE.Height();
  164. rcDateE.left = rcSta1.left+10;
  165. rcDateE.right = rcSta1.right-10;
  166. rcDateE.bottom = rcBtnQuery.top-5;
  167. rcDateE.top = rcDateE.bottom-H;
  168. GetDlgItem(IDC_DATETIME_END)->MoveWindow(rcDateE);
  169. CRect rcDateS;
  170. GetDlgItem(IDC_DATETIME_BEGIN)->GetWindowRect( rcDateS );
  171. W = rcDateS.Width();
  172. H = rcDateS.Height();
  173. rcDateS.left = rcSta1.left+10;
  174. rcDateS.right = rcSta1.right-10;
  175. rcDateS.bottom = rcDateE.top-5;
  176. rcDateS.top = rcDateS.bottom-H;
  177. GetDlgItem(IDC_DATETIME_BEGIN)->MoveWindow(rcDateS);
  178. //列表
  179. CRect rcList;
  180. GetDlgItem(IDC_LIST_VEDIO)->GetWindowRect( rcList );
  181. W = rcList.Width();
  182. H = rcList.Height();
  183. rcList.right = rMain.right-5;
  184. rcList.left = rcSta1.right-W;
  185. rcList.top = 0;
  186. rcList.bottom = rcSta1.top-0;
  187. GetDlgItem(IDC_LIST_VEDIO)->MoveWindow(rcList);
  188. CRect rcStaVedioBtn;
  189. GetDlgItem(IDC_STATIC_VEDIOBTN)->GetWindowRect( rcStaVedioBtn );//ScreenToClient( rcStaVedioBtn );
  190. W = rcStaVedioBtn.Width();
  191. H = rcStaVedioBtn.Height();
  192. rcStaVedioBtn.left = ( rMain.Width()-rcSta1.Width())/2-W/2;
  193. rcStaVedioBtn.right = rcStaVedioBtn.left+W;
  194. rcStaVedioBtn.bottom = rMain.bottom-5;
  195. rcStaVedioBtn.top = rcStaVedioBtn.bottom-H;
  196. GetDlgItem(IDC_STATIC_VEDIOBTN)->MoveWindow(rcStaVedioBtn);
  197. CRect rcSlider;
  198. GetDlgItem(IDC_PLAY_RECT_SLIDER)->GetWindowRect( rcSlider );
  199. W = rcSlider.Width();
  200. H = rcSlider.Height();
  201. rcSlider.left = rcStaVedioBtn.left;
  202. rcSlider.right = rcStaVedioBtn.right;
  203. rcSlider.top = rcStaVedioBtn.top;
  204. rcSlider.bottom = rcSlider.top+H;
  205. GetDlgItem(IDC_PLAY_RECT_SLIDER)->MoveWindow(rcSlider);
  206. CRect rcText;
  207. GetDlgItem(IDC_PLAYSTATETEXT)->GetWindowRect( rcText );
  208. W = rcText.Width();
  209. H = rcText.Height();
  210. rcText.left = rcStaVedioBtn.left;
  211. rcText.right = rcStaVedioBtn.right;
  212. rcText.bottom = rcStaVedioBtn.bottom;
  213. rcText.top = rcText.bottom-H;
  214. GetDlgItem(IDC_PLAYSTATETEXT)->MoveWindow(rcText);
  215. CRect rcBtnPlay;
  216. GetDlgItem(IDC_PLAY)->GetWindowRect( rcBtnPlay );
  217. W = rcBtnPlay.Width();
  218. H = rcBtnPlay.Height();
  219. rcBtnPlay.left = rcText.left+3;
  220. rcBtnPlay.right = rcBtnPlay.left+W;
  221. rcBtnPlay.bottom = rcText.top-11;
  222. rcBtnPlay.top = rcBtnPlay.bottom-H;
  223. GetDlgItem(IDC_PLAY)->MoveWindow(rcBtnPlay);
  224. CRect rcBtnPause;
  225. GetDlgItem(IDC_PAUSE)->GetWindowRect( rcBtnPause );
  226. W = rcBtnPause.Width();
  227. H = rcBtnPause.Height();
  228. rcBtnPause.left = rcBtnPlay.right+7;
  229. rcBtnPause.right = rcBtnPause.left+W;
  230. rcBtnPause.bottom = rcText.top-11;
  231. rcBtnPause.top = rcBtnPlay.bottom-H;
  232. GetDlgItem(IDC_PAUSE)->MoveWindow(rcBtnPause);
  233. CRect rcBtnStop;
  234. GetDlgItem(IDC_STOP)->GetWindowRect( rcBtnStop );
  235. W = rcBtnStop.Width();
  236. H = rcBtnStop.Height();
  237. rcBtnStop.left = rcBtnPause.right+7;
  238. rcBtnStop.right = rcBtnStop.left+W;
  239. rcBtnStop.bottom = rcText.top-11;
  240. rcBtnStop.top = rcBtnStop.bottom-H;
  241. GetDlgItem(IDC_STOP)->MoveWindow(rcBtnStop);
  242. CRect rcInter1;
  243. GetDlgItem(IDC_INTER1)->GetWindowRect( rcInter1 );
  244. W = rcInter1.Width();
  245. H = rcInter1.Height();
  246. rcInter1.left = rcBtnStop.right+5;
  247. rcInter1.right = rcInter1.left+W;
  248. rcInter1.bottom = rcText.top-5;
  249. rcInter1.top = rcInter1.bottom-H;
  250. GetDlgItem(IDC_INTER1)->MoveWindow(rcInter1);
  251. CRect rcBtnGoToStart;
  252. GetDlgItem(IDC_GOTOSTART)->GetWindowRect( rcBtnGoToStart );
  253. W = rcBtnGoToStart.Width();
  254. H = rcBtnGoToStart.Height();
  255. rcBtnGoToStart.left = rcInter1.right+7;
  256. rcBtnGoToStart.right = rcBtnGoToStart.left+W;
  257. rcBtnGoToStart.bottom = rcText.top-10;
  258. rcBtnGoToStart.top = rcBtnGoToStart.bottom-H;
  259. GetDlgItem(IDC_GOTOSTART)->MoveWindow(rcBtnGoToStart);
  260. CRect rcBtnSlow;
  261. GetDlgItem(IDC_SLOW)->GetWindowRect( rcBtnSlow );
  262. W = rcBtnSlow.Width();
  263. H = rcBtnSlow.Height();
  264. rcBtnSlow.left = rcBtnGoToStart.right+1;
  265. rcBtnSlow.right = rcBtnSlow.left+W;
  266. rcBtnSlow.bottom = rcText.top-10;
  267. rcBtnSlow.top = rcBtnSlow.bottom-H;
  268. GetDlgItem(IDC_SLOW)->MoveWindow(rcBtnSlow);
  269. CRect rcBtnFast;
  270. GetDlgItem(IDC_FAST)->GetWindowRect( rcBtnFast );
  271. W = rcBtnFast.Width();
  272. H = rcBtnFast.Height();
  273. rcBtnFast.left = rcBtnSlow.right+1;
  274. rcBtnFast.right = rcBtnFast.left+W;
  275. rcBtnFast.bottom = rcText.top-10;
  276. rcBtnFast.top = rcBtnFast.bottom-H;
  277. GetDlgItem(IDC_FAST)->MoveWindow(rcBtnFast);
  278. CRect rcBtnGoToEnd;
  279. GetDlgItem(IDC_GOTOEND)->GetWindowRect( rcBtnGoToEnd );
  280. W = rcBtnGoToEnd.Width();
  281. H = rcBtnGoToEnd.Height();
  282. rcBtnGoToEnd.left = rcBtnFast.right+1;
  283. rcBtnGoToEnd.right = rcBtnGoToEnd.left+W;
  284. rcBtnGoToEnd.bottom = rcText.top-10;
  285. rcBtnGoToEnd.top = rcBtnGoToEnd.bottom-H;
  286. GetDlgItem(IDC_GOTOEND)->MoveWindow(rcBtnGoToEnd);
  287. CRect rcInter2;
  288. GetDlgItem(IDC_INTER2)->GetWindowRect( rcInter2 );
  289. W = rcInter2.Width();
  290. H = rcInter2.Height();
  291. rcInter2.left = rcBtnGoToEnd.right+5;
  292. rcInter2.right = rcInter2.left+W;
  293. rcInter2.bottom = rcText.top-5;
  294. rcInter2.top = rcInter2.bottom-H;
  295. GetDlgItem(IDC_INTER2)->MoveWindow(rcInter2);
  296. CRect rcBtnStepBack;
  297. GetDlgItem(IDC_STEPBACK)->GetWindowRect( rcBtnStepBack );
  298. W = rcBtnStepBack.Width();
  299. H = rcBtnStepBack.Height();
  300. rcBtnStepBack.left = rcInter2.right+1;
  301. rcBtnStepBack.right = rcBtnStepBack.left+W;
  302. rcBtnStepBack.bottom = rcText.top-10;
  303. rcBtnStepBack.top = rcBtnStepBack.bottom-H;
  304. GetDlgItem(IDC_STEPBACK)->MoveWindow(rcBtnStepBack);
  305. CRect rcBtnStep;
  306. GetDlgItem(IDC_STEP)->GetWindowRect( rcBtnStep );
  307. W = rcBtnStep.Width();
  308. H = rcBtnStep.Height();
  309. rcBtnStep.left = rcBtnStepBack.right+1;
  310. rcBtnStep.right = rcBtnStep.left+W;
  311. rcBtnStep.bottom = rcText.top-10;
  312. rcBtnStep.top = rcBtnStep.bottom-H;
  313. GetDlgItem(IDC_STEP)->MoveWindow(rcBtnStep);
  314. CRect rcInter3;
  315. GetDlgItem(IDC_INTER3)->GetWindowRect( rcInter3 );
  316. W = rcInter3.Width();
  317. H = rcInter3.Height();
  318. rcInter3.left = rcBtnStep.right+5;
  319. rcInter3.right = rcInter3.left+W;
  320. rcInter3.bottom = rcText.top-5;
  321. rcInter3.top = rcInter3.bottom-H;
  322. GetDlgItem(IDC_INTER3)->MoveWindow(rcInter3);
  323. CRect rcBtnCapPic;
  324. GetDlgItem(IDC_CAPPIC)->GetWindowRect( rcBtnCapPic );
  325. W = rcBtnCapPic.Width();
  326. H = rcBtnCapPic.Height();
  327. rcBtnCapPic.left = rcInter3.right+6;
  328. rcBtnCapPic.right = rcBtnCapPic.left+W;
  329. rcBtnCapPic.bottom = rcText.top-10;
  330. rcBtnCapPic.top = rcBtnCapPic.bottom-H;
  331. GetDlgItem(IDC_CAPPIC)->MoveWindow(rcBtnCapPic);
  332. CRect rcBtnSound;
  333. GetDlgItem(IDC_SOUND)->GetWindowRect( rcBtnSound );
  334. W = rcBtnSound.Width();
  335. H = rcBtnSound.Height();
  336. rcBtnSound.left = rcBtnCapPic.right+6;
  337. rcBtnSound.right = rcBtnSound.left+W;
  338. rcBtnSound.bottom = rcText.top-10;
  339. rcBtnSound.top = rcBtnSound.bottom-H;
  340. GetDlgItem(IDC_SOUND)->MoveWindow(rcBtnSound);
  341. CRect rcSliderSound;
  342. GetDlgItem(IDC_SOUND_SLIDER)->GetWindowRect( rcSliderSound );
  343. W = rcSliderSound.Width();
  344. H = rcSliderSound.Height();
  345. rcSliderSound.left = rcBtnSound.right+6;
  346. rcSliderSound.right = rcSliderSound.left+W;
  347. rcSliderSound.bottom = rcText.top-10;
  348. rcSliderSound.top = rcSliderSound.bottom-H;
  349. GetDlgItem(IDC_SOUND_SLIDER)->MoveWindow(rcSliderSound);
  350. //Video
  351. CRect rcVideo;
  352. GetDlgItem(IDC_SHOW)->GetWindowRect( rcVideo );
  353. rcVideo.left = 0;
  354. rcVideo.top = 0;
  355. rcVideo.right = rcList.left-5;
  356. rcVideo.bottom = rcList.bottom;
  357. GetDlgItem(IDC_SHOW)->MoveWindow(rcVideo);
  358. }
  359. void CPlayerDlg::SetVideoCtrlPos( )
  360. {
  361. //m_ctrlBtnPlay.ModifyStyle(0, WS_VISIBLE, 0);
  362. //m_ctrlBtnPause.ModifyStyle(0, WS_VISIBLE, 0);
  363. //m_ctrlBtnStop.ModifyStyle(0, WS_VISIBLE, 0);
  364. //m_ctrlBtnFast.ModifyStyle(0, WS_VISIBLE, 0);
  365. //m_ctrlBtnGEnd.ModifyStyle(0, WS_VISIBLE, 0);
  366. //m_ctrlBtnSlow.ModifyStyle(0, WS_VISIBLE, 0);
  367. //m_ctrlBtnGStart.ModifyStyle(0, WS_VISIBLE, 0);
  368. //m_ctrlStepForward.ModifyStyle(0, WS_VISIBLE, 0);
  369. //m_ctrlStepBackward.ModifyStyle(0, WS_VISIBLE, 0);
  370. //m_ctrlBtnCapPic.ModifyStyle(0, WS_VISIBLE, 0);
  371. //m_ctrlBtnSound.ModifyStyle(0, WS_VISIBLE, 0);
  372. //GetDlgItem(IDC_INTER1)->ModifyStyle(0, WS_VISIBLE, 0);
  373. //GetDlgItem(IDC_INTER2)->ModifyStyle(0, WS_VISIBLE, 0);
  374. //GetDlgItem(IDC_INTER3)->ModifyStyle(0, WS_VISIBLE, 0);
  375. //m_PlaySlider.ModifyStyle(0,WS_VISIBLE,0);
  376. //m_SoundSlider.ModifyStyle(0,WS_VISIBLE,0);
  377. //m_ctrlPlayText.ModifyStyle(0,WS_VISIBLE,0);
  378. //make the window can be resize.
  379. //ModifyStyle(0, WS_SIZEBOX, 0);
  380. //change the window pos to pre rect.
  381. //SetWindowPlacement(&m_OldWndpl);
  382. //列表
  383. CRect rcList2;
  384. GetDlgItem(IDC_LIST_VEDIO)->GetWindowRect( rcList2 );
  385. //Video
  386. CRect rcVideo1,rcVideo2;
  387. GetDlgItem(IDC_SHOW)->GetWindowRect( rcVideo1 );
  388. rcVideo2.left = 0;
  389. rcVideo2.top = 0;
  390. rcVideo2.right = rcList2.left-2;
  391. rcVideo2.bottom = rcList2.bottom;
  392. GetDlgItem(IDC_SHOW)->MoveWindow(rcVideo2,true);
  393. //this->RedrawWindow();
  394. }
  395. HBRUSH CPlayerDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
  396. {
  397. HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
  398. // TODO: 在此更改 DC 的任何属性
  399. int nID = pWnd->GetDlgCtrlID();
  400. //HBRUSH B1 = CreateSolidBrush( RGB(236,233,216) );
  401. if( nID == IDC_STA_MESSAGE)
  402. {
  403. pDC->SetTextColor(RGB( 255,0,0));
  404. pDC->SetBkMode( TRANSPARENT );
  405. //return B1;
  406. }
  407. //DeleteObject(B1);
  408. // TODO: 如果默认的不是所需画笔,则返回另一个画笔
  409. return hbr;
  410. }
  411. void CPlayerDlg::InitList( CListCtrlCl *pListCtrlCl )
  412. {
  413. //pListCtrlCl->SetColColor(0,RGB(10,150,20)); //设置列背景色
  414. //pListCtrlCl->SetColColor(2,RGB(30,100,90)); //设置列背景色
  415. //pListCtrlCl->SetBkColor(RGB(50,10,10)); //设置背景色
  416. //pListCtrlCl->SetItemColor(1,1,RGB(100,100,10)); //设置指定单元背景色
  417. //pListCtrlCl->SetRowHeigt(25); //设置行高度
  418. //pListCtrlCl->SetHeaderHeight(1.5); //设置头部高度
  419. //pListCtrlCl->SetHeaderFontHW(16,0); //设置头部字体高度,和宽度,0表示缺省,自适应
  420. pListCtrlCl->SetHeaderTextColor(RGB(0,0,0)); //设置头部字体颜色
  421. //pListCtrlCl->SetTextColor(RGB(0,255,255)); //设置文本颜色
  422. pListCtrlCl->SetHeaderBKColor(213,222,242,8); //设置头部背景色
  423. ////pListCtrlCl->SetFontHW(15,0); //设置字体高度,和宽度,0表示缺省宽度
  424. //pListCtrlCl->SetColTextColor(2,RGB(255,255,100)); //设置列文本颜色
  425. //pListCtrlCl->SetItemTextColor(3,1,RGB(255,0,0)); //设置单元格字体颜色
  426. pListCtrlCl->InsertColumn(0,_T("視頻列表(双击打开)"),LVCFMT_LEFT,190);
  427. //pListCtrlCl->InsertColumn(1,_T("和"),LVCFMT_CENTER,29);
  428. pListCtrlCl->SetTextBkColor( RGB(213,222,242) );
  429. pListCtrlCl->SetBkColor( RGB(213,222,242) );
  430. SetWindowLong(pListCtrlCl->m_hWnd ,GWL_EXSTYLE,WS_EX_CLIENTEDGE);
  431. pListCtrlCl->SetExtendedStyle(LVS_EX_GRIDLINES); //设置扩展风格为网格
  432. ::SendMessage(pListCtrlCl->m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE,
  433. LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT);
  434. }
  435. void CPlayerDlg::OnSysCommand(UINT nID, LPARAM lParam)
  436. {
  437. //if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  438. //{
  439. // CAboutDlg dlgAbout;
  440. // dlgAbout.DoModal();
  441. //}
  442. //else
  443. {
  444. CDialog::OnSysCommand(nID, lParam);
  445. }
  446. }
  447. // If you add a minimize button to your dialog, you will need the code below
  448. // to draw the icon. For MFC applications using the document/view model,
  449. // this is automatically done for you by the framework.
  450. void CPlayerDlg::OnPaint()
  451. {
  452. if (IsIconic())
  453. {
  454. CPaintDC dc(this); // device context for painting
  455. // SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  456. // Center icon in client rectangle
  457. int cxIcon = GetSystemMetrics(SM_CXICON);
  458. int cyIcon = GetSystemMetrics(SM_CYICON);
  459. CRect rect;
  460. GetClientRect(&rect);
  461. int x = (rect.Width() - cxIcon + 1) / 2;
  462. int y = (rect.Height() - cyIcon + 1) / 2;
  463. // Draw the icon
  464. dc.DrawIcon(x, y, m_hIcon);
  465. }
  466. else
  467. {
  468. CDialog::OnPaint();
  469. }
  470. this->UpdateWindow();
  471. NAME(PlayM4_RefreshPlay)(PORT);
  472. }
  473. // The system calls this to obtain the cursor to display while the user drags
  474. // the minimized window.
  475. HCURSOR CPlayerDlg::OnQueryDragIcon()
  476. {
  477. return (HCURSOR) m_hIcon;
  478. }
  479. //////////////////////////////////////////////////////////////////////////////
  480. //Function: called when u drag a file to the playing window
  481. //////////////////////////////////////////////////////////////////////////////
  482. void CPlayerDlg::OnDropFiles(HDROP hDropInfo)
  483. {
  484. // TODO: Add your message handler code here and/or call default
  485. DWORD nFileNameSize = DragQueryFile(hDropInfo, 0, NULL, 0);
  486. char * sFileName = new char[nFileNameSize + 1];
  487. DragQueryFile(hDropInfo, 0, sFileName, nFileNameSize + 1);
  488. m_strPlayFileName = sFileName;
  489. Open();
  490. SetState();
  491. delete []sFileName;
  492. CDialog::OnDropFiles(hDropInfo);
  493. }
  494. //////////////////////////////////////////////////////////////////////////////
  495. //Function: overload to handle keydown message
  496. //////////////////////////////////////////////////////////////////////////////
  497. BOOL CPlayerDlg::PreTranslateMessage(MSG* lpmsg)
  498. {
  499. switch (lpmsg->message)
  500. {
  501. case WM_KEYDOWN:
  502. OnKeyDown(lpmsg->wParam, LOWORD(lpmsg ->lParam), HIWORD(lpmsg->lParam));
  503. return TRUE;
  504. default:
  505. break;
  506. }
  507. return CDialog::PreTranslateMessage(lpmsg);
  508. }
  509. //////////////////////////////////////////////////////////////////////////////
  510. //Function: hot key
  511. //////////////////////////////////////////////////////////////////////////////
  512. void CPlayerDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
  513. {
  514. // TODO: Add your message handler code here and/or call default
  515. UINT nMenuState;
  516. //
  517. //if(nChar == VK_F2)
  518. //ViewFullScreen();
  519. if(GetKeyState(VK_CONTROL) & 0xFF00)
  520. {
  521. switch(nChar)
  522. {
  523. case VK_C:
  524. if(!m_bFullScreen)
  525. {
  526. //nMenuState = m_pMainMenu->GetMenuState(IDM_FILE_CLOSE, MF_BYCOMMAND);
  527. //if(nMenuState != MF_GRAYED)
  528. //{
  529. // Close();
  530. // SetState();
  531. //}
  532. }
  533. break;
  534. case VK_O:
  535. if(!m_bFullScreen)
  536. {
  537. //nMenuState = m_pMainMenu->GetMenuState(IDM_FILE_OPEN, MF_BYCOMMAND);
  538. //if(nMenuState != MF_GRAYED)
  539. //{
  540. // if(BrowseFile(&m_strPlayFileName))
  541. // {
  542. // Open();
  543. // SetState();
  544. // }
  545. //}
  546. }
  547. break;
  548. case VK_S:
  549. break;
  550. case VK_T:
  551. //nMenuState = m_pMainMenu->GetMenuState(IDM_CUT_FILE, MF_BYCOMMAND);
  552. //if(nMenuState != MF_GRAYED)
  553. //{
  554. // CutFile();
  555. //}
  556. break;
  557. case VK_L:
  558. Locate();
  559. break;
  560. case VK_LEFT:
  561. GotoStart();
  562. break;
  563. case VK_RIGHT:
  564. GotoEnd();
  565. break;
  566. case VK_ONE:
  567. if(m_enumState != State_Stop)
  568. ViewZoom(IDM_VIEW_ZOOM_50);
  569. break;
  570. case VK_TWO:
  571. if(m_enumState != State_Stop)
  572. ViewZoom(IDM_VIEW_ZOOM_100);
  573. break;
  574. case VK_THREE:
  575. if(m_enumState != State_Stop)
  576. ViewZoom(IDM_VIEW_ZOOM_200);
  577. break;
  578. default:
  579. break;
  580. }
  581. }
  582. else
  583. {
  584. switch(nChar)
  585. {
  586. case VK_ESCAPE:
  587. //if(m_bFullScreen)
  588. //ViewFullScreen();
  589. break;
  590. case VK_SPACE:
  591. if(m_enumState == State_Play)
  592. {
  593. Pause();
  594. SetState();
  595. }
  596. else if(m_enumState == State_Pause || m_enumState == State_Stop)
  597. {
  598. Play();
  599. SetState();
  600. }
  601. break;
  602. case VK_LEFT:
  603. if(m_enumState != State_Stop)
  604. {
  605. StepBackward();
  606. SetState();
  607. }
  608. break;
  609. case VK_RIGHT:
  610. if(m_enumState != State_Stop)
  611. {
  612. StepForward();
  613. SetState();
  614. }
  615. break;
  616. case VK_UP:
  617. AdjustSound(TRUE);
  618. break;
  619. case VK_DOWN:
  620. AdjustSound(FALSE);
  621. break;
  622. case VK_DOT:
  623. if(m_enumState != State_Close)
  624. {
  625. //if(m_bFullScreen)
  626. //ViewFullScreen();
  627. Stop();
  628. SetState();
  629. }
  630. break;
  631. default:
  632. break;
  633. }
  634. }
  635. CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
  636. }
  637. ///////////////////////////////////////////////////////////////////////////
  638. //Function: Voluem and progress.
  639. ///////////////////////////////////////////////////////////////////////////
  640. void CPlayerDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
  641. {
  642. // TODO: Add your message handler code here and/or call default
  643. DWORD nTime;
  644. int nPlayPos;
  645. switch(GetWindowLong(pScrollBar->m_hWnd, GWL_ID))
  646. {
  647. /////////////////////////////////////////////////////////////////
  648. //progress slider
  649. case IDC_PLAY_SLIDER:
  650. if(m_bStreamType)
  651. break;
  652. nPlayPos = m_PlaySlider.GetScrollPos();
  653. if( abs(nPlayPos - m_nPrePlayPos) < 3 )
  654. break;
  655. #ifdef _FILE_POS
  656. NAME(PlayM4_SetPlayPos)(PORT, (float)nPlayPos/(float)PLAYER_SLIDER_MAX);
  657. #else
  658. nTime = nPlayPos * 1000 / PLAYER_SLIDER_MAX * m_dwMaxFileTime;
  659. TRACE("Set time ex \n");
  660. NAME(PlayM4_SetPlayedTimeEx)(PORT,nTime);
  661. TRACE("set time ex ok!\n");
  662. #endif
  663. // DrawStatus();
  664. break;
  665. ///////////////////////////////////////////////////////////////
  666. //sound slider;
  667. case IDC_SOUND_SLIDER:
  668. #ifdef _WAVE_ADJ
  669. NAME(PlayM4_AdjustWaveAudio)(PORT, m_SoundSlider.GetPos());
  670. #else
  671. NAME(PlayM4_SetVolume)(PORT,m_SoundSlider.GetPos());
  672. #endif
  673. break;
  674. default:
  675. break;
  676. }
  677. CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
  678. }
  679. /////////////////////////////////////////////////////////////////////
  680. //Called when u double click the left button
  681. /////////////////////////////////////////////////////////////////////
  682. void CPlayerDlg::OnLButtonDblClk(UINT nFlags, CPoint point)
  683. {
  684. // TODO: Add your message handler code here and/or call default
  685. //CPoint dpoint;
  686. //CRect vwrect;
  687. //GetCursorPos(&dpoint);
  688. //m_ctrlVideoPic.GetWindowRect(&vwrect);
  689. //if( ( m_enumState == State_Play || m_enumState == State_Pause) && vwrect.PtInRect(dpoint))
  690. // ViewFullScreen();
  691. CDialog::OnLButtonDblClk(nFlags, point);
  692. }
  693. /////////////////////////////////////////////////////////////////////
  694. //Timer funtion
  695. /////////////////////////////////////////////////////////////////////
  696. void CPlayerDlg::OnTimer(UINT nIDEvent)
  697. {
  698. // TODO: Add your message handler code here and/or call default
  699. if(nIDEvent==PLAY_TIMER)
  700. {
  701. DrawStatus();
  702. }
  703. CDialog::OnTimer(nIDEvent);
  704. }
  705. /////////////////////////////////////////////////////////////////////
  706. //Adjust control allign function
  707. /////////////////////////////////////////////////////////////////////
  708. void CPlayerDlg::OnSize(UINT nType, int cx, int cy)
  709. {
  710. CDialog::OnSize(nType, cx, cy);
  711. // TODO: Add your message handler code here
  712. if(m_ctrlVideoPic.GetSafeHwnd())
  713. {
  714. SortControl();
  715. }
  716. }
  717. /////////////////////////////////////////////////////////////////////
  718. // Function: Limit the window size.
  719. /////////////////////////////////////////////////////////////////////
  720. void CPlayerDlg::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
  721. {
  722. // TODO: Add your message handler code here and/or call default
  723. lpMMI->ptMinTrackSize.x = WIDTH/2 + m_dwDlgEdge * 2; // width
  724. lpMMI->ptMinTrackSize.y = PANNEL_HEIGHT + m_dwDlgTopSize ; // height
  725. CDialog::OnGetMinMaxInfo(lpMMI);
  726. }
  727. ///////////////////////////////////////////////////////////////////////////
  728. //Function:Redraw the image when move window.
  729. ///////////////////////////////////////////////////////////////////////////
  730. void CPlayerDlg::OnMove(int x, int y)
  731. {
  732. CDialog::OnMove(x, y);
  733. // TODO: Add your message handler code here
  734. NAME(PlayM4_RefreshPlay)(PORT);
  735. GetWindowRect(&m_rcWindow);
  736. DWORD dwNewDeviceNum;
  737. if(m_rcWindow.left < 0)
  738. return;
  739. if( (DWORD)m_rcWindow.right + (DWORD)m_rcWindow.left > 2 * m_dwScreenWidth )
  740. {
  741. if( (DWORD)m_rcWindow.top + (DWORD)m_rcWindow.bottom > 2 * m_dwScreenHeight)
  742. {
  743. dwNewDeviceNum = 3;
  744. m_rcScreen.left = m_dwScreenWidth;
  745. m_rcScreen.right = m_dwScreenWidth * 2;
  746. m_rcScreen.top = m_dwScreenHeight;
  747. m_rcScreen.bottom= m_dwScreenHeight * 2;
  748. }
  749. else
  750. {
  751. dwNewDeviceNum = 1;
  752. m_rcScreen.left = m_dwScreenWidth;
  753. m_rcScreen.right = m_dwScreenWidth * 2;
  754. m_rcScreen.top = 0;
  755. m_rcScreen.bottom= m_dwScreenHeight;
  756. }
  757. }
  758. else
  759. {
  760. if( (DWORD)m_rcWindow.top + (DWORD)m_rcWindow.bottom > 2 * m_dwScreenHeight)
  761. {
  762. dwNewDeviceNum = 2;
  763. m_rcScreen.left = 0;
  764. m_rcScreen.right = m_dwScreenWidth;
  765. m_rcScreen.top = m_dwScreenHeight;
  766. m_rcScreen.bottom= m_dwScreenHeight * 2;
  767. }
  768. else
  769. {
  770. dwNewDeviceNum = 0;
  771. m_rcScreen.left = 0;
  772. m_rcScreen.right = m_dwScreenWidth;
  773. m_rcScreen.top = 0;
  774. m_rcScreen.bottom= m_dwScreenHeight;
  775. }
  776. }
  777. if(dwNewDeviceNum != m_dwOldDeviceNum)
  778. {
  779. if(SetDevice(IDM_DEVICE0 + dwNewDeviceNum))
  780. {
  781. m_dwOldDeviceNum = dwNewDeviceNum;
  782. }
  783. }
  784. }
  785. ///////////////////////////////////////////////////////////////////////////
  786. //Function: Called when u click the left mouse button
  787. ///////////////////////////////////////////////////////////////////////////
  788. void CPlayerDlg::OnLButtonDown(UINT nFlags, CPoint point)
  789. {
  790. // TODO: Add your message handler code here and/or call default
  791. // CRect rcShow;
  792. // m_ctrlVideoPic.GetWindowRect(rcShow);
  793. // ScreenToClient(rcShow);
  794. //
  795. // if(rcShow.PtInRect(point))
  796. // {
  797. // m_StartPoint = point;
  798. // m_bStartDraw = TRUE;
  799. // InvalidateRect(m_rcDraw, TRUE);
  800. // ZeroMemory(&m_rcDraw, sizeof(m_rcDraw));
  801. // }
  802. CDialog::OnLButtonDown(nFlags, point);
  803. }
  804. void CPlayerDlg::OnLButtonUp(UINT nFlags, CPoint point)
  805. {
  806. // TODO: Add your message handler code here and/or call default
  807. // if(m_bStartDraw)
  808. // {
  809. // if(m_StartPoint != point)
  810. // {
  811. //
  812. // CRect rcShow;
  813. // m_ctrlVideoPic.GetWindowRect(rcShow);
  814. // ScreenToClient(rcShow);
  815. //
  816. // if( rcShow.PtInRect(point) && (point.x >= m_StartPoint.x) && (point.y >= m_StartPoint.y))
  817. // {
  818. // m_rcDraw.left = m_StartPoint.x;
  819. // m_rcDraw.top = m_StartPoint.y;
  820. // m_rcDraw.right = point.x;
  821. // m_rcDraw.bottom = point.y;
  822. //
  823. // CDC* pDC = GetDC();
  824. // pDC->DrawFocusRect(m_rcDraw);
  825. // ReleaseDC(pDC);
  826. //
  827. // LONG nPicWidth = 352;
  828. // LONG nPicHeight = 288;
  829. // NAME(PlayM4_GetPictureSize)(PORT, &nPicWidth, &nPicHeight);
  830. // m_rcDisplay = GetOnPicRect(rcShow, m_rcDraw, nPicWidth, nPicHeight);
  831. //
  832. // if(m_pDisplayRegion->m_hWnd)
  833. // m_pDisplayRegion->PostMessage(WM_DISPLAY_RECT, 0, (long)(&m_rcDisplay));
  834. // }
  835. //
  836. // }
  837. // m_bStartDraw = FALSE;
  838. // }
  839. CDialog::OnLButtonUp(nFlags, point);
  840. }
  841. //////////////////////////////////////////////////////////////////////
  842. //Function: Close.
  843. //////////////////////////////////////////////////////////////////////
  844. void CPlayerDlg::OnClose()
  845. {
  846. // TODO: Add your message handler code here and/or call default
  847. NAME(PlayM4_Stop)(PORT);
  848. NAME(PlayM4_CloseFile)(PORT);
  849. NAME(PlayM4_RealeseDDraw)();
  850. #if (WINVER > 0x0400)
  851. NAME(PlayM4_ReleaseDDrawDevice)();
  852. #endif
  853. if(m_pSeek != NULL)
  854. {
  855. m_pSeek->DestroyWindow();
  856. delete m_pSeek;
  857. m_pSeek = NULL;
  858. }
  859. if(m_pDisplayRegion != NULL)
  860. {
  861. m_pDisplayRegion->DestroyWindow();
  862. delete m_pDisplayRegion;
  863. m_pDisplayRegion = NULL;
  864. }
  865. if(m_pVideoControl != NULL)
  866. {
  867. m_pVideoControl->DestroyWindow();
  868. delete m_pVideoControl;
  869. m_pVideoControl = NULL;
  870. }
  871. if(m_bConvertAVI)
  872. {
  873. g_classAVI.ReleaseResource();
  874. m_bConvertAVI = FALSE;
  875. }
  876. CDialog::OnClose();
  877. }
  878. /*************************************************************************/
  879. /*************************************************************************/
  880. /*************************************************************************/
  881. /* user defined message handle begin
  882. /*************************************************************************/
  883. /*************************************************************************/
  884. /*************************************************************************/
  885. // Function: process the received WM_FILE_END message.
  886. // Para: wParam channel No. lParam reserved;
  887. void CPlayerDlg::PlayMessage(WPARAM wParam, LPARAM lParam)
  888. {
  889. // if(m_bFullScreen)
  890. // ViewFullScreen();
  891. //remove the same message.
  892. MSG msgVal;
  893. while(PeekMessage(&msgVal, m_hWnd, WM_FILE_END, WM_FILE_END, PM_REMOVE));
  894. if(m_bRepeatPlay)
  895. {
  896. TRACE("Process message %d\n", lParam);
  897. GotoStart();
  898. }
  899. if(m_bConvertAVI)
  900. {
  901. Stop();
  902. SetState();
  903. }
  904. }
  905. // when enc changed got this message
  906. void CPlayerDlg::EncChangeMessage(WPARAM wParam, LPARAM lParam)
  907. {
  908. MSG msgVal;
  909. while(PeekMessage(&msgVal,m_hWnd,WM_ENC_CHANGE,WM_ENC_CHANGE,PM_REMOVE));
  910. //if(m_bFullScreen)
  911. //ViewFullScreen();
  912. SetWindowSize();
  913. Sleep(1);
  914. }
  915. void CPlayerDlg::VideoCtrlOK(WPARAM wParam, LPARAM lParam)
  916. {
  917. m_pVideoControl->DestroyWindow();
  918. //if(m_enumState == State_Pause || m_enumState == State_Play)
  919. //m_pMainMenu->EnableMenuItem(IDM_VIDEO_CONTROL, MF_ENABLED);
  920. }
  921. // when u click the OK button on the seeking dialog, got this message
  922. void CPlayerDlg::SeekOk(WPARAM wParam, LPARAM lParam)
  923. {
  924. m_pSeek->DestroyWindow();
  925. //if(m_enumState == State_Pause || m_enumState == State_Play)
  926. //m_pMainMenu->EnableMenuItem(IDM_SEEK,MF_ENABLED);
  927. }
  928. // when u click the OK button on the display dialog, got this message
  929. void CPlayerDlg::DisplayOk(WPARAM wParam, LPARAM lParam)
  930. {
  931. if (wParam == 0) {
  932. m_ctrlBtnCapPic.EnableWindow(TRUE);
  933. m_ctrlBtnSound.EnableWindow(TRUE);
  934. m_ctrlBtnSlow.EnableWindow(TRUE);
  935. m_ctrlBtnFast.EnableWindow(TRUE);
  936. m_ctrlBtnGStart.EnableWindow(TRUE);
  937. m_ctrlBtnGEnd.EnableWindow(TRUE);
  938. m_ctrlBtnStop.EnableWindow(TRUE);
  939. m_ctrlBtnPlay.EnableWindow(TRUE);
  940. m_ctrlBtnPause.EnableWindow(TRUE);
  941. m_ctrlStepBackward.EnableWindow(TRUE);
  942. m_ctrlStepForward.EnableWindow(TRUE);
  943. //m_pMainMenu->EnableMenuItem(2, MF_ENABLED|MF_BYPOSITION);
  944. Play();
  945. SetState();
  946. }
  947. if (wParam == 1) {
  948. Pause();
  949. SetState();
  950. }
  951. }
  952. /*************************************************************************/
  953. /*************************************************************************/
  954. /*************************************************************************/
  955. /* user defined message handle over
  956. /*************************************************************************/
  957. /*************************************************************************/
  958. /*************************************************************************/
  959. /*************************************************************************/
  960. /*************************************************************************/
  961. /*************************************************************************/
  962. /* callback function begin
  963. /*************************************************************************/
  964. /*************************************************************************/
  965. /*************************************************************************/
  966. // Function:The call back funtion for capture image!
  967. void CALLBACK DisplayCBFun(long nPort,\
  968. char * pBuf,long nSize,\
  969. long nWidth,long nHeight,\
  970. long nStamp,long nType,long nReceaved)
  971. {
  972. }
  973. // Function: The dec call back funtion.
  974. void CALLBACK DecCBFun(long nPort,char * pBuf,long nSize,
  975. FRAME_INFO * pFrameInfo,
  976. long nUser,long nReserved2)
  977. {
  978. TRACE("nPort=%d, TYPE=%d; Width=%d; Height=%d\n", nPort, pFrameInfo->nType, pFrameInfo->nWidth, pFrameInfo->nHeight);
  979. if ( pFrameInfo->nType == T_YV12 )
  980. {
  981. if(g_classAVI.IsWriteAVIHdr())
  982. {
  983. g_classAVI.SetFPS(pFrameInfo->nFrameRate);
  984. g_classAVI.WriteHeaders();
  985. }
  986. g_classAVI.AddFileToAVI(pBuf, nSize);
  987. if(g_classAVI.IsExceedMaxFileLen())
  988. {
  989. SendMessage(AfxGetApp()->GetMainWnd()->m_hWnd,WM_FILE_END,PORT,0);
  990. }
  991. }
  992. Sleep(1);
  993. }
  994. // Funtion:The source buffer call back funtion.
  995. void CALLBACK SourceBufFun(long nPort,DWORD nBufSize,DWORD dwUser,void*pContext)
  996. {
  997. CPlayerDlg* pOwner = (CPlayerDlg*)dwUser;
  998. // do after play!
  999. if( (pOwner->m_enumState == State_Close) || (pOwner->m_enumState == State_Stop) )
  1000. return ;
  1001. NAME(PlayM4_ResetSourceBufFlag)(nPort);
  1002. if(pOwner->m_bFileEnd)
  1003. {
  1004. PostMessage(pOwner->m_hWnd, WM_FILE_END, PORT, 0);
  1005. pOwner->m_bFileEnd = FALSE;
  1006. }
  1007. else
  1008. SetEvent(pOwner->m_hEventInput);
  1009. }
  1010. // Functon:File reference call back function.
  1011. void CALLBACK FileRefDone(DWORD nReserved,DWORD nUser)
  1012. {
  1013. CPlayerDlg* pOwner = (CPlayerDlg*)nUser;
  1014. pOwner->m_bFileRefCreated = TRUE;
  1015. //pOwner->m_pMainMenu->EnableMenuItem(IDM_CUT_FILE,MF_ENABLED);
  1016. //pOwner->m_pMainMenu->EnableMenuItem(IDM_SEEK,MF_ENABLED);
  1017. TRACE("File reference created!\n");
  1018. }
  1019. // Functon:File Verify call back function.
  1020. /*
  1021. void CALLBACK VerifyFun(long nPort, FRAME_POS * pFilePos, DWORD bIsVideo, DWORD nUser)
  1022. {
  1023. // TRACE("File have been changed at: pos = 0x%X; time(s) = %d, frameNum = %d; IsVideo = %d\n",
  1024. // pFilePos->nFilePos, pFilePos->nFrameTime/1000, pFilePos->nFrameNum, bIsVideo);
  1025. CString abstime;
  1026. CString str;
  1027. if (pFilePos->pErrorTime )
  1028. {
  1029. abstime.Format("%02d-%02d-%02d %02d:%02d:%02d",pFilePos->pErrorTime->wYear, pFilePos->pErrorTime->wMonth,
  1030. pFilePos->pErrorTime->wDay, pFilePos->pErrorTime->wHour, pFilePos->pErrorTime->wMinute, pFilePos->pErrorTime->wSecond);
  1031. }
  1032. str.Format("file error at pos=0x%X, time(s) =%d,frameNum=%d,isVideo=%d, \
  1033. errorframe at%d,lostframe=%d,lostdata=%d,time=%s\n", \
  1034. pFilePos->nFilePos, pFilePos->nFrameTime/1000, pFilePos->nFrameNum, bIsVideo, \
  1035. pFilePos->nErrorFrameNum, pFilePos->nErrorLostFrameNum, pFilePos->nErrorFrameSize, abstime);
  1036. TRACE(str);
  1037. }
  1038. */
  1039. // Functon:Wave data call back function.
  1040. void CALLBACK WaveCBFun(long nPort, char * pAudioBuf, long nSize, long nStamp, long nType, long nUser)
  1041. {
  1042. //TRACE("Wave data, nPort = %d, nSize = %d, nStamp = %d, nType = %d\n", nPort, nSize, nStamp, nType);
  1043. }
  1044. /*************************************************************************/
  1045. /*************************************************************************/
  1046. /*************************************************************************/
  1047. /* callback function begin
  1048. /*************************************************************************/
  1049. /*************************************************************************/
  1050. /*************************************************************************/
  1051. ///////////////////////////////////////////////////////////////////////
  1052. // Function: input stream thread.
  1053. ////////////////////////////////////////////////////////////////////////
  1054. #define BUF_SIZE 4096
  1055. DWORD WINAPI InputStreamThread( LPVOID lpParameter)
  1056. {
  1057. CPlayerDlg* pOwner = (CPlayerDlg*)lpParameter;
  1058. HANDLE hMulEvents[2];
  1059. hMulEvents[0] = pOwner->m_hEventKill;
  1060. hMulEvents[1] = pOwner->m_hEventInput;
  1061. BYTE pBuf[BUF_SIZE];
  1062. DWORD nRealRead;
  1063. BOOL bBufFull = FALSE;
  1064. while(WAIT_OBJECT_0 != WaitForMultipleObjects(2, hMulEvents, FALSE, INFINITE))
  1065. {
  1066. if(!bBufFull)
  1067. {
  1068. // TRACE("Read file and put it input into the stream buffer.\n");
  1069. if(!(ReadFile(pOwner->m_hStreamFile, pBuf, BUF_SIZE, &nRealRead, NULL) && (nRealRead == BUF_SIZE)))
  1070. {
  1071. //File end;
  1072. pOwner->m_bFileEnd = TRUE;
  1073. bBufFull = FALSE;
  1074. ResetEvent(pOwner->m_hEventInput);
  1075. }
  1076. }
  1077. if(!NAME(PlayM4_InputData)(PORT, pBuf, BUF_SIZE))
  1078. {
  1079. bBufFull = TRUE;
  1080. ResetEvent(pOwner->m_hEventInput);
  1081. }
  1082. else
  1083. bBufFull = FALSE;
  1084. }
  1085. return 1;
  1086. }
  1087. /*************************************************************************/
  1088. /*************************************************************************/
  1089. /*************************************************************************/
  1090. /* assistant operation begin
  1091. /*************************************************************************/
  1092. /*************************************************************************/
  1093. /*************************************************************************/
  1094. // open/close file or stream
  1095. // browse file and get the file path
  1096. BOOL CPlayerDlg::BrowseFile(CString *strFileName)
  1097. {
  1098. #ifdef _FOR_HIKPLAYM4_DLL_
  1099. CFileDialog dlg(TRUE,
  1100. "mpg",
  1101. NULL,
  1102. OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
  1103. "Hikvision文件(*.mp4;*.264)|*.mp4;*.264|所有文件(*.*)|*.*||", this);
  1104. #else
  1105. CFileDialog dlg(TRUE,
  1106. "mpg",
  1107. NULL,
  1108. OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
  1109. "文件(*.mp4;*.264)|*.mp4;*.264|所有文件(*.*)|*.*||", this);
  1110. #endif
  1111. if(dlg.DoModal() == IDCANCEL)
  1112. {
  1113. return FALSE;
  1114. }
  1115. *strFileName = dlg.GetPathName();
  1116. return TRUE;
  1117. }
  1118. // open file and play
  1119. void CPlayerDlg::OpenFile()
  1120. {
  1121. CString csError;
  1122. TRACE("Open FileName Is: %s", m_strPlayFileName);
  1123. NAME(PlayM4_SetFileRefCallBack)(PORT, FileRefDone, (DWORD)this);
  1124. // NAME(PlayM4_SetVerifyCallBack)(PORT, 0, 0xffffffff, VerifyFun, (DWORD) this); // verify the whole file;
  1125. if(!NAME(PlayM4_OpenFile)(PORT, m_strPlayFileName.GetBuffer(m_strPlayFileName.GetLength())))
  1126. {
  1127. m_strPlayFileName = _T("");
  1128. csError.Format("Open file failed(%d)",NAME(PlayM4_GetLastError)(PORT));
  1129. MessageBox(csError);
  1130. throw 0;
  1131. }
  1132. // try overlay mode!
  1133. //NAME(PlayM4_SetOverlayMode)(PORT, TRUE, RGB(255,0,255));
  1134. // try flip overlay mode
  1135. // NAME(PlayM4_SetOverlayFlipMode)(PORT, TRUE);
  1136. m_dwMaxFileTime = NAME(PlayM4_GetFileTime)(PORT);
  1137. if(!m_dwMaxFileTime)
  1138. {
  1139. csError.Format("File seconds is zero");
  1140. MessageBox(csError);
  1141. throw 0;
  1142. }
  1143. m_dwDisplayHour = m_dwMaxFileTime/3600;
  1144. m_dwDisplayMinute = (m_dwMaxFileTime % 3600) / 60;
  1145. m_dwDisplaySecond = m_dwMaxFileTime % 60;
  1146. m_dwTotalFrames = NAME(PlayM4_GetFileTotalFrames)(PORT);
  1147. //if(m_bConvertAVI)
  1148. //{
  1149. // AVI_CONVERT_PARA strParam;
  1150. // long dwHeight, dwWidth;
  1151. // NAME(PlayM4_GetPictureSize)(PORT, &dwWidth, &dwHeight);
  1152. // strParam.dwFrameWidth = MOD16(dwWidth);
  1153. // strParam.dwFrameHeight = MOD16(dwHeight);
  1154. // strParam.dwFrameSize = strParam.dwFrameWidth * strParam.dwFrameHeight *3/2;
  1155. // strParam.dwTotalFrames = m_dwTotalFrames;
  1156. // BOOL bInitAVI = g_classAVI.InitResource(&strParam, m_strSaveAVIPath);
  1157. // if(!bInitAVI)
  1158. // {
  1159. // csError.Format("Init AVI Resource failed!");
  1160. // MessageBox(csError);
  1161. // g_classAVI.ReleaseResource();
  1162. // m_bConvertAVI = FALSE;
  1163. // }
  1164. //}
  1165. // If you want to change the display buffer. Do hear!
  1166. // NAME(PlayM4_SetDisplayBuf)(PORT,25);
  1167. Play();
  1168. SetWindowText((LPCTSTR) m_strPlayFileName);
  1169. }
  1170. // close file
  1171. void CPlayerDlg::CloseFile()
  1172. {
  1173. if (m_pDisplayRegion->m_bValid)
  1174. {
  1175. m_pDisplayRegion->DestroyWindow();
  1176. //m_pMainMenu->EnableMenuItem(2, MF_ENABLED|MF_BYPOSITION);
  1177. //m_pMainMenu->EnableMenuItem(IDM_SETDISPLAY, MF_ENABLED);
  1178. }
  1179. Stop();
  1180. NAME(PlayM4_CloseFile)(PORT);
  1181. m_enumState = State_Close;
  1182. m_bOpen = FALSE;
  1183. m_bFileRefCreated = FALSE;
  1184. }
  1185. // Funtion: Open the file by stream type and play it
  1186. void CPlayerDlg::OpenStream()
  1187. {
  1188. m_dwDisplayHour = 0;
  1189. m_dwDisplayMinute = 0;
  1190. m_dwDisplaySecond = 0;
  1191. m_dwTotalFrames = 0;
  1192. m_bFileEnd = FALSE;
  1193. m_hStreamFile = CreateFile(m_strPlayFileName,
  1194. GENERIC_READ,
  1195. FILE_SHARE_READ,
  1196. NULL,
  1197. OPEN_EXISTING,
  1198. FILE_ATTRIBUTE_NORMAL,
  1199. NULL);
  1200. if(m_hStreamFile == INVALID_HANDLE_VALUE)
  1201. {
  1202. MessageBox("Open file failed");
  1203. throw 0;
  1204. }
  1205. m_dwMaxFileSize = ::GetFileSize(m_hStreamFile, NULL);
  1206. NAME(PlayM4_SetSourceBufCallBack)(PORT, 10000, SourceBufFun, (DWORD)this, NULL);
  1207. NAME(PlayM4_SetStreamOpenMode)(PORT, STREAME_FILE);
  1208. m_dwHeadSize = NAME(PlayM4_GetFileHeadLength)();
  1209. PBYTE pBuf = NULL;
  1210. char csError[50];
  1211. DWORD dw;
  1212. m_hThread = NULL;
  1213. m_hEventInput = NULL;
  1214. m_hEventKill = NULL;
  1215. m_hThread = CreateThread(NULL,0, LPTHREAD_START_ROUTINE (InputStreamThread),this,0,&dw);
  1216. m_hEventInput = CreateEvent(NULL,TRUE,FALSE,NULL);
  1217. m_hEventKill = CreateEvent(NULL,FALSE,FALSE,NULL);
  1218. if( !(m_hThread&&m_hEventInput&&m_hEventKill) )
  1219. {
  1220. MessageBox("Create thread failed");
  1221. throw 0;
  1222. }
  1223. pBuf = new BYTE[m_dwHeadSize];
  1224. if(!pBuf)
  1225. {
  1226. MessageBox("Alloc memory failed");
  1227. throw 0;
  1228. }
  1229. DWORD nRealRead;
  1230. ReadFile(m_hStreamFile, pBuf, m_dwHeadSize, &nRealRead, NULL);
  1231. if(nRealRead != m_dwHeadSize)
  1232. {
  1233. MessageBox("File is too small");
  1234. delete []pBuf;
  1235. pBuf = NULL;
  1236. throw 0;
  1237. }
  1238. if(!NAME(PlayM4_OpenStream)(PORT, pBuf, m_dwHeadSize, 200000))
  1239. {
  1240. sprintf(csError, "Open stream failed(%d)", NAME(PlayM4_GetLastError)(PORT));
  1241. MessageBox(csError);
  1242. delete []pBuf;
  1243. pBuf = NULL;
  1244. throw 0;
  1245. }
  1246. // try overlay mode!
  1247. NAME(PlayM4_SetOverlayMode)(PORT, TRUE, RGB(255,0,255));
  1248. // try flip overlay mode
  1249. // NAME(PlayM4_SetOverlayFlipMode)(PORT, TRUE);
  1250. Play();
  1251. }
  1252. // Function:Close the stream.
  1253. void CPlayerDlg::CloseStream()
  1254. {
  1255. Stop();
  1256. NAME(PlayM4_CloseStream)(PORT);
  1257. if(m_hStreamFile)
  1258. {
  1259. CloseHandle(m_hStreamFile);
  1260. m_hStreamFile = NULL;
  1261. }
  1262. if(m_hThread)
  1263. {
  1264. SetEvent(m_hEventKill);
  1265. DWORD dwStatus;
  1266. for(int i = 0; i < 5; i++)
  1267. {
  1268. if(!::GetExitCodeThread(m_hThread, &dwStatus)|| (i == 4) )
  1269. {
  1270. TerminateThread(m_hThread, 0);
  1271. TRACE("GetExitCode option error!-decodethread\n");
  1272. }
  1273. else
  1274. {
  1275. if(dwStatus == STILL_ACTIVE)
  1276. {
  1277. SetEvent(m_hEventKill);
  1278. Sleep(2);
  1279. }
  1280. else
  1281. break;
  1282. }
  1283. }
  1284. CloseHandle(m_hThread);
  1285. m_hThread = NULL;
  1286. }
  1287. if(m_hEventInput)
  1288. {
  1289. CloseHandle(m_hEventInput);
  1290. m_hEventInput = NULL;
  1291. }
  1292. if(m_hEventKill)
  1293. {
  1294. CloseHandle(m_hEventKill);
  1295. m_hEventKill = NULL;
  1296. }
  1297. m_enumState = State_Close;
  1298. m_bOpen = FALSE;
  1299. m_bFileRefCreated = FALSE;
  1300. }
  1301. // set play state
  1302. // Funtion: Draw the status .
  1303. void CPlayerDlg::DrawStatus()
  1304. {
  1305. DWORD nCurrentTime = NAME(PlayM4_GetPlayedTime)(PORT);
  1306. //TRACE("Get time is:%d\n",nCurrentTime);
  1307. DWORD nHour = (nCurrentTime / 3600) % 24;
  1308. DWORD nMinute = (nCurrentTime % 3600) / 60;
  1309. DWORD nSecond = nCurrentTime % 60;
  1310. int nPos = 0;
  1311. if(m_bStreamType)
  1312. {
  1313. DWORD nFilePos = SetFilePointer(m_hStreamFile, 0, 0, FILE_CURRENT);
  1314. nPos = nFilePos * PLAYER_SLIDER_MAX / m_dwMaxFileSize;
  1315. }
  1316. else
  1317. {
  1318. #ifdef _FILE_POS
  1319. float fPos = NAME(PlayM4_GetPlayPos)(PORT);
  1320. nPos = int(fPos * PLAYER_SLIDER_MAX);
  1321. #else
  1322. if( m_dwMaxFileTime>0 )
  1323. nPos = nCurrentTime * PLAYER_SLIDER_MAX / m_dwMaxFileTime;
  1324. #endif
  1325. }
  1326. DWORD nCurrentFrame = NAME(PlayM4_GetCurrentFrameNum)(PORT);
  1327. TRACE("nCurrentFrame %d----------nCurrentTime %d--------------\n", nCurrentFrame, nCurrentTime);
  1328. if(m_nSpeed > 0)
  1329. m_strPlayStateText.Format("速度 X %d %d/%d %02d:%02d:%02d/%02d:%02d:%02d", GetSpeedModulus(), nCurrentFrame, m_dwTotalFrames, nHour, nMinute, nSecond, m_dwDisplayHour,m_dwDisplayMinute,m_dwDisplaySecond);
  1330. else if(m_nSpeed == 0)
  1331. m_strPlayStateText.Format("正常速度 %d/%d %02d:%02d:%02d/%02d:%02d:%02d", nCurrentFrame, m_dwTotalFrames, nHour, nMinute, nSecond, m_dwDisplayHour,m_dwDisplayMinute,m_dwDisplaySecond);
  1332. else
  1333. m_strPlayStateText.Format("速度 / %d %d/%d %02d:%02d:%02d/%02d:%02d:%02d", GetSpeedModulus(), nCurrentFrame, m_dwTotalFrames, nHour, nMinute, nSecond, m_dwDisplayHour,m_dwDisplayMinute,m_dwDisplaySecond);
  1334. if(m_bConvertAVI)
  1335. m_strPlayStateText.Format("Converting…… %d/%d %02d:%02d:%02d/%02d:%02d:%02d", nCurrentFrame, m_dwTotalFrames, nHour, nMinute, nSecond, m_dwDisplayHour, m_dwDisplayMinute, m_dwDisplaySecond);
  1336. m_ctrlPlayText.ShowText(m_strPlayStateText);
  1337. if(m_nPrePlayPos == nPos)
  1338. return;
  1339. //adjust the slider.
  1340. INT nAdjust = (m_nPrePlayPos < nPos) ? 1 : 0;
  1341. m_PlaySlider.SetScrollPos(nPos + nAdjust);
  1342. m_nPrePlayPos = nPos;
  1343. // test
  1344. // TRACE("Current frame rate:%d\n",NAME(PlayM4_GetCurrentFrameRate)(PORT));
  1345. // TRACE("Current time use ms:%d\n",NAME(PlayM4_GetPlayedTimeEx)(PORT));
  1346. }
  1347. // set state
  1348. void CPlayerDlg::SetState()
  1349. {
  1350. //return;
  1351. int i;
  1352. switch(m_enumState)
  1353. {
  1354. case State_Close:
  1355. // button state
  1356. m_ctrlBtnPlay.SetIcon(IDI_PLAY_DISABLE);
  1357. m_ctrlBtnPlay.EnableWindow(FALSE);
  1358. m_ctrlBtnPlay.SetCheck(0);
  1359. m_ctrlBtnPause.SetIcon(IDI_PAUSE_DISABLE);
  1360. m_ctrlBtnPause.EnableWindow(FALSE);
  1361. m_ctrlBtnPause.SetCheck(0);
  1362. m_ctrlBtnStop.SetIcon(IDI_STOP_DISABLE);
  1363. m_ctrlBtnStop.EnableWindow(FALSE);
  1364. m_ctrlBtnStop.SetCheck(0);
  1365. m_ctrlBtnGStart.SetIcon(IDI_GOTOSTART_DISABLE);
  1366. m_ctrlBtnGStart.EnableWindow(FALSE);
  1367. m_ctrlBtnSlow.SetIcon(IDI_FASTBACKWARD_DISABLE);
  1368. m_ctrlBtnSlow.EnableWindow(FALSE);
  1369. m_ctrlBtnFast.SetIcon(IDI_FASTFORWARD_DISABLE);
  1370. m_ctrlBtnFast.EnableWindow(FALSE);
  1371. m_ctrlBtnGEnd.SetIcon(IDI_GOTOEND_DISABLE);
  1372. m_ctrlBtnGEnd.EnableWindow(FALSE);
  1373. m_ctrlStepBackward.SetIcon(IDI_STEPBACKWARD_DISABLE);
  1374. m_ctrlStepBackward.EnableWindow(FALSE);
  1375. m_ctrlStepForward.SetIcon(IDI_STEPFORWARD_DISABLE);
  1376. m_ctrlStepForward.EnableWindow(FALSE);
  1377. m_ctrlBtnCapPic.SetIcon(IDI_CAPPIC_DISABLE);
  1378. m_ctrlBtnCapPic.EnableWindow(FALSE);
  1379. m_ctrlBtnSound.SetIcon(IDI_SOUND_DISABLE);
  1380. m_ctrlBtnSound.EnableWindow(FALSE);
  1381. // menu state
  1382. //m_pMainMenu->EnableMenuItem(IDM_FILE_CLOSE, MF_GRAYED | MF_DISABLED);
  1383. //m_pMainMenu->EnableMenuItem(IDM_CUT_FILE, MF_GRAYED | MF_DISABLED);
  1384. //for(i = 0; i < 3; i++)
  1385. //{
  1386. // m_pMainMenu->CheckMenuItem(IDM_VIEW_ZOOM_50 + i, MF_UNCHECKED);
  1387. //}
  1388. //m_pMainMenu->CheckMenuItem(IDM_VIEW_ZOOM_100, MF_CHECKED);
  1389. //m_pMainMenu->GetSubMenu(1)->EnableMenuItem(1, MF_DISABLED|MF_GRAYED|MF_BYPOSITION);
  1390. //m_pMainMenu->EnableMenuItem(IDM_VIEW_FULLSCREEN, MF_GRAYED | MF_DISABLED);
  1391. //m_pMainMenu->EnableMenuItem(IDM_INFO, MF_GRAYED | MF_DISABLED);
  1392. //m_pMainMenu->EnableMenuItem(IDM_SETDISPLAY, MF_GRAYED | MF_DISABLED);
  1393. //m_pMainMenu->EnableMenuItem(IDM_SEEK, MF_GRAYED | MF_DISABLED);
  1394. //m_pMainMenu->EnableMenuItem(IDM_VIDEO_CONTROL, MF_GRAYED | MF_DISABLED);
  1395. //m_pMainMenu->EnableMenuItem(IDM_PLAY_PAUSE, MF_GRAYED | MF_DISABLED);
  1396. //m_pMainMenu->EnableMenuItem(IDM_STOP, MF_GRAYED | MF_DISABLED);
  1397. //m_pMainMenu->EnableMenuItem(IDM_GOTOEND, MF_GRAYED | MF_DISABLED);
  1398. //m_pMainMenu->EnableMenuItem(IDM_GOTOSTART, MF_GRAYED | MF_DISABLED);
  1399. //m_pMainMenu->EnableMenuItem(IDM_STEPBACKWARD, MF_GRAYED | MF_DISABLED);
  1400. //m_pMainMenu->EnableMenuItem(IDM_STEPFORWARD, MF_GRAYED | MF_DISABLED);
  1401. //m_pMainMenu->EnableMenuItem(IDM_PREVIEW50, MF_ENABLED);
  1402. //if(m_bHighFluid)
  1403. // m_pMainMenu->CheckMenuItem(IDM_PREVIEW50, MF_CHECKED);
  1404. //else
  1405. // m_pMainMenu->CheckMenuItem(IDM_PREVIEW50, MF_UNCHECKED);
  1406. //m_pMainMenu->EnableMenuItem(IDM_STREAM_TYPE, MF_ENABLED);
  1407. //for(i=0; i<2; i++)
  1408. //{
  1409. // m_pMainMenu->CheckMenuItem(IDM_TIMER1 + i, MF_UNCHECKED);
  1410. //}
  1411. //m_pMainMenu->CheckMenuItem(IDM_TIMER1, MF_CHECKED);
  1412. //m_pMainMenu->GetSubMenu(3)->EnableMenuItem(7, MF_ENABLED|MF_BYPOSITION);
  1413. // scroll state
  1414. m_PlaySlider.SetScrollPos(0);
  1415. m_PlaySlider.EnableWindow(FALSE);
  1416. #ifdef _WAVE_ADJ
  1417. m_SoundSlider.SetPos(0);
  1418. #else
  1419. m_SoundSlider.SetPos(0xffff>>1);
  1420. #endif
  1421. m_SoundSlider.EnableWindow(FALSE);
  1422. if((HBITMAP)m_HikvisionBmp != m_ctrlVideoPic.GetBitmap())
  1423. m_ctrlVideoPic.SetBitmap(m_HikvisionBmp);
  1424. //InitWindowSize(WIDTH,HEIGHT_PAL);
  1425. break;
  1426. case State_Play:
  1427. m_ctrlBtnPlay.SetIcon(IDI_PLAY_CHECK);
  1428. m_ctrlBtnPlay.EnableWindow(TRUE);
  1429. m_ctrlBtnPlay.SetCheck(1);
  1430. m_ctrlBtnPause.SetIcon(IDI_PAUSE_ENABLE);
  1431. m_ctrlBtnPause.EnableWindow(TRUE);
  1432. m_ctrlBtnPause.SetCheck(0);
  1433. m_ctrlBtnStop.SetIcon(IDI_STOP_ENABLE);
  1434. m_ctrlBtnStop.EnableWindow(TRUE);
  1435. m_ctrlBtnStop.SetCheck(0);
  1436. if(m_bStreamType)
  1437. {
  1438. m_ctrlBtnGStart.SetIcon(IDI_GOTOSTART_DISABLE);
  1439. m_ctrlBtnGStart.EnableWindow(FALSE);
  1440. m_ctrlBtnGEnd.SetIcon(IDI_GOTOEND_DISABLE);
  1441. m_ctrlBtnGEnd.EnableWindow(FALSE);
  1442. m_ctrlStepBackward.SetIcon(IDI_STEPBACKWARD_DISABLE);
  1443. m_ctrlStepBackward.EnableWindow(FALSE);
  1444. }
  1445. else
  1446. {
  1447. m_ctrlBtnGStart.SetIcon(IDI_GOTOSTART_ENABLE);
  1448. m_ctrlBtnGStart.EnableWindow(TRUE);
  1449. m_ctrlBtnGEnd.SetIcon(IDI_GOTOEND_ENABLE);
  1450. m_ctrlBtnGEnd.EnableWindow(TRUE);
  1451. m_ctrlStepBackward.SetIcon(IDI_STEPBACKWARD_ENABLE);
  1452. m_ctrlStepBackward.EnableWindow(TRUE);
  1453. }
  1454. m_ctrlBtnSlow.SetIcon(IDI_FASTBACKWARD_ENABLE);
  1455. m_ctrlBtnSlow.EnableWindow(TRUE);
  1456. m_ctrlBtnFast.SetIcon(IDI_FASTFORWARD_ENABLE);
  1457. m_ctrlBtnFast.EnableWindow(TRUE);
  1458. m_ctrlStepForward.SetIcon(IDI_STEPFORWARD_ENABLE);
  1459. m_ctrlStepForward.EnableWindow(TRUE);
  1460. m_ctrlBtnCapPic.SetIcon(IDI_CAPPIC_AT, IDI_CAPPIC_ENABLE);
  1461. m_ctrlBtnCapPic.EnableWindow(TRUE);
  1462. m_ctrlBtnSound.EnableWindow(TRUE);
  1463. if(m_bSound)
  1464. m_ctrlBtnSound.SetIcon(IDI_SOUND_ENABLE);
  1465. else
  1466. m_ctrlBtnSound.SetIcon(IDI_SOUND_DISABLE);
  1467. // menu state
  1468. //m_pMainMenu->EnableMenuItem(IDM_FILE_CLOSE, MF_ENABLED);
  1469. //if(m_bFileRefCreated)
  1470. //{
  1471. // m_pMainMenu->EnableMenuItem(IDM_CUT_FILE, MF_ENABLED);
  1472. // m_pMainMenu->EnableMenuItem(IDM_SEEK, MF_ENABLED);
  1473. //}
  1474. //else
  1475. //{
  1476. // m_pMainMenu->EnableMenuItem(IDM_CUT_FILE, MF_GRAYED | MF_DISABLED);
  1477. // m_pMainMenu->EnableMenuItem(IDM_SEEK, MF_GRAYED | MF_DISABLED);
  1478. //}
  1479. //m_pMainMenu->GetSubMenu(1)->EnableMenuItem(1, MF_ENABLED | MF_BYPOSITION);
  1480. //m_pMainMenu->EnableMenuItem(IDM_VIEW_FULLSCREEN, MF_ENABLED);
  1481. //m_pMainMenu->EnableMenuItem(IDM_INFO, MF_ENABLED);
  1482. //m_pMainMenu->EnableMenuItem(IDM_SETDISPLAY, MF_ENABLED);
  1483. //
  1484. //m_pMainMenu->EnableMenuItem(IDM_VIDEO_CONTROL, MF_ENABLED);
  1485. //m_pMainMenu->EnableMenuItem(IDM_PLAY_PAUSE, MF_ENABLED);
  1486. //m_pMainMenu->EnableMenuItem(IDM_STOP, MF_ENABLED);
  1487. //m_pMainMenu->EnableMenuItem(IDM_STEPFORWARD, MF_ENABLED);
  1488. //
  1489. //m_pMainMenu->EnableMenuItem(IDM_PREVIEW50, MF_GRAYED | MF_DISABLED);
  1490. //m_pMainMenu->EnableMenuItem(IDM_STREAM_TYPE, MF_GRAYED | MF_DISABLED);
  1491. //m_pMainMenu->GetSubMenu(3)->EnableMenuItem(7, MF_DISABLED|MF_GRAYED|MF_BYPOSITION);
  1492. //if(m_bStreamType)
  1493. //{
  1494. // m_pMainMenu->EnableMenuItem(IDM_GOTOEND, MF_GRAYED | MF_DISABLED);
  1495. // m_pMainMenu->EnableMenuItem(IDM_GOTOSTART, MF_GRAYED | MF_DISABLED);
  1496. // m_pMainMenu->EnableMenuItem(IDM_STEPBACKWARD, MF_GRAYED | MF_DISABLED);
  1497. //}
  1498. //else
  1499. //{
  1500. // m_pMainMenu->EnableMenuItem(IDM_GOTOEND, MF_ENABLED);
  1501. // m_pMainMenu->EnableMenuItem(IDM_GOTOSTART, MF_ENABLED);
  1502. // m_pMainMenu->EnableMenuItem(IDM_STEPBACKWARD, MF_ENABLED);
  1503. //}
  1504. // scroll state
  1505. if(m_bStreamType)
  1506. m_PlaySlider.EnableWindow(FALSE);
  1507. else
  1508. m_PlaySlider.EnableWindow(TRUE);
  1509. m_SoundSlider.EnableWindow(TRUE);
  1510. if((HBITMAP)m_OverlayBmp != m_ctrlVideoPic.GetBitmap())
  1511. m_ctrlVideoPic.SetBitmap(m_OverlayBmp);
  1512. break;
  1513. case State_Pause:
  1514. m_ctrlBtnPlay.SetIcon(IDI_PLAY_ENABLE);
  1515. m_ctrlBtnPlay.EnableWindow(TRUE);
  1516. m_ctrlBtnPlay.SetCheck(0);
  1517. m_ctrlBtnPause.SetIcon(IDI_PAUSE_CHECK);
  1518. m_ctrlBtnPause.EnableWindow(TRUE);
  1519. m_ctrlBtnPause.SetCheck(1);
  1520. m_ctrlBtnStop.SetIcon(IDI_STOP_ENABLE);
  1521. m_ctrlBtnStop.EnableWindow(TRUE);
  1522. m_ctrlBtnStop.SetCheck(0);
  1523. if(m_bStreamType)
  1524. {
  1525. m_ctrlBtnGStart.SetIcon(IDI_GOTOSTART_DISABLE);
  1526. m_ctrlBtnGStart.EnableWindow(FALSE);
  1527. m_ctrlBtnGEnd.SetIcon(IDI_GOTOEND_DISABLE);
  1528. m_ctrlBtnGEnd.EnableWindow(FALSE);
  1529. m_ctrlStepBackward.SetIcon(IDI_STEPBACKWARD_DISABLE);
  1530. m_ctrlStepBackward.EnableWindow(FALSE);
  1531. }
  1532. else
  1533. {
  1534. m_ctrlBtnGStart.SetIcon(IDI_GOTOSTART_ENABLE);
  1535. m_ctrlBtnGStart.EnableWindow(TRUE);
  1536. m_ctrlBtnGEnd.SetIcon(IDI_GOTOEND_ENABLE);
  1537. m_ctrlBtnGEnd.EnableWindow(TRUE);
  1538. m_ctrlStepBackward.SetIcon(IDI_STEPBACKWARD_ENABLE);
  1539. m_ctrlStepBackward.EnableWindow(TRUE);
  1540. }
  1541. m_ctrlBtnSlow.SetIcon(IDI_FASTBACKWARD_ENABLE);
  1542. m_ctrlBtnSlow.EnableWindow(TRUE);
  1543. m_ctrlBtnFast.SetIcon(IDI_FASTFORWARD_ENABLE);
  1544. m_ctrlBtnFast.EnableWindow(TRUE);
  1545. m_ctrlStepForward.SetIcon(IDI_STEPFORWARD_ENABLE);
  1546. m_ctrlStepForward.EnableWindow(TRUE);
  1547. m_ctrlBtnCapPic.SetIcon(IDI_CAPPIC_AT, IDI_CAPPIC_ENABLE);
  1548. m_ctrlBtnCapPic.EnableWindow(TRUE);
  1549. break;
  1550. case State_Stop:
  1551. m_ctrlBtnPlay.SetIcon(IDI_PLAY_ENABLE);
  1552. m_ctrlBtnPlay.EnableWindow(TRUE);
  1553. m_ctrlBtnPlay.SetCheck(0);
  1554. m_ctrlBtnPause.SetIcon(IDI_PAUSE_ENABLE);
  1555. m_ctrlBtnPause.EnableWindow(TRUE);
  1556. m_ctrlBtnPause.SetCheck(0);
  1557. m_ctrlBtnStop.SetIcon(IDI_STOP_CHECK);
  1558. m_ctrlBtnStop.EnableWindow(TRUE);
  1559. m_ctrlBtnStop.SetCheck(1);
  1560. m_ctrlBtnGStart.SetIcon(IDI_GOTOSTART_DISABLE);
  1561. m_ctrlBtnGStart.EnableWindow(FALSE);
  1562. m_ctrlBtnSlow.SetIcon(IDI_FASTBACKWARD_ENABLE);
  1563. m_ctrlBtnSlow.EnableWindow(TRUE);
  1564. m_ctrlBtnFast.SetIcon(IDI_FASTFORWARD_ENABLE);
  1565. m_ctrlBtnFast.EnableWindow(TRUE);
  1566. m_ctrlBtnGEnd.SetIcon(IDI_GOTOEND_DISABLE);
  1567. m_ctrlBtnGEnd.EnableWindow(FALSE);
  1568. m_ctrlStepBackward.SetIcon(IDI_STEPBACKWARD_DISABLE);
  1569. m_ctrlStepBackward.EnableWindow(FALSE);
  1570. m_ctrlStepForward.SetIcon(IDI_STEPFORWARD_DISABLE);
  1571. m_ctrlStepForward.EnableWindow(FALSE);
  1572. m_ctrlBtnCapPic.SetIcon(IDI_CAPPIC_DISABLE);
  1573. m_ctrlBtnCapPic.EnableWindow(FALSE);
  1574. // menu state
  1575. //m_pMainMenu->EnableMenuItem(IDM_FILE_CLOSE, MF_ENABLED);
  1576. //if(m_bFileRefCreated)
  1577. //{
  1578. // m_pMainMenu->EnableMenuItem(IDM_CUT_FILE, MF_ENABLED);
  1579. // m_pMainMenu->EnableMenuItem(IDM_SEEK, MF_ENABLED);
  1580. //}
  1581. //else
  1582. //{
  1583. // m_pMainMenu->EnableMenuItem(IDM_CUT_FILE, MF_DISABLED);
  1584. // m_pMainMenu->EnableMenuItem(IDM_SEEK, MF_DISABLED);
  1585. //}
  1586. //m_pMainMenu->GetSubMenu(1)->EnableMenuItem(1, MF_DISABLED|MF_GRAYED|MF_BYPOSITION);
  1587. //m_pMainMenu->EnableMenuItem(IDM_VIEW_FULLSCREEN, MF_GRAYED | MF_DISABLED);
  1588. //m_pMainMenu->EnableMenuItem(IDM_INFO, MF_GRAYED | MF_DISABLED);
  1589. //m_pMainMenu->EnableMenuItem(IDM_SETDISPLAY, MF_GRAYED | MF_DISABLED);
  1590. //m_pMainMenu->EnableMenuItem(IDM_SEEK, MF_GRAYED | MF_DISABLED);
  1591. //m_pMainMenu->EnableMenuItem(IDM_VIDEO_CONTROL, MF_GRAYED | MF_DISABLED);
  1592. //m_pMainMenu->EnableMenuItem(IDM_PLAY_PAUSE, MF_ENABLED);
  1593. //m_pMainMenu->EnableMenuItem(IDM_STOP, MF_GRAYED | MF_DISABLED);
  1594. //m_pMainMenu->EnableMenuItem(IDM_GOTOEND, MF_GRAYED | MF_DISABLED);
  1595. //m_pMainMenu->EnableMenuItem(IDM_GOTOSTART, MF_GRAYED | MF_DISABLED);
  1596. //m_pMainMenu->EnableMenuItem(IDM_STEPBACKWARD, MF_GRAYED | MF_DISABLED);
  1597. //m_pMainMenu->EnableMenuItem(IDM_STEPFORWARD, MF_GRAYED | MF_DISABLED);
  1598. //
  1599. //m_pMainMenu->EnableMenuItem(IDM_PREVIEW50, MF_ENABLED);
  1600. //m_pMainMenu->EnableMenuItem(IDM_STREAM_TYPE, MF_GRAYED | MF_DISABLED);
  1601. //m_pMainMenu->GetSubMenu(3)->EnableMenuItem(7, MF_DISABLED|MF_GRAYED|MF_BYPOSITION);
  1602. // scroll state
  1603. m_PlaySlider.SetScrollPos(0);
  1604. m_PlaySlider.EnableWindow(FALSE);
  1605. #ifdef _WAVE_ADJ
  1606. m_SoundSlider.SetPos(0);
  1607. #else
  1608. m_SoundSlider.SetPos(0xffff>>1);
  1609. #endif
  1610. m_SoundSlider.EnableWindow(FALSE);
  1611. if((HBITMAP)m_HikvisionBmp != m_ctrlVideoPic.GetBitmap())
  1612. m_ctrlVideoPic.SetBitmap(m_HikvisionBmp);
  1613. break;
  1614. default:
  1615. break;
  1616. }
  1617. SortControl();
  1618. UpdateData(FALSE);
  1619. NAME(PlayM4_RefreshPlay)(PORT);
  1620. }
  1621. // set avi state
  1622. void CPlayerDlg::SetAVIState()
  1623. {
  1624. // button state
  1625. m_ctrlBtnPlay.SetIcon(IDI_PLAY_DISABLE);
  1626. m_ctrlBtnPlay.EnableWindow(FALSE);
  1627. m_ctrlBtnPlay.SetCheck(0);
  1628. m_ctrlBtnPause.SetIcon(IDI_PAUSE_DISABLE);
  1629. m_ctrlBtnPause.EnableWindow(FALSE);
  1630. m_ctrlBtnPause.SetCheck(0);
  1631. m_ctrlBtnStop.SetIcon(IDI_STOP_ENABLE);
  1632. m_ctrlBtnStop.EnableWindow(TRUE);
  1633. m_ctrlBtnStop.SetCheck(0);
  1634. m_ctrlBtnGStart.SetIcon(IDI_GOTOSTART_DISABLE);
  1635. m_ctrlBtnGStart.EnableWindow(FALSE);
  1636. m_ctrlBtnSlow.SetIcon(IDI_FASTBACKWARD_DISABLE);
  1637. m_ctrlBtnSlow.EnableWindow(FALSE);
  1638. m_ctrlBtnFast.SetIcon(IDI_FASTFORWARD_DISABLE);
  1639. m_ctrlBtnFast.EnableWindow(FALSE);
  1640. m_ctrlBtnGEnd.SetIcon(IDI_GOTOEND_DISABLE);
  1641. m_ctrlBtnGEnd.EnableWindow(FALSE);
  1642. m_ctrlStepBackward.SetIcon(IDI_STEPBACKWARD_DISABLE);
  1643. m_ctrlStepBackward.EnableWindow(FALSE);
  1644. m_ctrlStepForward.SetIcon(IDI_STEPFORWARD_DISABLE);
  1645. m_ctrlStepForward.EnableWindow(FALSE);
  1646. m_ctrlBtnCapPic.SetIcon(IDI_CAPPIC_DISABLE);
  1647. m_ctrlBtnCapPic.EnableWindow(FALSE);
  1648. m_ctrlBtnSound.SetIcon(IDI_SOUND_DISABLE);
  1649. m_ctrlBtnSound.EnableWindow(FALSE);
  1650. // menu state
  1651. //m_pMainMenu->EnableMenuItem(IDM_FILE_CLOSE, MF_ENABLED);
  1652. //m_pMainMenu->EnableMenuItem(IDM_CUT_FILE, MF_GRAYED | MF_DISABLED);
  1653. //m_pMainMenu->GetSubMenu(1)->EnableMenuItem(1, MF_DISABLED | MF_GRAYED | MF_BYPOSITION);
  1654. //m_pMainMenu->EnableMenuItem(IDM_VIEW_FULLSCREEN, MF_GRAYED | MF_DISABLED);
  1655. //m_pMainMenu->EnableMenuItem(IDM_INFO, MF_GRAYED | MF_DISABLED);
  1656. //m_pMainMenu->EnableMenuItem(IDM_SETDISPLAY, MF_GRAYED | MF_DISABLED);
  1657. //m_pMainMenu->EnableMenuItem(IDM_SEEK, MF_GRAYED | MF_DISABLED);
  1658. //m_pMainMenu->EnableMenuItem(IDM_VIDEO_CONTROL, MF_GRAYED | MF_DISABLED);
  1659. //m_pMainMenu->EnableMenuItem(IDM_PLAY_PAUSE, MF_GRAYED | MF_DISABLED);
  1660. //m_pMainMenu->EnableMenuItem(IDM_STOP, MF_ENABLED);
  1661. //m_pMainMenu->EnableMenuItem(IDM_GOTOEND, MF_GRAYED | MF_DISABLED);
  1662. //m_pMainMenu->EnableMenuItem(IDM_GOTOSTART, MF_GRAYED | MF_DISABLED);
  1663. //m_pMainMenu->EnableMenuItem(IDM_STEPBACKWARD, MF_GRAYED | MF_DISABLED);
  1664. //m_pMainMenu->EnableMenuItem(IDM_STEPFORWARD, MF_GRAYED | MF_DISABLED);
  1665. //m_pMainMenu->EnableMenuItem(IDM_PREVIEW50, MF_GRAYED | MF_DISABLED);
  1666. //m_pMainMenu->EnableMenuItem(IDM_STREAM_TYPE, MF_GRAYED | MF_DISABLED);
  1667. //m_pMainMenu->GetSubMenu(3)->EnableMenuItem(7, MF_GRAYED | MF_DISABLED | MF_BYPOSITION);
  1668. // scroll state
  1669. m_PlaySlider.SetScrollPos(0);
  1670. m_PlaySlider.EnableWindow(FALSE);
  1671. if((HBITMAP)m_OverlayBmp != m_ctrlVideoPic.GetBitmap())
  1672. m_ctrlVideoPic.SetBitmap(m_OverlayBmp);
  1673. }
  1674. // get speed modulus to show int the static text control
  1675. DWORD CPlayerDlg::GetSpeedModulus()
  1676. {
  1677. DWORD dwValue = 0;
  1678. switch(m_nSpeed)
  1679. {
  1680. case 1:
  1681. case -1:
  1682. dwValue = 2;
  1683. break;
  1684. case 2:
  1685. case -2:
  1686. dwValue = 4;
  1687. break;
  1688. case 3:
  1689. case -3:
  1690. dwValue = 8;
  1691. break;
  1692. case 4:
  1693. case -4:
  1694. dwValue = 16;
  1695. break;
  1696. default:
  1697. break;
  1698. }
  1699. return dwValue;
  1700. }
  1701. // resize the dialog
  1702. void CPlayerDlg::SetWindowSize()
  1703. {
  1704. CRect rcWin, rcClient;
  1705. GetWindowRect(&rcWin);
  1706. GetClientRect(&rcClient);
  1707. m_dwDlgEdge = (rcWin.Width() - rcClient.Width()) >> 1;
  1708. ClientToScreen(&rcClient);
  1709. m_dwDlgTopSize = rcClient.top - rcWin.top;
  1710. TRACE("init window size!\n");
  1711. NAME(PlayM4_GetPictureSize)(PORT, &m_nWidth, &m_nHeight);
  1712. TRACE("get window size ok\n");
  1713. DWORD nWindowHeight = m_nHeight + PANNEL_HEIGHT + m_dwDlgTopSize + m_dwDlgEdge + 10;
  1714. DWORD nWindowWidth = m_nWidth + (m_dwDlgEdge << 1);
  1715. MoveWindow(
  1716. (m_dwScreenWidth -nWindowWidth) / 2 + m_rcScreen.left,
  1717. (m_dwScreenHeight -nWindowHeight) / 2 + m_rcScreen.top,
  1718. nWindowWidth,
  1719. nWindowHeight,
  1720. TRUE);
  1721. TRACE("exit window size\n");
  1722. //rcClient.right+=200;
  1723. m_ctrlVideoPic.GetClientRect(&rcClient);
  1724. }
  1725. // Funtion: sort the controls
  1726. void CPlayerDlg::SortControl()
  1727. {
  1728. TRACE("init SORT\n");
  1729. // if the dialog doesn't support resizing, return;
  1730. if( !(GetStyle() & WS_SIZEBOX) )
  1731. return;
  1732. CRect rcClient, rcVideo;
  1733. GetClientRect(&rcClient);
  1734. DWORD x=LEFT_EDGE+10,y=rcClient.bottom-STATE_HEIGHT;
  1735. //STATE
  1736. m_ctrlPlayText.MoveWindow(0,y,rcClient.Width()+1,STATE_HEIGHT,TRUE);
  1737. x=LEFT_EDGE;
  1738. y-=BUTTON_SIZE+STATE_UP;
  1739. //BUTTON
  1740. m_ctrlBtnPlay.MoveWindow(x,y,BUTTON_SIZE,BUTTON_SIZE,TRUE);
  1741. x+=BUTTON_SIZE;
  1742. m_ctrlBtnPause.MoveWindow(x,y,BUTTON_SIZE,BUTTON_SIZE,TRUE);
  1743. x+=BUTTON_SIZE;
  1744. m_ctrlBtnStop.MoveWindow(x,y,BUTTON_SIZE,BUTTON_SIZE,TRUE);
  1745. x+=BUTTON_SIZE;
  1746. x+=INTERVAL;
  1747. GetDlgItem(IDC_INTER1)->MoveWindow(x,y,INTERVAL_SIZE,BUTTON_SIZE,TRUE);
  1748. x+=INTERVAL_SIZE;
  1749. x+=INTERVAL;
  1750. m_ctrlBtnGStart.MoveWindow(x,y,BUTTON_SIZE,BUTTON_SIZE,TRUE);
  1751. x+=BUTTON_SIZE;
  1752. m_ctrlBtnSlow.MoveWindow(x,y,BUTTON_SIZE,BUTTON_SIZE,TRUE);
  1753. x+=BUTTON_SIZE;
  1754. m_ctrlBtnFast.MoveWindow(x,y,BUTTON_SIZE,BUTTON_SIZE,TRUE);
  1755. x+=BUTTON_SIZE;
  1756. m_ctrlBtnGEnd.MoveWindow(x,y,BUTTON_SIZE,BUTTON_SIZE,TRUE);
  1757. x+=BUTTON_SIZE;
  1758. x+=INTERVAL;
  1759. GetDlgItem(IDC_INTER2)->MoveWindow(x,y,INTERVAL_SIZE,BUTTON_SIZE,TRUE);
  1760. x+=INTERVAL_SIZE;
  1761. x+=INTERVAL;
  1762. m_ctrlStepBackward.MoveWindow(x,y,BUTTON_SIZE,BUTTON_SIZE,TRUE);
  1763. x+=BUTTON_SIZE;
  1764. m_ctrlStepForward.MoveWindow(x,y,BUTTON_SIZE,BUTTON_SIZE,TRUE);
  1765. x+=BUTTON_SIZE;
  1766. x+=INTERVAL;
  1767. GetDlgItem(IDC_INTER3)->MoveWindow(x,y,INTERVAL_SIZE,BUTTON_SIZE,TRUE);
  1768. x+=INTERVAL_SIZE;
  1769. x+=INTERVAL;
  1770. m_ctrlBtnCapPic.MoveWindow(x,y,BUTTON_SIZE,BUTTON_SIZE,TRUE);
  1771. x+=BUTTON_SIZE;
  1772. //SOUND
  1773. x=rcClient.right-SOUND_SLIDER_WIDTH;
  1774. m_SoundSlider.MoveWindow(x,y+BUTTON_SIZE-SOUND_SLIDER_HEIGHT,SOUND_SLIDER_WIDTH,SOUND_SLIDER_HEIGHT,TRUE);
  1775. x-=BUTTON_SIZE;
  1776. m_ctrlBtnSound.MoveWindow(x,y,BUTTON_SIZE,BUTTON_SIZE,TRUE);
  1777. y-=BUTTON_SIZE+BUTTON_UP;
  1778. //PLAY SLIDER
  1779. x=0;
  1780. GetDlgItem(IDC_PLAY_RECT_SLIDER)->MoveWindow(x,y,rcClient.Width(),PLAY_SLIDER_HEIGHT,TRUE);
  1781. m_PlaySlider.MoveWindowEx(x,y,rcClient.Width(),PLAY_SLIDER_HEIGHT,TRUE);
  1782. y-=PLAY_SLIDER_UP;
  1783. //pic show
  1784. m_ctrlVideoPic.MoveWindow(0,0,rcClient.Width(),y,TRUE);
  1785. NAME(PlayM4_RefreshPlay)(PORT);
  1786. // redraw whole the dialog rect except the video show rect
  1787. m_ctrlVideoPic.GetClientRect(&rcVideo);
  1788. CRect rect;
  1789. rect.left = rcClient.left;
  1790. rect.top = rcVideo.bottom;
  1791. rect.right = rcClient.right;
  1792. rect.bottom = rcClient.bottom;
  1793. InvalidateRect(&rect);
  1794. TRACE("exit SORT\n");
  1795. }
  1796. // Funtion: Init window size.
  1797. void CPlayerDlg::InitWindowSize(DWORD cx,DWORD cy)
  1798. {
  1799. TRACE("init window\n");
  1800. CRect rcWin, rcClient;
  1801. GetWindowRect(&rcWin);
  1802. GetClientRect(&rcClient);
  1803. m_dwDlgEdge = (rcWin.Width() - rcClient.Width()) >> 1;
  1804. ClientToScreen(&rcClient);
  1805. m_dwDlgTopSize = rcClient.top - rcWin.top;
  1806. DWORD nWindowHeight = cy + PANNEL_HEIGHT + m_dwDlgTopSize + m_dwDlgEdge + 10;
  1807. DWORD nWindowWidth = cx + (m_dwDlgEdge << 1);
  1808. nWindowHeight = min(nWindowHeight, m_dwScreenHeight);
  1809. nWindowWidth = min(nWindowWidth, m_dwScreenWidth);
  1810. MoveWindow(
  1811. (m_dwScreenWidth - nWindowWidth)/2 + m_rcScreen.left,
  1812. (m_dwScreenHeight - nWindowHeight)/2+ m_rcScreen.top,
  1813. nWindowWidth,
  1814. nWindowHeight,
  1815. TRUE);
  1816. SortControl();
  1817. //for the small picture size.The menu will be high.
  1818. GetWindowRect(&rcWin);
  1819. GetClientRect(&rcClient);
  1820. m_dwDlgEdge = (rcWin.Width() - rcClient.Width()) >> 1;
  1821. ClientToScreen(&rcClient);
  1822. DWORD nTopSize = rcClient.top - rcWin.top;
  1823. if(nTopSize != m_dwDlgTopSize)
  1824. {
  1825. TRACE("re init window!!!!!!\n");
  1826. m_dwDlgTopSize = nTopSize;
  1827. nWindowHeight = cy + PANNEL_HEIGHT + m_dwDlgTopSize + m_dwDlgEdge + 10;
  1828. nWindowWidth = cx + (m_dwDlgEdge << 1);
  1829. MoveWindow(
  1830. (m_dwScreenWidth - nWindowWidth) / 2 + m_rcScreen.left,
  1831. (m_dwScreenHeight - nWindowHeight) / 2 + m_rcScreen.top,
  1832. nWindowWidth,
  1833. nWindowHeight,
  1834. TRUE);
  1835. SortControl();
  1836. }
  1837. }
  1838. // others
  1839. // geton pic rect
  1840. CRect CPlayerDlg::GetOnPicRect(CRect rcWnd, CRect rcOnWnd, LONG nPicWidth, LONG nPicHeight)
  1841. {
  1842. CRect rcOnPic;
  1843. //LONG nScaleX=rcWnd.Width()
  1844. long nWndX = rcOnWnd.left - rcWnd.left;
  1845. long nWndY = rcOnWnd.top - rcWnd.top;
  1846. if(nWndX < 0)
  1847. nWndX = 0;
  1848. if(nWndY < 0)
  1849. nWndY = 0;
  1850. rcOnPic.left = nWndX * nPicWidth / rcWnd.Width();
  1851. rcOnPic.top = nWndY * nPicHeight / rcWnd.Height();
  1852. rcOnPic.right = rcOnPic.left + rcOnWnd.Width() * nPicWidth/rcWnd.Width();
  1853. rcOnPic.bottom = rcOnPic.top + rcOnWnd.Height() * nPicHeight/rcWnd.Height();
  1854. if(rcOnPic.right > nPicWidth)
  1855. rcOnPic.right = nPicWidth;
  1856. if(rcOnPic.bottom > nPicHeight)
  1857. rcOnPic.bottom = nPicHeight;
  1858. return rcOnPic;
  1859. }
  1860. // Funtion: test the capability of your system.
  1861. void CPlayerDlg::TestCapability(DWORD nDeviceNum)
  1862. {
  1863. CString csCap="";
  1864. #if (WINVER > 0x0400)
  1865. int nFlag=NAME(PlayM4_GetCapsEx)(nDeviceNum);
  1866. #else
  1867. int nFlag=NAME(PlayM4_GetCaps)();
  1868. #endif
  1869. if(!(nFlag&SUPPORT_SSE))
  1870. csCap+="Don't support SSE instruction set;\r\n";
  1871. if(!(nFlag&SUPPORT_DDRAW))
  1872. csCap+="Create DirectDraw faild;\r\n";
  1873. if(!(nFlag&SUPPORT_BLT))
  1874. csCap+="Don't support BLT;\r\n";
  1875. if(!(nFlag&SUPPORT_BLTFOURCC))
  1876. csCap+="Don't support color-space conversions;\r\n";
  1877. if(!(nFlag&SUPPORT_BLTSHRINKX))
  1878. csCap+="Don't support arbitrary shrinking of a surface along the x-axis\r\n";
  1879. if(!(nFlag&SUPPORT_BLTSHRINKY))
  1880. csCap+="Don't supports arbitrary shrinking of a surface along the y-axis (vertically);\r\n";
  1881. if(!(nFlag&SUPPORT_BLTSTRETCHX))
  1882. csCap+="Don't supports arbitrary stretching of a surface along the x-axis;\r\n";
  1883. if(!(nFlag&SUPPORT_BLTSTRETCHY))
  1884. csCap+="Don't supports arbitrary stretching of a surface along the y-axis;\r\n";
  1885. if(csCap.GetLength()>0)
  1886. {
  1887. csCap+="If your video adapter chip is made by nVidia,please update the new driver!\r\n";
  1888. MessageBox(csCap,"Warning",MB_OK);
  1889. }
  1890. }
  1891. void CPlayerDlg::SetDisplayRegion(RECT Rect)
  1892. {
  1893. if (m_enumState != State_Pause) {
  1894. return;
  1895. }
  1896. NAME(PlayM4_SetDisplayRegion)(PORT, 0, &Rect, GetDlgItem(IDC_SHOW)->m_hWnd, TRUE);
  1897. UpdateWindow();
  1898. NAME(PlayM4_RefreshPlayEx)(PORT, 0);
  1899. }
  1900. /*************************************************************************/
  1901. /*************************************************************************/
  1902. /*************************************************************************/
  1903. /* assistant operation over
  1904. /*************************************************************************/
  1905. /*************************************************************************/
  1906. /*************************************************************************/
  1907. /*************************************************************************/
  1908. /*************************************************************************/
  1909. /*************************************************************************/
  1910. /* button operation begin
  1911. /*************************************************************************/
  1912. /*************************************************************************/
  1913. /*************************************************************************/
  1914. // play / pause / stop
  1915. void CPlayerDlg::Play()
  1916. {
  1917. if(m_enumState == State_Play)
  1918. return;
  1919. if(m_enumState == State_Pause)
  1920. {
  1921. DWORD nPreSpeed = m_nSpeed;
  1922. m_enumState = State_Play;
  1923. NAME(PlayM4_Pause)(PORT, FALSE);
  1924. // when u called this api, the speed is adjust to normal speed, so we must resume it.
  1925. NAME(PlayM4_Play)(PORT, m_ctrlVideoPic.GetSafeHwnd());
  1926. m_nSpeed = 0;
  1927. ThrowB(IDM_THROW0);
  1928. AdjustSpeed(nPreSpeed);
  1929. }
  1930. else
  1931. {
  1932. m_nSpeed = 0;
  1933. ThrowB(IDM_THROW0);
  1934. if(m_bConvertAVI)
  1935. {
  1936. NAME(PlayM4_SetDecCallBackMend)(PORT, DecCBFun, DWORD(this));
  1937. m_bFileRefCreated = FALSE;
  1938. }
  1939. if(m_bStreamType)
  1940. {
  1941. ::SetFilePointer(m_hStreamFile, m_dwHeadSize, 0, FILE_BEGIN);
  1942. NAME(PlayM4_ResetSourceBuffer)(PORT);
  1943. SetEvent(m_hEventInput);
  1944. }
  1945. if(NAME(PlayM4_Play)(PORT, m_ctrlVideoPic.m_hWnd))
  1946. {
  1947. m_enumState = State_Play;
  1948. SetTimer(PLAY_TIMER, 500, NULL);
  1949. NAME(PlayM4_RefreshPlay)(PORT);
  1950. }
  1951. m_bSound = NAME(PlayM4_PlaySound)(PORT);
  1952. }
  1953. //if (m_pDisplayRegion->m_bValid)
  1954. //{
  1955. // m_pDisplayRegion->Enable(FALSE);
  1956. // }
  1957. }
  1958. void CPlayerDlg::Pause()
  1959. {
  1960. if(m_enumState == State_Play)
  1961. {
  1962. NAME(PlayM4_Pause)(PORT, TRUE);
  1963. m_enumState = State_Pause;
  1964. }
  1965. if (m_pDisplayRegion->m_bValid) {
  1966. Sleep(50);
  1967. m_pDisplayRegion->Enable(TRUE);
  1968. m_pDisplayRegion->DrawRectangle();
  1969. }
  1970. }
  1971. void CPlayerDlg::Stop()
  1972. {
  1973. if(m_enumState == State_Stop)
  1974. return;
  1975. KillTimer(PLAY_TIMER);
  1976. // stop sound
  1977. if(NAME(PlayM4_StopSound)())
  1978. {
  1979. m_bSound = FALSE;
  1980. m_ctrlBtnSound.SetIcon(IDI_SOUND_DISABLE);
  1981. }
  1982. // stop video
  1983. if(NAME(PlayM4_Stop)(PORT))
  1984. {
  1985. m_strPlayStateText = "停止";
  1986. m_ctrlPlayText.ShowText(m_strPlayStateText);
  1987. if(m_bStreamType)
  1988. {
  1989. ResetEvent(m_hEventInput);
  1990. }
  1991. }
  1992. if(m_bConvertAVI)
  1993. {
  1994. g_classAVI.ReleaseResource();
  1995. m_strSaveAVIPath = _T("");
  1996. m_bConvertAVI = FALSE;
  1997. }
  1998. m_enumState = State_Stop;
  1999. }
  2000. // gotostart / slow / fast / gotoend
  2001. void CPlayerDlg::GotoStart()
  2002. {
  2003. // TODO: Add your control notification handler code here
  2004. if(m_bFileRefCreated)
  2005. NAME(PlayM4_SetCurrentFrameNum)(PORT, 0);
  2006. else
  2007. NAME(PlayM4_SetPlayPos)(PORT, 0);
  2008. }
  2009. void CPlayerDlg::GotoEnd()
  2010. {
  2011. // TODO: Add your control notification handler code here
  2012. if(m_bFileRefCreated)
  2013. {
  2014. //Note: May create many WM_FILE_END message. The best way is to synchronize the option;
  2015. int nEndFrame = m_dwTotalFrames;
  2016. int nCurFrame = NAME(PlayM4_GetCurrentFrameNum)(PORT);
  2017. while(!NAME(PlayM4_SetCurrentFrameNum)(PORT, nEndFrame--))
  2018. {
  2019. //TRACE("FrameNum is :%d\n",nEndFrame);
  2020. if(nEndFrame <= max(0, m_dwTotalFrames - 3))
  2021. {
  2022. NAME(PlayM4_SetCurrentFrameNum)(PORT, nCurFrame);
  2023. break;
  2024. }
  2025. }
  2026. }
  2027. else
  2028. {
  2029. NAME(PlayM4_SetPlayPos)(PORT, 1);
  2030. }
  2031. }
  2032. void CPlayerDlg::Fast()
  2033. {
  2034. // TODO: Add your control notification handler code here
  2035. // Throw B-Frame ,improve the performance;
  2036. if(NAME(PlayM4_Fast)(PORT))
  2037. {
  2038. m_nSpeed ++;
  2039. if(m_nSpeed > 0)
  2040. ThrowB(IDM_THROW2);
  2041. }
  2042. }
  2043. void CPlayerDlg::Slow()
  2044. {
  2045. // TODO: Add your control notification handler code here
  2046. if(NAME(PlayM4_Slow)(PORT))
  2047. {
  2048. m_nSpeed --;
  2049. if(m_nSpeed <= 0)
  2050. ThrowB(IDM_THROW0);
  2051. }
  2052. }
  2053. void CPlayerDlg::AdjustSpeed(int nSpeed)
  2054. {
  2055. int nCyc = 0;
  2056. while(m_nSpeed != nSpeed)
  2057. {
  2058. if(nSpeed > m_nSpeed)
  2059. {
  2060. Fast();
  2061. }
  2062. else if(nSpeed < m_nSpeed)
  2063. {
  2064. Slow();
  2065. }
  2066. nCyc ++;
  2067. if(nCyc >= 10)
  2068. break;
  2069. }
  2070. }
  2071. // stepback / stepfore / cap picture
  2072. void CPlayerDlg::StepBackward()
  2073. {
  2074. // TODO: Add your control notification handler code here
  2075. if(m_bFileRefCreated)
  2076. {
  2077. NAME(PlayM4_OneByOneBack)(PORT);
  2078. m_enumState = State_Pause;
  2079. if (m_pDisplayRegion->m_bValid) {
  2080. Sleep(50);
  2081. m_pDisplayRegion->Enable(TRUE);
  2082. m_pDisplayRegion->DrawRectangle();
  2083. }
  2084. }
  2085. else
  2086. MessageBox("File reference hasn't been created.", NULL, MB_OK);
  2087. }
  2088. void CPlayerDlg::StepForward()
  2089. {
  2090. // TODO: Add your control notification handler code here
  2091. // you can do it like the followed too.
  2092. // DWORD nCurrentFrame = NAME(PlayM4_GetCurrentFrameNum)(PORT);
  2093. // NAME(PlayM4_SetCurrentFrameNum)(PORT,nCurrentFrame+1);
  2094. ThrowB(IDM_THROW0); // when step forward one by one, don't throw B frame;
  2095. NAME(PlayM4_OneByOne)(PORT);
  2096. m_enumState = State_Pause;
  2097. if (m_pDisplayRegion->m_bValid) {
  2098. Sleep(50);
  2099. m_pDisplayRegion->Enable(TRUE);
  2100. m_pDisplayRegion->DrawRectangle();
  2101. }
  2102. }
  2103. void CPlayerDlg::GetPic(PBYTE pImage, DWORD nBufSize)
  2104. {
  2105. CString sFilePath;
  2106. CFile clsFile;
  2107. DWORD pImageSize = 0;
  2108. if(m_nCapPicType == 1)
  2109. {
  2110. if( !NAME(PlayM4_GetJPEG)(PORT, pImage, nBufSize, &pImageSize) )
  2111. {
  2112. return;
  2113. }
  2114. if(m_strCapPicPath.Compare(""))
  2115. sFilePath.Format("%s\\capture%02d.jpeg", m_strCapPicPath, m_npic_jpeg);
  2116. else
  2117. sFilePath.Format("C:\\capture%02d.jpeg", m_npic_jpeg);
  2118. }
  2119. else
  2120. {
  2121. if( !NAME(PlayM4_GetBMP)(PORT, pImage, nBufSize, &pImageSize) )
  2122. {
  2123. return;
  2124. }
  2125. if(m_strCapPicPath.Compare(""))
  2126. sFilePath.Format("%s\\capture%02d.bmp", m_strCapPicPath, m_npic_bmp);
  2127. else
  2128. sFilePath.Format("C:\\capture%02d.bmp", m_npic_bmp);
  2129. }
  2130. if(!clsFile.Open(sFilePath,CFile::modeCreate|CFile::modeWrite))
  2131. {
  2132. return;
  2133. }
  2134. try
  2135. {
  2136. clsFile.Write(pImage, pImageSize);
  2137. clsFile.Close();
  2138. if(m_nCapPicType == 0)
  2139. m_npic_bmp++;
  2140. else
  2141. m_npic_jpeg++;
  2142. }
  2143. catch (CFileException* e)
  2144. {
  2145. e->ReportError();
  2146. e->Delete();
  2147. }
  2148. }
  2149. void CPlayerDlg::Cappic()
  2150. {
  2151. // TODO: Add your control notification handler code here
  2152. PBYTE pImage = NULL;
  2153. DWORD nBufSize = m_nWidth * m_nHeight * 5; // 保证足够大即可(不会小于一幅bmp或者jpeg图像大小)
  2154. try
  2155. {
  2156. pImage = new BYTE[nBufSize];
  2157. if(NULL == pImage)
  2158. {
  2159. throw 0;
  2160. }
  2161. GetPic(pImage, nBufSize);
  2162. }
  2163. catch(...)
  2164. {
  2165. }
  2166. if(pImage != NULL)
  2167. {
  2168. delete []pImage;
  2169. pImage = NULL;
  2170. }
  2171. }
  2172. // close or open sound
  2173. void CPlayerDlg::Sound()
  2174. {
  2175. // TODO: Add your control notification handler code here
  2176. if(m_bSound)
  2177. {
  2178. if(NAME(PlayM4_StopSound)())
  2179. {
  2180. m_bSound = FALSE;
  2181. m_ctrlBtnSound.SetIcon(IDI_SOUND_DISABLE);
  2182. }
  2183. }
  2184. else
  2185. {
  2186. if(NAME(PlayM4_PlaySound)(PORT))
  2187. {
  2188. m_ctrlBtnSound.SetIcon(IDI_SOUND_ENABLE);
  2189. m_bSound = TRUE;
  2190. }
  2191. }
  2192. }
  2193. // adjust sound
  2194. void CPlayerDlg::AdjustSound(BOOL bFlag)
  2195. {
  2196. int nSoundPos = m_SoundSlider.GetPos();
  2197. if(bFlag)
  2198. {
  2199. #ifdef _WAVE_ADJ
  2200. nSoundPos += (MAX_WAVE_COEF - MIN_WAVE_COEF)/0xf;
  2201. nSoundPos = min(nSoundPos, MAX_WAVE_COEF);
  2202. #else
  2203. nSoundPos += 0xffff/0xf;
  2204. nSoundPos = min(nSoundPos, 0xffff-1);
  2205. #endif
  2206. }
  2207. else
  2208. {
  2209. #ifdef _WAVE_ADJ
  2210. nSoundPos -= (MAX_WAVE_COEF - MIN_WAVE_COEF)/0xf;
  2211. nSoundPos = max(nSoundPos, MIN_WAVE_COEF);
  2212. #else
  2213. nSoundPos -= 0xffff/0xf;
  2214. nSoundPos = max(nSoundPos, 0);
  2215. #endif
  2216. }
  2217. #ifdef _WAVE_ADJ
  2218. NAME(PlayM4_AdjustWaveAudio)(PORT, nSoundPos);
  2219. #else
  2220. NAME(PlayM4_SetVolume)(PORT, nSoundPos);
  2221. #endif
  2222. m_SoundSlider.SetPos(nSoundPos);
  2223. }
  2224. /*************************************************************************/
  2225. /*************************************************************************/
  2226. /*************************************************************************/
  2227. /* button operation over
  2228. /*************************************************************************/
  2229. /*************************************************************************/
  2230. /*************************************************************************/
  2231. /*************************************************************************/
  2232. /*************************************************************************/
  2233. /*************************************************************************/
  2234. /* menu operation begin
  2235. /*************************************************************************/
  2236. /*************************************************************************/
  2237. /*************************************************************************/
  2238. // file operation:
  2239. void CPlayerDlg::Open()
  2240. {
  2241. Close();
  2242. SetState();
  2243. try
  2244. {
  2245. if(m_bStreamType)
  2246. OpenStream();
  2247. else
  2248. OpenFile();
  2249. NAME(PlayM4_SetPicQuality)(PORT, m_bPicQuality);
  2250. NAME(PlayM4_SetDeflash)(PORT, m_bDeflash);
  2251. m_bOpen = TRUE;
  2252. NAME(PlayM4_GetPictureSize)(PORT, &m_nWidth, &m_nHeight);
  2253. m_pDisplayRegion->SetResolution(m_nHeight, m_nWidth);
  2254. //m_pMainMenu->ModifyMenu(IDM_SETDISPLAY, MF_BYCOMMAND, IDM_SETDISPLAY, "区域显示");
  2255. // if video format is HCIF, then double the height
  2256. if( (m_nWidth == WIDTH*2) && (m_nHeight <= HEIGHT_PAL) )
  2257. m_nHeight *= 2;
  2258. //InitWindowSize(m_nWidth, m_nHeight);
  2259. }
  2260. catch(...)
  2261. {
  2262. Close();
  2263. }
  2264. }
  2265. void CPlayerDlg::Close()
  2266. {
  2267. // TODO: Add your command handler code here
  2268. if(m_bOpen)
  2269. {
  2270. if(m_bStreamType)
  2271. CloseStream();
  2272. else
  2273. CloseFile();
  2274. }
  2275. }
  2276. void CPlayerDlg::CutFile()
  2277. {
  2278. // TODO: Add your command handler code here
  2279. CCutFile cutDlg;
  2280. if(cutDlg.SetFileName(m_strPlayFileName))
  2281. cutDlg.DoModal();
  2282. }
  2283. // view operation:
  2284. void CPlayerDlg::ViewFullScreen()
  2285. {
  2286. // TODO: Add your command handler code here
  2287. m_bFullScreen = !m_bFullScreen;
  2288. if(m_bFullScreen)
  2289. {
  2290. //Save the pre info;
  2291. GetWindowPlacement(&m_OldWndpl);
  2292. //Remove WS_SIZEBOX windows style. or not the window can't be full-creen.
  2293. ModifyStyle(WS_SIZEBOX, 0, 0);
  2294. CRect WindowRect, ClientRect;
  2295. RECT m_FullScreenRect;
  2296. //ReDraw the window. Get the correct edge value.
  2297. // GetWindowRect(&WindowRect);
  2298. // WindowRect.left += 1;
  2299. // WindowRect.right += 1;
  2300. // MoveWindow(CRect(0, 0, 352, 288), TRUE);
  2301. GetWindowRect(&WindowRect);
  2302. GetClientRect(&ClientRect);
  2303. ClientToScreen(&ClientRect);
  2304. //get the dest window rect.
  2305. m_FullScreenRect.left = WindowRect.left - ClientRect.left + m_rcScreen.left;
  2306. m_FullScreenRect.top = WindowRect.top - ClientRect.top + m_rcScreen.top;
  2307. m_FullScreenRect.right = WindowRect.right - ClientRect.right + m_rcScreen.right;
  2308. m_FullScreenRect.bottom = WindowRect.bottom - ClientRect.bottom + m_rcScreen.bottom;
  2309. //Move the main window to the dest rect.
  2310. WINDOWPLACEMENT wndpl;
  2311. wndpl.length = sizeof(WINDOWPLACEMENT);
  2312. wndpl.flags = 0;
  2313. wndpl.showCmd = SW_SHOWNORMAL;
  2314. wndpl.rcNormalPosition = m_FullScreenRect;
  2315. SetWindowPlacement(&wndpl);
  2316. //Move the view winow to full-screen.
  2317. RECT rc;
  2318. GetClientRect(&rc);
  2319. m_ctrlVideoPic.MoveWindow(&rc,TRUE);
  2320. //Remove WS_VISIBLE window style.
  2321. m_ctrlBtnPlay.ModifyStyle(WS_VISIBLE, 0, 0);
  2322. m_ctrlBtnPause.ModifyStyle(WS_VISIBLE, 0, 0);
  2323. m_ctrlBtnStop.ModifyStyle(WS_VISIBLE, 0, 0);
  2324. m_ctrlBtnFast.ModifyStyle(WS_VISIBLE, 0, 0);
  2325. m_ctrlBtnGEnd.ModifyStyle(WS_VISIBLE, 0, 0);
  2326. m_ctrlBtnSlow.ModifyStyle(WS_VISIBLE, 0, 0);
  2327. m_ctrlBtnGStart.ModifyStyle(WS_VISIBLE, 0, 0);
  2328. m_ctrlStepBackward.ModifyStyle(WS_VISIBLE, 0, 0);
  2329. m_ctrlStepForward.ModifyStyle(WS_VISIBLE, 0, 0);
  2330. m_ctrlBtnCapPic.ModifyStyle(WS_VISIBLE, 0, 0);
  2331. m_ctrlBtnSound.ModifyStyle(WS_VISIBLE, 0, 0);
  2332. GetDlgItem(IDC_INTER1)->ModifyStyle(WS_VISIBLE, 0, 0);
  2333. GetDlgItem(IDC_INTER2)->ModifyStyle(WS_VISIBLE, 0, 0);
  2334. GetDlgItem(IDC_INTER3)->ModifyStyle(WS_VISIBLE, 0, 0);
  2335. m_SoundSlider.ModifyStyle(WS_VISIBLE,0,0);
  2336. m_PlaySlider.ModifyStyle(WS_VISIBLE,0,0);
  2337. m_ctrlPlayText.ModifyStyle(WS_VISIBLE,0,0);
  2338. }
  2339. else
  2340. {
  2341. //Visible the control.
  2342. m_ctrlBtnPlay.ModifyStyle(0, WS_VISIBLE, 0);
  2343. m_ctrlBtnPause.ModifyStyle(0, WS_VISIBLE, 0);
  2344. m_ctrlBtnStop.ModifyStyle(0, WS_VISIBLE, 0);
  2345. m_ctrlBtnFast.ModifyStyle(0, WS_VISIBLE, 0);
  2346. m_ctrlBtnGEnd.ModifyStyle(0, WS_VISIBLE, 0);
  2347. m_ctrlBtnSlow.ModifyStyle(0, WS_VISIBLE, 0);
  2348. m_ctrlBtnGStart.ModifyStyle(0, WS_VISIBLE, 0);
  2349. m_ctrlStepForward.ModifyStyle(0, WS_VISIBLE, 0);
  2350. m_ctrlStepBackward.ModifyStyle(0, WS_VISIBLE, 0);
  2351. m_ctrlBtnCapPic.ModifyStyle(0, WS_VISIBLE, 0);
  2352. m_ctrlBtnSound.ModifyStyle(0, WS_VISIBLE, 0);
  2353. GetDlgItem(IDC_INTER1)->ModifyStyle(0, WS_VISIBLE, 0);
  2354. GetDlgItem(IDC_INTER2)->ModifyStyle(0, WS_VISIBLE, 0);
  2355. GetDlgItem(IDC_INTER3)->ModifyStyle(0, WS_VISIBLE, 0);
  2356. m_PlaySlider.ModifyStyle(0,WS_VISIBLE,0);
  2357. m_SoundSlider.ModifyStyle(0,WS_VISIBLE,0);
  2358. m_ctrlPlayText.ModifyStyle(0,WS_VISIBLE,0);
  2359. //make the window can be resize.
  2360. ModifyStyle(0, WS_SIZEBOX, 0);
  2361. //change the window pos to pre rect.
  2362. SetWindowPlacement(&m_OldWndpl);
  2363. }
  2364. this->RedrawWindow();
  2365. NAME(PlayM4_RefreshPlay)(PORT);
  2366. }
  2367. void CPlayerDlg::ViewZoom(UINT nID)
  2368. {
  2369. if(m_bFullScreen)
  2370. {
  2371. //ViewFullScreen();
  2372. }
  2373. //for(int i = 0; i < 3; i++)
  2374. {
  2375. //m_pMainMenu->CheckMenuItem(IDM_VIEW_ZOOM_50 + i, MF_UNCHECKED);
  2376. }
  2377. int nItem = nID - IDM_VIEW_ZOOM_100;
  2378. switch(nItem)
  2379. {
  2380. case 0:
  2381. //InitWindowSize(m_nWidth, m_nHeight);
  2382. break;
  2383. case -1:
  2384. //InitWindowSize(m_nWidth >> 1, m_nHeight >> 1);
  2385. break;
  2386. case 1:
  2387. //InitWindowSize(m_nWidth << 1, m_nHeight << 1);
  2388. break;
  2389. default:
  2390. break;
  2391. }
  2392. //m_pMainMenu->CheckMenuItem(nID, MF_CHECKED);
  2393. }
  2394. void CPlayerDlg::Infomation()
  2395. {
  2396. // TODO: Add your command handler code here
  2397. CInfo infoDlg;
  2398. infoDlg.DoModal();
  2399. }
  2400. void CPlayerDlg::SetDisplay()
  2401. {
  2402. // TODO: Add your command handler code here
  2403. RECT RectP;
  2404. RECT RectS;
  2405. if (!m_pDisplayRegion->m_bValid) {
  2406. if(m_enumState == State_Play)
  2407. {
  2408. NAME(PlayM4_Pause)(PORT, TRUE);
  2409. m_enumState = State_Pause;
  2410. SetState();
  2411. }
  2412. // m_ctrlBtnCapPic.EnableWindow(FALSE);
  2413. // m_ctrlBtnSound.EnableWindow(FALSE);
  2414. // m_ctrlBtnSlow.EnableWindow(FALSE);
  2415. // m_ctrlBtnFast.EnableWindow(FALSE);
  2416. // m_ctrlBtnGStart.EnableWindow(FALSE);
  2417. // m_ctrlBtnGEnd.EnableWindow(FALSE);
  2418. // m_ctrlBtnStop.EnableWindow(FALSE);
  2419. // m_ctrlBtnPlay.EnableWindow(FALSE);
  2420. // m_ctrlBtnPause.EnableWindow(FALSE);
  2421. // m_ctrlStepBackward.EnableWindow(FALSE);
  2422. // m_ctrlStepForward.EnableWindow(FALSE);
  2423. // m_pMainMenu->EnableMenuItem(2, MF_GRAYED|MF_BYPOSITION|MF_DISABLED);
  2424. //m_pMainMenu->ModifyMenu(IDM_SETDISPLAY, MF_BYCOMMAND, IDM_SETDISPLAY, "取消区域显示");
  2425. m_pDisplayRegion->Create(IDD_RANGE);
  2426. GetWindowRect(&RectP);
  2427. m_pDisplayRegion->GetWindowRect(&RectS);
  2428. RectS.right = RectS.right - RectS.left + RectP.right;
  2429. RectS.left = RectP.right;
  2430. RectS.bottom = RectS.bottom - RectS.top + RectP.top;
  2431. RectS.top = RectP.top;
  2432. if (RectP.right + 10 > (int)m_dwScreenWidth) {
  2433. RectS.left = RectP.left - (RectS.right - RectS.left);
  2434. RectS.right = RectP.left;
  2435. }
  2436. m_pDisplayRegion->MoveWindow(&RectS);
  2437. m_pDisplayRegion->InitShow();
  2438. ThrowB(IDM_THROW0); // when step forward one by one, don't throw B frame;
  2439. NAME(PlayM4_OneByOne)(PORT);
  2440. Sleep(50);
  2441. m_pDisplayRegion->DrawRectangle();
  2442. }
  2443. else
  2444. {
  2445. // m_ctrlBtnCapPic.EnableWindow(TRUE);
  2446. // m_ctrlBtnSound.EnableWindow(TRUE);
  2447. // m_ctrlBtnSlow.EnableWindow(TRUE);
  2448. // m_ctrlBtnFast.EnableWindow(TRUE);
  2449. // m_ctrlBtnGStart.EnableWindow(TRUE);
  2450. // m_ctrlBtnGEnd.EnableWindow(TRUE);
  2451. // m_ctrlBtnStop.EnableWindow(TRUE);
  2452. // m_ctrlBtnPlay.EnableWindow(TRUE);
  2453. // m_ctrlBtnPause.EnableWindow(TRUE);
  2454. // m_ctrlStepBackward.EnableWindow(TRUE);
  2455. // m_ctrlStepForward.EnableWindow(TRUE);
  2456. // m_pMainMenu->EnableMenuItem(2, MF_ENABLED|MF_BYPOSITION);
  2457. //m_pMainMenu->ModifyMenu(IDM_SETDISPLAY, MF_BYCOMMAND, IDM_SETDISPLAY, "区域显示");
  2458. Play();
  2459. SetState();
  2460. m_pDisplayRegion->DestroyWindow();
  2461. }
  2462. }
  2463. BOOL CPlayerDlg::SetDevice(UINT nID)
  2464. {
  2465. BOOL bFunctionOK = FALSE;
  2466. #if (WINVER > 0x0400)
  2467. DWORD nVal = NAME(PlayM4_GetDDrawDeviceTotalNums)();
  2468. if(nVal >= 1)
  2469. {
  2470. UINT nDeviceSeq = nID - IDM_DEVICE0;
  2471. //for(int i = 0; i < MAX_DISPLAY_DEVICE; i++)
  2472. {
  2473. //m_pMainMenu->CheckMenuItem(IDM_DEVICE0 + i, MF_UNCHECKED);
  2474. }
  2475. if(NAME(PlayM4_SetDDrawDevice)(PORT, nDeviceSeq + 1))
  2476. {
  2477. bFunctionOK = TRUE;
  2478. }
  2479. //m_pMainMenu->CheckMenuItem(nID, MF_CHECKED);
  2480. }
  2481. #endif
  2482. return bFunctionOK;
  2483. }
  2484. // control operation:
  2485. void CPlayerDlg::VideoControl()
  2486. {
  2487. // TODO: Add your command handler code here
  2488. m_pVideoControl->Create(IDD_VIDEOCTRL);
  2489. m_pVideoControl->ShowWindow(SW_SHOW);
  2490. //m_pMainMenu->EnableMenuItem(IDM_VIDEO_CONTROL, MF_GRAYED | MF_DISABLED);
  2491. }
  2492. void CPlayerDlg::Repeat()
  2493. {
  2494. // TODO: Add your command handler code here
  2495. m_bRepeatPlay = !m_bRepeatPlay;
  2496. UINT nFlag = m_bRepeatPlay ? MF_CHECKED : MF_UNCHECKED;
  2497. //m_pMainMenu->CheckMenuItem(IDM_REPEAT, nFlag);
  2498. }
  2499. void CPlayerDlg::Locate()
  2500. {
  2501. // TODO: Add your command handler code here
  2502. m_pSeek->Create(IDD_SEEK);
  2503. //m_pMainMenu->EnableMenuItem(IDM_SEEK,MF_GRAYED | MF_DISABLED);
  2504. }
  2505. // option operation:
  2506. void CPlayerDlg::StreamType()
  2507. {
  2508. // TODO: Add your command handler code here
  2509. m_bStreamType = !m_bStreamType;
  2510. UINT nFlag = m_bStreamType ? MF_CHECKED : MF_UNCHECKED;
  2511. //m_pMainMenu->CheckMenuItem(IDM_STREAM_TYPE, nFlag);
  2512. }
  2513. void CPlayerDlg::Deflash()
  2514. {
  2515. // TODO: Add your command handler code here
  2516. m_bDeflash = !m_bDeflash;
  2517. UINT nFlag = m_bDeflash ? MF_CHECKED : MF_UNCHECKED;
  2518. //m_pMainMenu->CheckMenuItem(IDM_DEFLASH, nFlag);
  2519. NAME(PlayM4_SetDeflash)(PORT, m_bDeflash);
  2520. }
  2521. void CPlayerDlg::Quality()
  2522. {
  2523. // TODO: Add your command handler code here
  2524. m_bPicQuality = !m_bPicQuality;
  2525. UINT nFlag = m_bPicQuality ? MF_CHECKED : MF_UNCHECKED;
  2526. //m_pMainMenu->CheckMenuItem(IDM_QUALITY, nFlag);
  2527. NAME(PlayM4_SetPicQuality)(PORT, m_bPicQuality);
  2528. }
  2529. void CPlayerDlg::ThrowB(UINT nID)
  2530. {
  2531. NAME(PlayM4_ThrowBFrameNum)(PORT, nID - IDM_THROW0);
  2532. //for(int i = IDM_THROW0; i <= IDM_THROW2; i++ )
  2533. // m_pMainMenu->CheckMenuItem(i, MF_UNCHECKED);
  2534. //m_pMainMenu->CheckMenuItem(nID, MF_CHECKED);
  2535. }
  2536. void CPlayerDlg::DisplayType(UINT nID)
  2537. {
  2538. //m_pMainMenu->CheckMenuItem(IDM_DISNORMAL, MF_UNCHECKED);
  2539. //m_pMainMenu->CheckMenuItem(IDM_DISQUARTER, MF_UNCHECKED);
  2540. //m_pMainMenu->CheckMenuItem(nID, MF_CHECKED);
  2541. if(nID == IDM_DISNORMAL)
  2542. NAME(PlayM4_SetDisplayType)(PORT, DISPLAY_NORMAL);
  2543. else
  2544. NAME(PlayM4_SetDisplayType)(PORT, DISPLAY_QUARTER);
  2545. }
  2546. void CPlayerDlg::SelectTimer(UINT nID)
  2547. {
  2548. //m_pMainMenu->CheckMenuItem(IDM_TIMER1, MF_UNCHECKED);
  2549. //m_pMainMenu->CheckMenuItem(IDM_TIMER2, MF_UNCHECKED);
  2550. //m_pMainMenu->CheckMenuItem(nID, MF_CHECKED);
  2551. if(nID == IDM_TIMER1)
  2552. NAME(PlayM4_SetTimerType)(PORT, TIMER_1, 0);
  2553. else
  2554. NAME(PlayM4_SetTimerType)(PORT, TIMER_2, 0);
  2555. }
  2556. void CPlayerDlg::ResetBuf()
  2557. {
  2558. // TODO: Add your command handler code here
  2559. // Only test the interface.
  2560. NAME(PlayM4_ResetBuffer)(PORT, BUF_VIDEO_RENDER);
  2561. NAME(PlayM4_ResetBuffer)(PORT, BUF_AUDIO_RENDER);
  2562. NAME(PlayM4_ResetBuffer)(PORT, BUF_VIDEO_SRC);
  2563. NAME(PlayM4_ResetBuffer)(PORT, BUF_AUDIO_SRC);
  2564. }
  2565. void CPlayerDlg::CapPicType(UINT nID)
  2566. {
  2567. //m_pMainMenu->CheckMenuItem(IDM_CAP_BMP, MF_UNCHECKED);
  2568. //m_pMainMenu->CheckMenuItem(IDM_CAP_JPEG, MF_UNCHECKED);
  2569. //m_pMainMenu->CheckMenuItem(nID, MF_CHECKED);
  2570. if(nID == IDM_CAP_BMP)
  2571. m_nCapPicType = 0;
  2572. else
  2573. m_nCapPicType = 1;
  2574. }
  2575. void CPlayerDlg::CappicPath()
  2576. {
  2577. char szDir[MAX_PATH];
  2578. BROWSEINFO bi;
  2579. ITEMIDLIST *pidl;
  2580. bi.hwndOwner = this->m_hWnd;
  2581. bi.pidlRoot = NULL;
  2582. bi.pszDisplayName = szDir;
  2583. bi.lpszTitle = "请选择目录";
  2584. bi.ulFlags = BIF_RETURNONLYFSDIRS;
  2585. bi.lpfn = NULL;
  2586. bi.lParam = 0;
  2587. bi.iImage = 0;
  2588. pidl = SHBrowseForFolder(&bi);
  2589. if(NULL == pidl)
  2590. return;
  2591. if(!SHGetPathFromIDList(pidl, szDir))
  2592. return;
  2593. m_strCapPicPath.Format("%s",szDir);
  2594. }
  2595. void CPlayerDlg::ConvertToAVI()
  2596. {
  2597. // TODO: Add your command handler code here
  2598. int ReturnValue;
  2599. CString str, m_csInfo;
  2600. str.Format("Convert to AVI File will be Failed to Play the MPEG4 File\n\n");
  2601. m_csInfo += str;
  2602. str.Format("The Converted AVI File can't be Larger than 2G!\n\n");
  2603. m_csInfo += str;
  2604. str.Format("Playing the Converted AVI File must Install the Divx!\n\n");
  2605. m_csInfo += str;
  2606. str.Format("if Continued,Click OK Button!\n");
  2607. m_csInfo += str;
  2608. ReturnValue = MessageBox((LPCTSTR)m_csInfo, NULL, MB_YESNO);
  2609. if(ReturnValue == IDYES)
  2610. {
  2611. Close();
  2612. m_bConvertAVI = TRUE;
  2613. str.Format("AVI Movie Files (*.avi)|*.avi||");
  2614. CFileDialog Filedlg(FALSE, "*.avi", "*.avi", OFN_LONGNAMES|OFN_CREATEPROMPT|OFN_OVERWRITEPROMPT, str, this);
  2615. if(Filedlg.DoModal() == IDOK)
  2616. {
  2617. m_strSaveAVIPath = Filedlg.GetPathName();
  2618. if(BrowseFile(&m_strPlayFileName))
  2619. {
  2620. Open();
  2621. if(m_bConvertAVI)
  2622. SetAVIState();
  2623. else
  2624. SetState();
  2625. SortControl();
  2626. }
  2627. else
  2628. {
  2629. m_bConvertAVI = FALSE;
  2630. SetState();
  2631. }
  2632. }
  2633. else
  2634. {
  2635. m_bConvertAVI = FALSE;
  2636. SetState();
  2637. }
  2638. }
  2639. }
  2640. void CPlayerDlg::AppAbout()
  2641. {
  2642. // TODO: Add your command handler code here
  2643. }
  2644. void CPlayerDlg::AppHelp()
  2645. {
  2646. CHelpDlg HelpDlg;
  2647. HelpDlg.DoModal();
  2648. }
  2649. /*************************************************************************/
  2650. /*************************************************************************/
  2651. /*************************************************************************/
  2652. /* menu operation over
  2653. /*************************************************************************/
  2654. /*************************************************************************/
  2655. /*************************************************************************/
  2656. /*************************************************************************/
  2657. /*************************************************************************/
  2658. /*************************************************************************/
  2659. /* when you click the menu item, you come here
  2660. /*************************************************************************/
  2661. /*************************************************************************/
  2662. /*************************************************************************/
  2663. void CPlayerDlg::OnMenuItem(UINT nID)
  2664. {
  2665. switch(nID)
  2666. {
  2667. case IDM_FILE_OPEN:
  2668. if(BrowseFile(&m_strPlayFileName))
  2669. {
  2670. Open();
  2671. SetState();
  2672. }
  2673. break;
  2674. case IDM_FILE_CLOSE:
  2675. Close();
  2676. SetState();
  2677. break;
  2678. case IDM_CUT_FILE:
  2679. CutFile();
  2680. break;
  2681. case IDM_APP_EXIT:
  2682. SendMessage(WM_CLOSE);
  2683. break;
  2684. case IDM_VIEW_FULLSCREEN:
  2685. //ViewFullScreen();
  2686. break;
  2687. case IDM_VIEW_ZOOM_50:
  2688. case IDM_VIEW_ZOOM_100:
  2689. case IDM_VIEW_ZOOM_200:
  2690. ViewZoom(nID);
  2691. break;
  2692. case IDM_INFO:
  2693. Infomation();
  2694. break;
  2695. case IDM_SETDISPLAY:
  2696. SetDisplay();
  2697. break;
  2698. case IDM_DEVICE0:
  2699. case IDM_DEVICE1:
  2700. case IDM_DEVICE2:
  2701. case IDM_DEVICE3:
  2702. SetDevice(nID);
  2703. break;
  2704. case IDM_PLAY_PAUSE:
  2705. if(m_enumState == State_Play)
  2706. {
  2707. Pause();
  2708. SetState();
  2709. }
  2710. else if(m_enumState == State_Pause || m_enumState == State_Stop)
  2711. {
  2712. Play();
  2713. SetState();
  2714. }
  2715. break;
  2716. case IDM_STOP:
  2717. if(m_enumState != State_Close)
  2718. {
  2719. Stop();
  2720. SetState();
  2721. }
  2722. break;
  2723. case IDM_STEPFORWARD:
  2724. if(m_enumState != State_Stop)
  2725. {
  2726. StepForward();
  2727. SetState();
  2728. }
  2729. break;
  2730. case IDM_STEPBACKWARD:
  2731. if(m_enumState != State_Stop)
  2732. {
  2733. StepBackward();
  2734. SetState();
  2735. }
  2736. break;
  2737. case IDM_GOTOSTART:
  2738. GotoStart();
  2739. break;
  2740. case IDM_GOTOEND:
  2741. GotoEnd();
  2742. break;
  2743. case IDM_SEEK:
  2744. Locate();
  2745. break;
  2746. case IDM_VIDEO_CONTROL:
  2747. VideoControl();
  2748. break;
  2749. case IDM_REPEAT:
  2750. Repeat();
  2751. break;
  2752. case IDM_STREAM_TYPE:
  2753. StreamType();
  2754. break;
  2755. case IDM_DEFLASH:
  2756. Deflash();
  2757. break;
  2758. case IDM_QUALITY:
  2759. Quality();
  2760. break;
  2761. case IDM_PREVIEW50:
  2762. break;
  2763. case IDM_SHARPEN_NONE:
  2764. case IDM_SHARPEN_LEVEL1:
  2765. case IDM_SHARPEN_LEVEL2:
  2766. case IDM_SHARPEN_LEVEL3:
  2767. case IDM_SHARPEN_LEVEL4:
  2768. case IDM_SHARPEN_LEVEL5:
  2769. case IDM_SHARPEN_LEVEL6:
  2770. break;
  2771. case IDM_THROW0:
  2772. case IDM_THROW1:
  2773. case IDM_THROW2:
  2774. ThrowB(nID);
  2775. break;
  2776. case IDM_DISNORMAL:
  2777. case IDM_DISQUARTER:
  2778. DisplayType(nID);
  2779. break;
  2780. case IDM_TIMER1:
  2781. case IDM_TIMER2:
  2782. SelectTimer(nID);
  2783. break;
  2784. case IDM_RESET_BUF:
  2785. ResetBuf();
  2786. break;
  2787. case IDM_CAP_BMP:
  2788. case IDM_CAP_JPEG:
  2789. CapPicType(nID);
  2790. break;
  2791. case IDM_CAPPIC_PATH:
  2792. CappicPath();
  2793. break;
  2794. case IDM_CONVERT:
  2795. ConvertToAVI();
  2796. break;
  2797. case IDM_APP_HELP:
  2798. AppHelp();
  2799. break;
  2800. case IDM_APP_ABOUT:
  2801. AppAbout();
  2802. break;
  2803. default:
  2804. break;
  2805. }
  2806. }
  2807. /*************************************************************************/
  2808. /*************************************************************************/
  2809. /*************************************************************************/
  2810. /* when you click the button item, you come here
  2811. /*************************************************************************/
  2812. /*************************************************************************/
  2813. /*************************************************************************/
  2814. void CPlayerDlg::OnButtonItem(UINT nID)
  2815. {
  2816. switch(nID)
  2817. {
  2818. case IDC_PLAY:
  2819. Play();
  2820. break;
  2821. case IDC_PAUSE:
  2822. Pause();
  2823. break;
  2824. case IDC_STOP:
  2825. Stop();
  2826. break;
  2827. case IDC_GOTOSTART:
  2828. GotoStart();
  2829. break;
  2830. case IDC_SLOW:
  2831. Play();
  2832. Slow();
  2833. break;
  2834. case IDC_FAST:
  2835. Play();
  2836. Fast();
  2837. break;
  2838. case IDC_GOTOEND:
  2839. GotoEnd();
  2840. break;
  2841. case IDC_STEP:
  2842. StepForward();
  2843. break;
  2844. case IDC_STEPBACK:
  2845. StepBackward();
  2846. break;
  2847. case IDC_CAPPIC:
  2848. Cappic();
  2849. break;
  2850. case IDC_SOUND:
  2851. Sound();
  2852. break;
  2853. default:
  2854. break;
  2855. }
  2856. SetState();
  2857. }
  2858. //void CPlayerDlg::OnBnClickedButton1()
  2859. //{
  2860. // m_strPlayFileName = "D:\\stream3_0.264";
  2861. // Open();
  2862. // SetState();
  2863. //}
  2864. void CPlayerDlg::OnBnClickedBtnQuery()
  2865. {
  2866. DWORD returnValue;
  2867. CTime timeB,timeE;
  2868. m_timeBegin.GetTime( timeB );
  2869. m_timeEnd.GetTime( timeE );
  2870. CString sSt,sEt,sSd,sEd;
  2871. sSd.Format("%d%02d%02d",timeB.GetYear(),timeB.GetMonth(),timeB.GetDay());
  2872. sSt.Format(_T("%02d%02d%02d"),timeB.GetHour(),timeB.GetMinute(),timeB.GetSecond());//0,0,0);//
  2873. sEd.Format("%d%02d%02d",timeE.GetYear(),timeE.GetMonth(),timeE.GetDay());
  2874. sEt.Format(_T("%02d%02d%02d"),timeE.GetHour(),timeE.GetMinute(),timeE.GetSecond());//23,59,59);//
  2875. double dBegin=0.0,dEnd=0.0,dNow=0.0,dTemp=0.0;
  2876. dBegin = atof( sSd+sSt );
  2877. dEnd = atof( sEd+sEt );
  2878. if( dBegin > dEnd )
  2879. {
  2880. MessageBox( "时间输入有误!");
  2881. return;
  2882. }
  2883. m_List_Vedio.DeleteAllItems();
  2884. g_strAllVideoFile.RemoveAll();
  2885. //CStringArray sArrayTemp;
  2886. CString sPath,str;
  2887. if( SetCurrentDirectory(g_strVideoPath) == TRUE)
  2888. {
  2889. CFileFind finder;
  2890. BOOL bWorking = finder.FindFile("*.264");
  2891. while (bWorking)
  2892. {
  2893. bWorking = finder.FindNextFile();//1_2010-10-17-101010.264
  2894. sPath = finder.GetFileName();
  2895. g_strAllVideoFile.Add( sPath );
  2896. str = sPath.Mid( 2,17 );
  2897. str.Delete(10);
  2898. str.Delete(7);
  2899. str.Delete(4);
  2900. dNow = atof(str);
  2901. if( dNow>=dBegin && dNow<=dEnd )
  2902. {
  2903. m_List_Vedio.InsertItem( 0,sPath );
  2904. }
  2905. }
  2906. CString str1,str2,s1,s2,sTemp;
  2907. for( int i=0;i<g_strAllVideoFile.GetCount();i++ )
  2908. {
  2909. str1 = g_strAllVideoFile[i];
  2910. s1 = str1.Mid( 2,17 );
  2911. s1.Delete(10);
  2912. s1.Delete(7);
  2913. s1.Delete(4);
  2914. dBegin = atof(s1);
  2915. for( int j=i+1;j<g_strAllVideoFile.GetCount();j++ )
  2916. {
  2917. str2 = g_strAllVideoFile[j];
  2918. s2 = str2.Mid( 2,17 );
  2919. s2.Delete(10);
  2920. s2.Delete(7);
  2921. s2.Delete(4);
  2922. dEnd = atof(s2);
  2923. if( dEnd<dBegin )
  2924. {
  2925. dTemp = dBegin;
  2926. dBegin = dEnd;
  2927. dEnd = dTemp;
  2928. sTemp = str1;
  2929. str1 = str2;
  2930. str2 = sTemp;
  2931. g_strAllVideoFile[i] = str1;
  2932. g_strAllVideoFile[j] = str2;
  2933. }
  2934. }
  2935. }
  2936. }
  2937. else
  2938. {
  2939. returnValue = GetLastError();
  2940. }
  2941. }
  2942. void CPlayerDlg::OnNMDblclkListVedio(NMHDR *pNMHDR, LRESULT *pResult)
  2943. {
  2944. // TODO: 在此添加控件通知处理程序代码
  2945. int iListCount = m_List_Vedio.GetItemCount();
  2946. POSITION pos = m_List_Vedio.GetFirstSelectedItemPosition();
  2947. int nListSel = m_List_Vedio.GetNextSelectedItem(pos);
  2948. if(nListSel>=iListCount || nListSel==-1)
  2949. {
  2950. return;
  2951. }
  2952. ////////////////////////////////////////////////
  2953. CString str;
  2954. str = m_List_Vedio.GetItemText( nListSel,0 );
  2955. m_strPlayFileName = str;
  2956. Open();
  2957. SetState();
  2958. *pResult = 0;
  2959. }
  2960. void CPlayerDlg::Init()
  2961. {
  2962. if( m_bInit ) return;
  2963. m_bInit = true;
  2964. m_dwScreenWidth = GetSystemMetrics(SM_CXSCREEN);
  2965. m_dwScreenHeight = GetSystemMetrics(SM_CYSCREEN);
  2966. m_rcScreen.left = 0;
  2967. m_rcScreen.right = m_dwScreenWidth;
  2968. m_rcScreen.top = 0;
  2969. m_rcScreen.bottom= m_dwScreenHeight;
  2970. // Init Play Slider
  2971. VERIFY(m_PlaySlider.CreateFromStatic(
  2972. SBS_HORZ|WS_CHILD|SS_LEFT|SS_NOTIFY|WS_VISIBLE,
  2973. this, IDC_PLAY_RECT_SLIDER, IDC_PLAY_SLIDER));
  2974. m_PlaySlider.SetScrollRange(0, PLAYER_SLIDER_MAX);
  2975. m_PlaySlider.EnableThumbColor(FALSE);
  2976. m_PlaySlider.EnableThumbGripper(TRUE);
  2977. m_PlaySlider.EnableChannelColor(FALSE);
  2978. // Init Sound Slider
  2979. #ifdef _WAVE_ADJ
  2980. m_SoundSlider.SetRangeMin(MIN_WAVE_COEF);
  2981. m_SoundSlider.SetRangeMax(MAX_WAVE_COEF);
  2982. #else
  2983. m_SoundSlider.SetRangeMin(0);
  2984. m_SoundSlider.SetRangeMax(0xffff-1);
  2985. #endif
  2986. m_SoundSlider.SetLineSize(1);
  2987. m_SoundSlider.SetPageSize(5);
  2988. NAME(PlayM4_SetVolume)(PORT,m_SoundSlider.GetPos());
  2989. // Init the parameters
  2990. m_StartPoint.x = 0;
  2991. m_StartPoint.y = 0;
  2992. m_dwTotalFrames = 0;
  2993. m_dwMaxFileTime = 0;
  2994. m_dwDisplayHour = 0;
  2995. m_dwDisplayMinute = 0;
  2996. m_dwDisplaySecond = 0;
  2997. m_nPrePlayPos = 0;
  2998. m_dwOldDeviceNum = 0;
  2999. m_npic_bmp = 0;
  3000. m_npic_jpeg = 0;
  3001. m_nCapPicType = 0;
  3002. m_strCapPicPath = _T("");
  3003. m_bStartDraw = FALSE;
  3004. m_bSound = FALSE;
  3005. m_bOpen = FALSE;
  3006. m_bFullScreen = FALSE;
  3007. m_bRepeatPlay = FALSE;
  3008. m_bStreamType = FALSE;
  3009. m_bConvertAVI = FALSE;
  3010. m_bPicQuality = TRUE;
  3011. m_bDeflash = TRUE;
  3012. #ifdef _HIGH_FRUID
  3013. m_bHighFluid = TRUE;
  3014. #else
  3015. m_bHighFluid = FALSE;
  3016. #endif
  3017. m_bFileRefCreated = FALSE;
  3018. m_strPlayStateText = _T("准备就绪");
  3019. m_ctrlPlayText.ShowText(m_strPlayStateText);
  3020. m_strSaveAVIPath = _T("");
  3021. // Init state text control
  3022. m_ctrlPlayText.SetTextColor(RGB(255,255,255), FALSE);
  3023. m_ctrlPlayText.SetBackgroundColor(RGB(0,0,0), FALSE);
  3024. m_ctrlPlayText.SetBold(TRUE, FALSE);
  3025. // init the sub dialogs
  3026. m_pSeek = new CSeek(this);
  3027. m_pDisplayRegion = new CDisplayRect(this);
  3028. m_pVideoControl = new CVideoCtrlDlg(this);
  3029. // bitmap
  3030. m_BlackBmp.LoadBitmap(IDB_BLACK);
  3031. m_OverlayBmp.LoadBitmap(IDB_OVERLAY);
  3032. #ifdef _FOR_HIKPLAYM4_DLL_
  3033. m_HikvisionBmp.LoadBitmap(IDB_HIKVISION);
  3034. SetWindowText("HIKVISION 播放器");
  3035. //m_HikvisionBmp.CreateBitmap( 500,488,1,8,NULL );
  3036. // DWORD dwCount;
  3037. //BITMAP bm;
  3038. // m_HikvisionBmp.GetObject(sizeof(bm),&bm);
  3039. // dwCount = bm.bmWidthBytes * bm.bmHeight; //得到buf大小
  3040. #else
  3041. m_HikvisionBmp.LoadBitmap(IDB_BLACK);
  3042. SetWindowText("播放器");
  3043. #endif
  3044. // init state
  3045. m_enumState = State_Close;
  3046. SetState();
  3047. // set the capture picture call back function;
  3048. NAME(PlayM4_SetDisplayCallBack)(PORT, DisplayCBFun);
  3049. // set the wave audio call back funtion;
  3050. NAME(PlayM4_SetAudioCallBack)(PORT, WaveCBFun, (long)this);
  3051. #if (WINVER > 0x0400)
  3052. // If do not support multi monitor,may not call!
  3053. HMONITOR hMonitor;
  3054. char chDriverDesp[50];
  3055. char chDriverName[50];
  3056. NAME(PlayM4_InitDDrawDevice)();
  3057. DWORD nVal=NAME(PlayM4_GetDDrawDeviceTotalNums)();
  3058. if(nVal >= 1)
  3059. {
  3060. nVal = min(nVal, MAX_DISPLAY_DEVICE);
  3061. for(DWORD nCount = 1; nCount <= nVal; nCount ++)
  3062. {
  3063. ZeroMemory(chDriverDesp, 50);
  3064. NAME(PlayM4_GetDDrawDeviceInfo)(nCount, chDriverDesp, 50, chDriverName, 50, &hMonitor);
  3065. //m_pMainMenu->GetSubMenu(1)->InsertMenu(IDM_TEMP_DEVICE, MF_BYCOMMAND, IDM_DEVICE0 + nCount - 1, chDriverDesp);
  3066. }
  3067. }
  3068. else
  3069. {
  3070. ZeroMemory(chDriverDesp, 50);
  3071. NAME(PlayM4_GetDDrawDeviceInfo)(0, chDriverDesp, 50, chDriverName, 50, &hMonitor);
  3072. //m_pMainMenu->GetSubMenu(1)->InsertMenu(IDM_TEMP_DEVICE, MF_BYCOMMAND, IDM_DEVICE0, chDriverDesp);
  3073. }
  3074. //m_pMainMenu->GetSubMenu(1)->RemoveMenu(IDM_TEMP_DEVICE, MF_BYCOMMAND);
  3075. //m_pMainMenu->CheckMenuItem(IDM_DEVICE0, MF_CHECKED);
  3076. NAME(PlayM4_SetDDrawDevice)(PORT, 0);
  3077. #endif
  3078. // Test adapter Capability;
  3079. TestCapability(0);
  3080. NAME(PlayM4_SetFileEndMsg)(PORT, m_hWnd, WM_FILE_END);
  3081. NAME(PlayM4_SetEncChangeMsg)(PORT, m_hWnd, WM_ENC_CHANGE);
  3082. // used for command line
  3083. if(m_strPlayFileName.Compare(""))
  3084. {
  3085. Open();
  3086. SetState();
  3087. }
  3088. UpdateData(FALSE);
  3089. SortControl();
  3090. }