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

📄 cfont.cpp

📁 从FFMPEG转换而来的H264解码程序,VC下编译..
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*
 * Copyright (c) 2002-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 "Cfont.h"
#include "TfontSettings.h"
#include "IffdshowParamsEnum.h"
#include "reg.h"
#include <tchar.h>
#include <string.h>

int CALLBACK TfontPage::EnumFamCallBackCharsets(CONST LOGFONT *lpelf,CONST TEXTMETRIC *lpntm,DWORD FontType,LPARAM lParam)
{
 if (FontType&(TRUETYPE_FONTTYPE|DEVICE_FONTTYPE))
  {
   ints *sl=(ints*)lParam;
   ints::iterator i=std::find(sl->begin(),sl->end(),int(lpelf->lfCharSet));
   if (i==sl->end())
    sl->push_back(lpelf->lfCharSet);
  }
 return 1;
}

int CALLBACK TfontPage::EnumFamCallBackFonts(CONST LOGFONT *lpelf,CONST TEXTMETRIC *lpntm,DWORD FontType,LPARAM lParam)
{
 if (FontType&(TRUETYPE_FONTTYPE|DEVICE_FONTTYPE)/* && lpelf->lfCharSet==0*/)
  {
   strings *sl=(strings*)lParam;
   strings::iterator i=std::find(sl->begin(),sl->end(),ffstring(lpelf->lfFaceName));
   if (i==sl->end())
    sl->push_back(lpelf->lfFaceName);
  }
 return 1;
}

void TfontPage::init(void)
{
 tbrSetRange(IDC_TBR_FONT_SPACING,-10,10,2);
 tbrSetRange(IDC_TBR_FONT_OUTLINE_STRENGTH,0,100,10);
 tbrSetRange(IDC_TBR_FONT_OUTLINE_RADIUS,1,100,10);
 tbrSetRange(IDC_TBR_FONT_XSCALE,30,300);
 tbrSetRange(IDC_TBR_FONT_SUBSHADOW_SIZE,0,20, 1);
 tbrSetRange(IDC_TBR_FONT_SUBSHADOW_ALPHA,0,255, 10);

 strings sl;
 LOGFONT lf;lf.lfCharSet=DEFAULT_CHARSET;lf.lfPitchAndFamily=0;lf.lfFaceName[0]='\0';
 HDC dc=GetDC(m_hwnd);
 EnumFontFamiliesEx(dc,&lf,EnumFamCallBackFonts,LPARAM(&sl),0);
 ReleaseDC(m_hwnd,dc);
 for (strings::const_iterator il=sl.begin();il!=sl.end();il++)
  cbxAdd(IDC_CBX_FONT_NAME,il->c_str());

 cbxCharset=GetDlgItem(m_hwnd,IDC_CBX_FONT_CHARSET);
 boldFont=NULL;
}

void TfontPage::selectCharset(int ii)
{
 int cnt=(int)SendMessage(cbxCharset,CB_GETCOUNT,0,0);
 for (int i=0;i<cnt;i++)
  {
   int iii=(int)cbxGetItemData(IDC_CBX_FONT_CHARSET,i);
   if (ii==iii)
    {
     cbxSetCurSel(IDC_CBX_FONT_CHARSET,i);
     return;
    }
  }
 cbxSetCurSel(IDC_CBX_FONT_CHARSET,0);
 cfgSet(idff_fontcharset,(int)cbxGetItemData(IDC_CBX_FONT_CHARSET,0));
}

void TfontPage::fillCharsets(void)
{
 int oldi=cbxGetCurSel(IDC_CBX_FONT_CHARSET);
 int oldii=(oldi!=CB_ERR)?(int)cbxGetItemData(IDC_CBX_FONT_CHARSET,oldi):ANSI_CHARSET;

 cbxClear(IDC_CBX_FONT_CHARSET);memset(validCharsets,0,sizeof(validCharsets));
 ints sl;
 LOGFONT lf;
 cfgGet(idff_fontname,lf.lfFaceName,LF_FACESIZE);
 lf.lfCharSet=DEFAULT_CHARSET;lf.lfPitchAndFamily=0;
 HDC dc=GetDC(m_hwnd);
 EnumFontFamiliesEx(dc,&lf,EnumFamCallBackCharsets,LPARAM(&sl),0);
 ReleaseDC(m_hwnd,dc);
 for (int i=0;TfontSettings::charsets[i]!=-1;i++)
  {
   int data=TfontSettings::charsets[i];
   if (isIn(sl,data))
    validCharsets[data]=true;
   cbxAdd(IDC_CBX_FONT_CHARSET,_(IDC_CBX_FONT_CHARSET,TfontSettings::getCharset(data)),data);
  }
 selectCharset(oldii);
}

void TfontPage::cfg2dlg(void)
{
 font2dlg();
}

void TfontPage::font2dlg(void)
{
 size2dlg();
 shadow2dlg();
 spacingxscale2dlg();
 shadowSize2dlg();
 shadowAlpha2dlg();
 
 cbxSetDataCurSel(IDC_CBX_FONT_WEIGHT,cfgGet(idff_fontweight));
 SendDlgItemMessage(m_hwnd,IDC_CBX_FONT_NAME,CB_SELECTSTRING,WPARAM(-1),LPARAM(cfgGetStr(idff_fontname)));
 fillCharsets();
#ifdef UNICODE
 selectCharset(cfgGet(idff_fontcharset));
#else
 char_t lang[20];
 TregOpRegRead tl(HKEY_CURRENT_USER,FFDSHOW_REG_PARENT _l("\\") FFDSHOW);
 tl._REG_OP_S(IDFF_lang,_l("lang"),lang,20,_l(""));

 if (lang[0]=='\0')
  {
   TregOpRegRead tNSI(HKEY_LOCAL_MACHINE,FFDSHOW_REG_PARENT _l("\\") FFDSHOW);
   char_t langId[MAX_PATH];
   tNSI._REG_OP_S(0,_l("lang"),langId,MAX_PATH,_l("1033"));
   if(strncmp(langId,_l("1041"),4)==0)
    {lang[0]='J';lang[1]='P';}
  }

 if ((lang[0]=='J' || lang[0]=='j') && (lang[1]=='A' || lang[1]=='P' || lang[1]=='a'|| lang[1]=='p')) /* Japanese ANSI or Unicode */
  selectCharset(SHIFTJIS_CHARSET);
 else
  selectCharset(cfgGet(idff_fontcharset));
#endif
 setCheck(IDC_CHB_FONT_FAST,cfgGet(idff_fontfast));
 repaint(GetDlgItem(m_hwnd,IDC_IMG_FONT_COLOR));
}
void TfontPage::size2dlg(void)
{
 int aut;
 if (idff_fontautosize)
  {
   aut=cfgGet(idff_fontautosize);
   setCheck(IDC_CHB_FONT_AUTOSIZE,aut);
   enable(1,IDC_CHB_FONT_AUTOSIZE);
  }
 else
  {
   aut=0;
   enable(0,IDC_CHB_FONT_AUTOSIZE);
  }
 if (aut)
  {
   tbrSetRange(IDC_TBR_FONT_SIZE,0,100,5);
   tbrSet(IDC_TBR_FONT_SIZE,cfgGet(idff_fontsizea),IDC_LBL_FONT_SIZE);
   enable(1,IDC_CHB_FONT_AUTOSIZE_VIDEOWINDOW);
  }
 else
  {
   tbrSetRange(IDC_TBR_FONT_SIZE,3,127,6);
   tbrSet(IDC_TBR_FONT_SIZE,cfgGet(idff_fontsizep),IDC_LBL_FONT_SIZE);
   enable(0,IDC_CHB_FONT_AUTOSIZE_VIDEOWINDOW);
  }
 setCheck(IDC_CHB_FONT_AUTOSIZE_VIDEOWINDOW,cfgGet(IDFF_fontAutosizeVideoWindow));
}
void TfontPage::spacingxscale2dlg(void)
{
 if (idff_fontxscale)
  {
   int xscale=cfgGet(idff_fontxscale);
   tbrSet(IDC_TBR_FONT_XSCALE,cfgGet(idff_fontxscale));
   setText(IDC_LBL_FONT_XSCALE,_l("%s %i%%"),_(IDC_LBL_FONT_XSCALE),xscale);
  }
 tbrSet(IDC_TBR_FONT_SPACING,cfgGet(idff_fontspacing),IDC_LBL_FONT_SPACING);
}

INT_PTR TfontPage::msgProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
 switch (uMsg)
  {
   case WM_DESTROY:
    if (boldFont) DeleteObject(boldFont);boldFont=NULL;
    break;
   case WM_HSCROLL:
    switch (getId(HWND(lParam)))
     {
      case IDC_TBR_FONT_SIZE:
       if (cfgGet(idff_fontautosize))
        cfgSet(idff_fontsizea,tbrGet(IDC_TBR_FONT_SIZE));
       else
        cfgSet(idff_fontsizep,tbrGet(IDC_TBR_FONT_SIZE));
       size2dlg();
       return TRUE;
     }
    break;
   case WM_COMMAND:
    switch (LOWORD(wParam))
     {
      case IDC_CHB_FONT_AUTOSIZE:
       if (idff_fontautosize)
        {
         cfgSet(idff_fontautosize,getCheck(IDC_CHB_FONT_AUTOSIZE));
         size2dlg();
        }
       return TRUE;
      case IDC_CHB_FONT_AUTOSIZE_VIDEOWINDOW:
       if (idff_fontautosizevideowindow)
        cfgSet(idff_fontautosizevideowindow,getCheck(IDC_CHB_FONT_AUTOSIZE_VIDEOWINDOW));
       return TRUE;
      case IDC_IMG_FONT_COLOR:
       if (HIWORD(wParam)==STN_CLICKED)
        {
         if (chooseColor(idff_fontcolor))
          {
           font2dlg();
           repaint(GetDlgItem(m_hwnd,IDC_IMG_FONT_COLOR));
          }
         return TRUE;
        }
       break;
     }
    break;
   case WM_DRAWITEM:
    if (wParam==IDC_IMG_FONT_COLOR)
     {
      LPDRAWITEMSTRUCT dis=LPDRAWITEMSTRUCT(lParam);
      LOGBRUSH lb;
      lb.lbColor=cfgGet(idff_fontcolor);
      lb.lbStyle=BS_SOLID;
      HBRUSH br=CreateBrushIndirect(&lb);
      FillRect(dis->hDC,&dis->rcItem,br);
      DeleteObject(br);

⌨️ 快捷键说明

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