⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clogoaway.cpp

📁 从FFMPEG转换而来的H264解码程序,VC下编译..
💻 CPP
字号:
/*
 * Copyright (c) 2004-2006 Milan Cutka
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 */

#include "stdafx.h"
#include "Clogoaway.h"
#include "TlogoawaySettings.h"

const TlogoawayPage::Tcbxs TlogoawayPage::cbxs=
{
 IDC_CBX_LOGOAWAY_BORDER_N,IDFF_logoawayBordn_mode,
 IDC_CBX_LOGOAWAY_BORDER_S,IDFF_logoawayBords_mode,
 IDC_CBX_LOGOAWAY_BORDER_E,IDFF_logoawayBorde_mode,
 IDC_CBX_LOGOAWAY_BORDER_W,IDFF_logoawayBordw_mode,
 IDC_CBX_LOGOAWAY_POINT_NE,IDFF_logoawayPointne,
 IDC_CBX_LOGOAWAY_POINT_NW,IDFF_logoawayPointnw,
 IDC_CBX_LOGOAWAY_POINT_SE,IDFF_logoawayPointse,
 IDC_CBX_LOGOAWAY_POINT_SW,IDFF_logoawayPointsw
};

void TlogoawayPage::init(void)
{
 SendDlgItemMessage(m_hwnd,IDC_UD_LOGOAWAY_X ,UDM_SETRANGE,0,MAKELONG(16384,0));
 SendDlgItemMessage(m_hwnd,IDC_UD_LOGOAWAY_Y ,UDM_SETRANGE,0,MAKELONG(16384,0));
 SendDlgItemMessage(m_hwnd,IDC_UD_LOGOAWAY_DX,UDM_SETRANGE,0,MAKELONG(16384,4));
 SendDlgItemMessage(m_hwnd,IDC_UD_LOGOAWAY_DY,UDM_SETRANGE,0,MAKELONG(16384,4));
 tbrSetRange(IDC_TBR_LOGOAWAY_BLUR,0,10,2);
 tbrSetRange(IDC_TBR_LOGOAWAY_XY,0,10,2);
}

void TlogoawayPage::cfg2dlg(void)
{
 setCheck(IDC_CHB_LOGOAWAY_LUMAONLY,cfgGet(IDFF_logoawayLumaOnly));
 SetDlgItemInt(m_hwnd,IDC_ED_LOGOAWAY_X ,deci->getParam2(IDFF_logoawayX ),FALSE);
 SetDlgItemInt(m_hwnd,IDC_ED_LOGOAWAY_Y ,deci->getParam2(IDFF_logoawayY ),FALSE);
 SetDlgItemInt(m_hwnd,IDC_ED_LOGOAWAY_DX,deci->getParam2(IDFF_logoawayDx),FALSE);
 SetDlgItemInt(m_hwnd,IDC_ED_LOGOAWAY_DY,deci->getParam2(IDFF_logoawayDy),FALSE);
 mode2dlg();
 borders2dlg();
 points2dlg();
}
void TlogoawayPage::mode2dlg(void)
{
 int mode=cfgGet(IDFF_logoawayMode);
 cbxSetDataCurSel(IDC_CBX_LOGOAWAY_MODE,mode);

 static const int idBlur[]={IDC_LBL_LOGOAWAY_BLUR,IDC_TBR_LOGOAWAY_BLUR,0};
 static const int idXY[]={IDC_LBL_LOGOAWAY_XY,IDC_TBR_LOGOAWAY_XY,0};
 static const int idSolid[]={IDC_LBL_LOGOAWAY_SOLIDCOLOR,IDC_IMG_LOGOAWAY_SOLIDCOLOR,0};
 static const int idParambitmap[]={IDC_LBL_LOGOAWAY_PARAMBITMAP,IDC_ED_LOGOAWAY_PARAMBITMAP,IDC_BT_LOGOAWAY_PARAMBITMAP,0};
 if (mode==TlogoawaySettings::MODE_SOLIDFILL)
  {
   show(0,idBlur);show(0,idXY);show(1,idSolid);
  }
 else
  {
   show(0,idSolid);show(1,idBlur);show(1,idXY);
   tbrSet(IDC_TBR_LOGOAWAY_BLUR,cfgGet(IDFF_logoawayBlur),IDC_LBL_LOGOAWAY_BLUR,_(IDC_LBL_LOGOAWAY_BLUR,mode==TlogoawaySettings::MODE_UGLARM || mode==TlogoawaySettings::MODE_SHAPEUGLARM?_l("Exponent:"):_l("Blur:")));
   enable(mode==TlogoawaySettings::MODE_XY || mode==TlogoawaySettings::MODE_SHAPEXY || mode==TlogoawaySettings::MODE_UGLARM || mode==TlogoawaySettings::MODE_SHAPEUGLARM,idBlur);
   tbrSet(IDC_TBR_LOGOAWAY_XY,cfgGet(IDFF_logoawayVhweight),IDC_LBL_LOGOAWAY_XY);
   enable(mode==TlogoawaySettings::MODE_XY || mode==TlogoawaySettings::MODE_SHAPEXY,idXY);
  }
 enable(mode==TlogoawaySettings::MODE_SHAPEXY || mode==TlogoawaySettings::MODE_SHAPEUGLARM,idParambitmap);
 setDlgItemText(m_hwnd,IDC_ED_LOGOAWAY_PARAMBITMAP,cfgGetStr(IDFF_logoawayParamBitmapFlnm));
}
void TlogoawayPage::borders2dlg(void)
{
 for (int i=0;i<4;i++)
  cbxSetDataCurSel(cbxs.borders[i].id,cfgGet(cbxs.borders[i].idff));
}
void TlogoawayPage::points2dlg(void)
{
 for (int i=0;i<4;i++)
  cbxSetDataCurSel(cbxs.points[i].id,cfgGet(cbxs.points[i].idff));
}

INT_PTR TlogoawayPage::msgProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
 switch (uMsg)
  {
   case WM_COMMAND:
    switch (LOWORD(wParam))
     {
      case IDC_CBX_LOGOAWAY_MODE:
       if (HIWORD(wParam)==CBN_SELCHANGE)
        {
         cfgSet(IDFF_logoawayMode,(int)cbxGetCurItemData(IDC_CBX_LOGOAWAY_MODE));
         mode2dlg();
         return TRUE;
        }
       break;
      case IDC_CBX_LOGOAWAY_BORDER_PRESETS:
       if (HIWORD(wParam)==CBN_SELCHANGE)
        {
         const TlogoawaySettings::TborderPreset &preset=TlogoawaySettings::borderPresets[cbxGetCurSel(IDC_CBX_LOGOAWAY_BORDER_PRESETS)];
         cfgSet(IDFF_logoawayBordn_mode,preset.n);
         cfgSet(IDFF_logoawayBordw_mode,preset.w);
         cfgSet(IDFF_logoawayBorde_mode,preset.e);
         cfgSet(IDFF_logoawayBords_mode,preset.s);
         borders2dlg();
         return TRUE;
        }
       break;
      case IDC_IMG_LOGOAWAY_SOLIDCOLOR:
       if (HIWORD(wParam)==STN_CLICKED)
        {
         if (chooseColor(IDFF_logoawaySolidcolor))
          InvalidateRect(GetDlgItem(m_hwnd,IDC_IMG_LOGOAWAY_SOLIDCOLOR),NULL,FALSE);
         return TRUE;
        }
       break;
      default:
       if (HIWORD(wParam)==CBN_SELCHANGE)
        for (int i=0;i<8;i++)
         if (LOWORD(wParam)==cbxs.cbxs[i].id)
          {
           cfgSet(cbxs.cbxs[i].idff,(int)cbxGetCurItemData(cbxs.cbxs[i].id));
           return TRUE;
          }
       break;
      case IDC_ED_LOGOAWAY_PARAMBITMAP:
       if (HIWORD(wParam)==EN_CHANGE && !isSetWindowText)
        {
         char_t flnm[MAX_PATH];
         GetDlgItemText(m_hwnd,IDC_ED_LOGOAWAY_PARAMBITMAP,flnm,MAX_PATH);
         cfgSet(IDFF_logoawayParamBitmapFlnm,flnm);
        }
       return TRUE;
     }
    break;
   case WM_DRAWITEM:
    if (wParam==IDC_IMG_LOGOAWAY_SOLIDCOLOR)
     {
      LPDRAWITEMSTRUCT dis=LPDRAWITEMSTRUCT(lParam);
      LOGBRUSH lb;
      lb.lbColor=cfgGet(IDFF_logoawaySolidcolor);
      lb.lbStyle=BS_SOLID;
      HBRUSH br=CreateBrushIndirect(&lb);
      FillRect(dis->hDC,&dis->rcItem,br);
      DeleteObject(br);
      return TRUE;
     }
    break;
  }
 return TconfPageDecVideo::msgProc(uMsg,wParam,lParam);
}

void TlogoawayPage::onParamFlnm(void)
{
 char_t flnm[MAX_PATH];cfgGet(IDFF_logoawayParamBitmapFlnm,flnm,MAX_PATH);
 if (dlgGetFile(false,m_hwnd,_(-IDD_LOGOAWAY,_l("Load image file")),_l("All supported (*.jpg,*.bmp,*.gif)\0*.bmp;*.jpg;*.jpeg;*.gif\0Windows Bitmap (*.bmp)\0*.bmp\0JPEG (*.jpg)\0*.jpg\0Compuserve Graphics Interchange (*.gif)\0*.gif\0"),_l("bmp"),flnm,_l("."),0))
  {
   setDlgItemText(m_hwnd,IDC_ED_LOGOAWAY_PARAMBITMAP,flnm);
   cfgSet(IDFF_logoawayParamBitmapFlnm,flnm);
  }
}

void TlogoawayPage::translate(void)
{
 TconfPageBase::translate();

 int sel=cbxGetCurSel(IDC_CBX_LOGOAWAY_MODE);
 cbxClear(IDC_CBX_LOGOAWAY_MODE);
 for (int i=0;TlogoawaySettings::modes[i].name;i++)
  cbxAdd(IDC_CBX_LOGOAWAY_MODE,_(IDC_CBX_LOGOAWAY_MODE,TlogoawaySettings::modes[i].name),TlogoawaySettings::modes[i].id);
 cbxSetCurSel(IDC_CBX_LOGOAWAY_MODE,sel);

 sel=cbxGetCurSel(IDC_CBX_LOGOAWAY_BORDER_PRESETS);
 cbxClear(IDC_CBX_LOGOAWAY_BORDER_PRESETS);
 for (int i=0;TlogoawaySettings::borderPresets[i].name;i++)
  cbxAdd(IDC_CBX_LOGOAWAY_BORDER_PRESETS,_(IDC_CBX_LOGOAWAY_BORDER_PRESETS,TlogoawaySettings::borderPresets[i].name));
 cbxSetCurSel(IDC_CBX_LOGOAWAY_BORDER_PRESETS,sel==CB_ERR?0:sel);

 int cbx;
 for (cbx=0;cbx<4;cbx++)
  {
   sel=cbxGetCurSel(cbxs.points[cbx].id);
   cbxClear(cbxs.points[cbx].id);
   for (int i=5;TlogoawaySettings::navigators[i];i++)
    cbxAdd(cbxs.points[cbx].id,_(cbxs.points[cbx].id,TlogoawaySettings::navigators[i]),i);
   cbxSetCurSel(cbxs.points[cbx].id,sel);
  }
 for (cbx=0;cbx<4;cbx++)
  {
   sel=cbxGetCurSel(cbxs.borders[cbx].id);
   cbxClear(cbxs.borders[cbx].id);
   for (int i=1;TlogoawaySettings::borderModes[i];i++)
    cbxAdd(cbxs.borders[cbx].id,_(cbxs.borders[cbx].id,TlogoawaySettings::borderModes[i]),i);
   cbxSetCurSel(cbxs.borders[cbx].id,sel);
  }
}

TlogoawayPage::TlogoawayPage(TffdshowPageDec *Iparent,const TfilterIDFF *idff):TconfPageDecVideo(Iparent,idff)
{
 resInter=IDC_CHB_LOGOAWAY;
 static const TbindCheckbox<TlogoawayPage> chb[]=
  {
   IDC_CHB_LOGOAWAY_LUMAONLY,IDFF_logoawayLumaOnly,NULL,
   0,NULL,NULL
  };
 bindCheckboxes(chb);
 static const TbindTrackbar<TlogoawayPage> htbr[]=
  {
   IDC_TBR_LOGOAWAY_BLUR,IDFF_logoawayBlur,&TlogoawayPage::mode2dlg,
   IDC_TBR_LOGOAWAY_XY,IDFF_logoawayVhweight,&TlogoawayPage::mode2dlg,
   0,0,NULL
  };
 bindHtracks(htbr);
 static const TbindEditInt<TlogoawayPage> edInt[]=
  {
   IDC_ED_LOGOAWAY_X ,0,16384,IDFF_logoawayX ,NULL,
   IDC_ED_LOGOAWAY_Y ,0,16384,IDFF_logoawayY ,NULL,
   IDC_ED_LOGOAWAY_DX,4,16384,IDFF_logoawayDx,NULL,
   IDC_ED_LOGOAWAY_DY,4,16384,IDFF_logoawayDy,NULL,
   0
  };
 bindEditInts(edInt);
 static const TbindButton<TlogoawayPage> bt[]=
  {
   IDC_BT_LOGOAWAY_PARAMBITMAP,&TlogoawayPage::onParamFlnm,
   0,NULL
  };
 bindButtons(bt);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -