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 + -
显示快捷键?