?? srttosmidlg.cpp
字號:
// SrtToSmiDlg.cpp : implementation file
//
#include "stdafx.h"
#include "SrtToSmi.h"
#include "SrtToSmiDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CSrtToSmiDlg dialog
CSrtToSmiDlg::CSrtToSmiDlg(CWnd* pParent /*=NULL*/)
: CDialog(CSrtToSmiDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CSrtToSmiDlg)
m_name = _T("");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CSrtToSmiDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSrtToSmiDlg)
DDX_Text(pDX, IDC_NAME, m_name);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CSrtToSmiDlg, CDialog)
//{{AFX_MSG_MAP(CSrtToSmiDlg)
ON_BN_CLICKED(IDC_OUT, OnOut)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSrtToSmiDlg message handlers
BOOL CSrtToSmiDlg::OnInitDialog()
{
CDialog::OnInitDialog();
HKEY hKey;
DWORD dwDisp;
CString sz;
sz=L"SrtFile";
RegCreateKeyEx(HKEY_CLASSES_ROOT,_T("\\.Srt"),0,NULL,0,0,NULL,&hKey,&dwDisp);
if(dwDisp==REG_CREATED_NEW_KEY)
RegCreateKeyEx(HKEY_CLASSES_ROOT,_T("\\.Srt"),0,NULL,0,0,NULL,&hKey,&dwDisp);
RegSetValueEx(hKey,NULL,NULL,REG_SZ,(BYTE*)sz.GetBuffer(0),sz.GetLength()*2+2);
sz.ReleaseBuffer();
RegCloseKey(hKey);
RegCreateKeyEx(HKEY_CLASSES_ROOT,_T("\\SrtFile"),0,NULL,0,0,NULL,&hKey,&dwDisp);
if(dwDisp==REG_CREATED_NEW_KEY)
RegCreateKeyEx(HKEY_CLASSES_ROOT,_T("\\SrtFile"),0,NULL,0,0,NULL,&hKey,&dwDisp);
sz=L"Srt文件";
RegSetValueEx(hKey,NULL,NULL,REG_SZ,(BYTE*)sz.GetBuffer(0),sz.GetLength()*2+2);
sz.ReleaseBuffer();
RegCloseKey(hKey);
RegCreateKeyEx(HKEY_CLASSES_ROOT,_T("\\SrtFile\\Shell\\Open\\Command"),0,NULL,0,0,NULL,&hKey,&dwDisp);
if(dwDisp==REG_CREATED_NEW_KEY)
RegCreateKeyEx(HKEY_CLASSES_ROOT,_T("\\SrtFile\\Shell\\Open\\Command"),0,NULL,0,0,NULL,&hKey,&dwDisp);
::GetModuleFileName(AfxGetApp()->m_hInstance,sz.GetBuffer(MAX_PATH),MAX_PATH);
sz.ReleaseBuffer();
sz+=L" %1";
RegSetValueEx(hKey,NULL,NULL,REG_SZ,(BYTE*)sz.GetBuffer(0),sz.GetLength()*2+2);
sz.ReleaseBuffer();
RegCloseKey(hKey);
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
CenterWindow(GetDesktopWindow()); // center to the hpc screen
CString str=::GetCommandLine();
if(!str.IsEmpty())
{
SetWindowText(L"轉換中...");
SrtToSmi(&str);
OnOK();
}
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
}
void CSrtToSmiDlg::SrtToSmi(CString *name)
{
CFile srt,smi;
if(srt.Open(*name,CFile::modeRead))
{
name->MakeReverse();
name->Delete(0,name->Find(L'.'));
name->MakeReverse();
name->Insert(name->GetLength(),L"smi");
if(smi.Open(*name,CFile::modeCreate|CFile::modeReadWrite))
{
CString str;
char smit[]="<SAMI>\r\n<HEAD>\r\n<STYLE TYPE=\"text/css\">\r\n<!--\r\nP {margin-left: 16pt; margin-right: 16pt; margin-bottom: 16pt; margin-top: 16pt;\r\ntext-align: center; font-size: 18pt; font-family: arial; font-weight: bold; color: #f0f0f0;}\r\n.UNKNOWNCC {Name:Unknown; lang:en-US; SAMIType:CC;}\r\n-->\r\n</STYLE>\r\n</HEAD>\r\n\r\n<BODY>\r\n";
char smi1[]="<br>";
char smi2[]="</BODY>";
char sz[256];
smi.Write(smit,sizeof smit-1);
WORD ut;
srt.Read(&ut,sizeof ut);
DWORD len=srt.GetLength();
if(ut!=0xfeff)
{
srt.SeekToBegin();
char *m_p=new char[len];
srt.Read(m_p,len);
::MultiByteToWideChar(CP_ACP,0,m_p,len,str.GetBufferSetLength(len),len);
str.ReleaseBuffer();
delete m_p;
}
else
{
srt.Read(str.GetBufferSetLength(len),len);
str.ReleaseBuffer();
}
CString strl,strr,strt,mm,stre;
int i=1;
int HH,MM,SS,HH1,MM1,SS1;
CString MS,MS1;
while(str.Find(L'\n')!=-1)
{
str.TrimLeft();
if(str.IsEmpty())continue;
int st=str.Find(L'\n')-1;
mm=str.Left(st);
str=str.Right(str.GetLength()-st-2);
if(mm.IsEmpty())continue;
mm.TrimLeft();
if(mm.GetAt(2)==':'&&mm.GetAt(5)==':'&&mm.GetAt(8)==',')
{
HH=_wtoi(mm.Left(2))*60*60;
mm.Delete(0,3);
MM=_wtoi(mm.Left(2))*60;
mm.Delete(0,3);
SS=_wtoi(mm.Left(2));
mm.Delete(0,3);
MS=mm.Left(3);
mm.Delete(0,8);
HH1=_wtoi(mm.Left(2))*60*60;
mm.Delete(0,3);
MM1=_wtoi(mm.Left(2))*60;
mm.Delete(0,3);
SS1=_wtoi(mm.Left(2));
mm.Delete(0,3);
MS1=mm.Left(3);
mm.Format(L"<SYNC Start=%d%s><P Class=UNKNOWNCC>\r\n",HH+MM+SS,MS);
WideCharToMultiByte(CP_ACP,0,mm,-1,sz,mm.GetLength()*2+2,0,0);
smi.Write(sz,strlen(sz));
BOOL isE=FALSE;
while(str.Find(L'\n')!=-1&&str.GetAt(0)!=L'\r')
{
str.TrimLeft();
if(str.IsEmpty())break;
int st=str.Find(L'\n')-1;
mm=str.Left(st);
str=str.Right(str.GetLength()-st-2);
if(mm.IsEmpty())continue;
if(isE)
smi.Write(smi1,sizeof smi1-1);
mm.TrimLeft();
mm.TrimRight();
WideCharToMultiByte(CP_ACP,0,mm,-1,sz,mm.GetLength()*2+2,0,0);
smi.Write(sz,strlen(sz));
isE=TRUE;
}
mm.Format(L"\r\n<SYNC Start=%d%s><P Class=UNKNOWNCC> \r\n",HH1+MM1+SS1,MS1);
WideCharToMultiByte(CP_ACP,0,mm,-1,sz,mm.GetLength()*2+2,0,0);
smi.Write(sz,strlen(sz));
}
}
smi.Write(smi2,sizeof smi2);
smi.Close();
}
srt.Close();
}
}
void CSrtToSmiDlg::OnOut()
{
SrtToSmi(&m_name);
MessageBox(L"轉換成功",L"提示",MB_OK);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -