ttrayicon.cpp.svn-base
来自「ffshow源码」· SVN-BASE 代码 · 共 553 行 · 第 1/2 页
SVN-BASE
553 行
} } if (i>0) insertSeparator(hm,ord); } unsigned int len; deciD->getNumPresets(&len); char_t actPreset[1024]; deciD->getActivePresetName(actPreset,1023); for (unsigned int ii=0;ii<len;ii++) { char_t preset[1024]; deciD->getPresetName(ii,preset,1023); insertMenuItem(hm,ord,IDC_FIRST_PRESET+ii,stringreplace(ffstring(preset),_l("&"),_l("&&"),rfReplaceAll).c_str(),false,stricmp(preset,actPreset)==0,true); } insertSeparator(hm,ord); typedef array_vector<TordFilters,255> TordFiltersVector; TordFiltersVector ordFilters; const char_t *activepresetname=deciD->getActivePresetName2(); if (activepresetname) { const TfilterIDFFs *filters;deciD->getFilterIDFFs(activepresetname,&filters); for (TfilterIDFFs::const_iterator f=filters->begin();f!=filters->end();f++) if (f->idff->is) ordFilters.push_back(std::make_pair(f->idff->order?cfgGet(f->idff->order):0,f->idff)); } bool notorder=false; for (const TfilterIDFF *f=deciD->getNextFilterIDFF();f && f->name;f++) if (f->order) ordFilters.push_back(std::make_pair(f->order?cfgGet(f->order):0,f)); else notorder=true; std::sort(ordFilters.begin(),ordFilters.end(),sortOrdFilters); for (TordFiltersVector::const_iterator fo=ordFilters.begin();fo!=ordFilters.end();fo++) if (fo->second->show==0 || cfgGet(fo->second->show)) { insertMenuItemFilter(hm,ord,fo->second); insertSubmenuCallback(hm,ord,fo->second); } if (notorder) { insertSeparator(hm,ord); for (const TfilterIDFF *f=deciD->getNextFilterIDFF();f && f->name;f++) if (!f->order) { insertMenuItemFilter(hm,ord,f); insertSubmenuCallback(hm,ord,f); } } return hm;}void TtrayIconDec::negate_Param(int id){ deci->invParam(id); deci->saveGlobalSettings(); deciD->saveKeysSettings(); deciD->saveActivePreset(NULL);}LRESULT TtrayIconDec::processTrayMsg(HWND hwnd,WPARAM wprm,LPARAM lprm){/* switch (lprm) { case WM_LBUTTONDBLCLK: { IFilterGraph *m_pGraph;deciD->getGraph(&m_pGraph); IUnknown *deciV=searchFilter(m_pGraph,CLSID_FFDSHOW); IUnknown *deciA=searchFilter(m_pGraph,CLSID_FFDSHOWAUDIO); if (deciV && deciA) { TSpecifyPropertyPagesVE::show2configPages(IID_IffdshowDecVideo,deciV,IID_IffdshowDecAudio,deciA,IDS_FFDSHOWDEC,IDI_FFDSHOW,IDFF_dlgDecCurrentPage); return TRUE; } } }*/ return TtrayIconBase::processTrayMsg(hwnd,wprm,lprm); }void TtrayIconDec::processCmd(HMENU hm,int cmd){ if (cmd>=IDC_FIRST_FILTER) { int i=cmd-IDC_FIRST_FILTER; negate_Param(i); } else if (cmd>=IDC_FIRST_GRAPH) showFilterCfg(graphnames[cmd].c_str()); else if (cmd>=IDC_FIRST_PRESET) { char_t preset[1024]; GetMenuString(hm,cmd,preset,1024,MF_BYCOMMAND); deciD->setActivePreset(preset,false); } else TtrayIconBase::processCmd(hm,cmd);}void TtrayIconDec::showFilterCfg(const char_t *fltname){ OutputDebugString(fltname); IFilterGraph *m_pGraph;deciD->getGraph(&m_pGraph); WCHAR fltnameW[1024]; text<wchar_t>(fltname,fltnameW);//MultiByteToWideChar(CP_ACP,0,fltname,(int)strlen(fltname)+1,fltnameW,512); comptr<IBaseFilter> flt; if (FAILED(m_pGraph->FindFilterByName(fltnameW,&flt))) return; if (comptrQ<ISpecifyPropertyPages> ispp=flt) { CAUUID pages; if (ispp->GetPages(&pages)==S_OK) { IUnknown *ifflist[]={ispp}; OleCreatePropertyFrame(NULL,10,10,fltnameW, 1,ifflist, pages.cElems,pages.pElems, LOCALE_SYSTEM_DEFAULT, 0,0 ); CoTaskMemFree(pages.pElems); } } }bool TtrayIconDec::sortOrdFilters(const TordFilters &of1,const TordFilters &of2){ return of2.first>of1.first;}//================================== TtrayIconDecVideo =====================================TtrayIconDecVideo::TtrayIconDecVideo(IffdshowBase *Ideci):TtrayIconDec(Ideci),deciV(Ideci){ tsprintf(classname,mode&IDFF_FILTERMODE_VIDEORAW?_l("ffdshowraw_tray_%i"):_l("ffdshow_tray_%i"),rand()%1000); tip=mode&IDFF_FILTERMODE_VIDEORAW?_l("ffdshow video decoder raw"):_l("ffdshow video decoder"); icon=IDI_FFDSHOW; setThreadName(DWORD(-1),"trayDecVideo");}HMENU TtrayIconDecVideo::makeSubtitlesMenu(void){ strings files; TsubtitlesFile::findPossibleSubtitles(deci->getSourceName(),deci->getParamStr2(IDFF_subSearchDir),files); int textpinconnectedCnt=deciV->getConnectedTextPinCnt(); if (files.empty() && !textpinconnectedCnt) return NULL; HMENU hm=CreatePopupMenu(); int ord=0; const char_t *cursubflnm=deciV->getCurrentSubFlnm(); for (strings::const_iterator f=files.begin();f!=files.end();f++,ord++) insertMenuItem(hm,ord,IDC_FIRST_SUBFILE+ord,f->c_str(),false,stricmp(f->c_str(),cursubflnm)==0,true); if (textpinconnectedCnt) { std::vector<std::pair<ffstring,int> > textpins; for (int i=0;i<textpinconnectedCnt;i++) { const char_t *textname;int found,id; deciV->getConnectedTextPinInfo(i,&textname,&id,&found); if (found) { char_t s[256];strcpy(s,tr->translate(_l("embedded"))); if (textname[0]) strcatf(s,_l(" (%s)"),textname); textpins.push_back(std::make_pair(ffstring(s),id)); } } if (!textpins.empty()) { if (!files.empty()) insertSeparator(hm,ord); int subShown=deci->getParam2(IDFF_subShowEmbedded); for (size_t i=0;i<textpins.size();i++) insertMenuItem(hm,ord,IDC_FIRST_TEXTPIN+textpins[i].second,textpins[i].first.c_str(),false,textpins[i].second==subShown,true); } } if (int langcnt=deciV->getSubtitleLanguagesCount2()) { insertSeparator(hm,ord); int curlang=deci->getParam2(IDFF_subCurLang); for (int i=0;i<langcnt;i++) { const char_t *lang;deciV->getSubtitleLanguageDesc(i,&lang); if (lang[0]) insertMenuItem(hm,ord,IDC_FIRST_SUBLANG+i,lang,false,i==curlang,true); } } return ord?hm:(DestroyMenu(hm),(HMENU)NULL);}void TtrayIconDecVideo::insertSubmenuCallback(HMENU hm,int &ord,const TfilterIDFF *f){ if (f->id==IDFF_filterSubtitles) if (HMENU smn=makeSubtitlesMenu()) insertSubmenu(hm,ord,_l("Subtitle sources"),true,smn);}void TtrayIconDecVideo::processCmd(HMENU hm,int cmd){ if (cmd>=IDC_FIRST_TEXTPIN) { int id=cmd-IDC_FIRST_TEXTPIN; int oldId=deci->getParam2(IDFF_subShowEmbedded); deci->putParam(IDFF_subShowEmbedded,id==oldId?0:id); } else if (cmd>=IDC_FIRST_SUBLANG) deci->putParam(IDFF_subCurLang,cmd-IDC_FIRST_SUBLANG); else if (cmd>=IDC_FIRST_SUBFILE) { char_t subflnm[MAX_PATH]; GetMenuString(hm,cmd,subflnm,MAX_PATH,MF_BYCOMMAND); deci->putParamStr(IDFF_subFilename,subflnm); deci->putParam(IDFF_subAutoFlnm,0); deci->putParam(IDFF_isSubtitles,1); deci->putParam(IDFF_subShowEmbedded,0); } else TtrayIconDec::processCmd(hm,cmd); }//==================================== TtrayIconDecAudio ====================================TtrayIconDecAudio::TtrayIconDecAudio(IffdshowBase *Ideci):TtrayIconDec(Ideci),deciA(Ideci){ tsprintf(classname,mode&IDFF_FILTERMODE_AUDIORAW?_l("ffdshowaudioraw_tray_%i"):_l("ffdshowaudio_tray_%i"),rand()%1000); tip=mode&IDFF_FILTERMODE_AUDIORAW?_l("ffdshow raw audio decoder"):_l("ffdshow audio decoder"); icon=IDI_FFDSHOWAUDIO; setThreadName(DWORD(-1),"trayDecAudio");}HMENU TtrayIconDecAudio::createMenu(int &ord){ HMENU hm=TtrayIconDec::createMenu(ord); unsigned int num=deciA->getNumStreams2(); if (num>1) { insertSeparator(hm,ord); unsigned int cur=deciA->getCurrentStream2(); for (unsigned int i=0;i<num;i++) { char_t descr[250]; if (deciA->getStreamDescr(i,descr,250)==S_OK) { char_t stream[255];tsprintf(stream,_l("%u. %s"),i,descr); insertMenuItem(hm,ord,IDC_FIRST_STREAM+i,stream,false,i==cur,true); } } } return hm;}void TtrayIconDecAudio::processCmd(HMENU hm,int cmd){ if (cmd>=IDC_FIRST_STREAM) deciA->setCurrentStream(cmd-IDC_FIRST_STREAM); else TtrayIconDec::processCmd(hm,cmd); }//===================================== TtrayIconEnc ======================================TtrayIconEnc::TtrayIconEnc(IffdshowBase *Ideci):TtrayIconBase(Ideci),deciE(Ideci){ tsprintf(classname,_l("ffdshowEnc_tray_%i"),rand()%1000); tip=_l("ffdshow video encoder"); icon=IDI_FFVFW; setThreadName(DWORD(-1),"trayEnc");}LRESULT TtrayIconEnc::processTrayMsg(HWND hwnd,WPARAM wprm,LPARAM lprm){ switch (lprm) { case WM_LBUTTONDBLCLK: InitCommonControls(); deci->putParam(IDFF_dlgEncGraph,1); deci->showCfgDlg(NULL); return TRUE; case WM_RBUTTONUP: case WM_CONTEXTMENU: return TRUE; } return TtrayIconBase::processTrayMsg(hwnd,wprm,lprm);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?