?? mainfrm.cpp
字號:
// MainFrm.cpp : implementation of the CMainFrame class
//
#include "stdafx.h"
#include "ReadTxt.h"
#include <Afxdlgs.h>
#include "MainFrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
// Array tbSTDButton contains relevant buttons of bitmap IDB_STD_SMALL_COLOR
static TBBUTTON tbButtons[] = {
{0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0, 0, 0, 0},
{0,ID_FILE_NEW, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1},
{1, ID_FILE_OPEN, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1},
{2, ID_FILE_SAVE, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1},
{0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0, 0, 0, 0},
{3, ID_SYNTH_PLAY_ALL, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1},
{4, ID_SYNTH_PLAY, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1},
{5, ID_SYNTH_PAUSE, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1},
{6, ID_SYNTH_STOP, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1},
{0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0, 0, 0, 0}
};
const int nNumButtons = sizeof(tbButtons)/sizeof(TBBUTTON);
const int nNumImages = 7;
const DWORD dwAdornmentFlags = 0; // exit button
#define WM_TTS_ATTRCHANGE WM_USER + 0
#define WM_TTS_PROGRESS WM_USER + 1
/////////////////////////////////////////////////////////////////////////////
// CMainFrame
IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
ON_COMMAND(ID_FILE_SAVE, OnFileSave)
ON_COMMAND(ID_FILE_NEW, OnFileNew)
ON_COMMAND(ID_EDIT_UNDO, OnEditUndo)
ON_COMMAND(ID_EDIT_CUT, OnEditCut)
ON_COMMAND(ID_EDIT_COPY, OnEditCopy)
ON_COMMAND(ID_EDIT_PASTE, OnEditPaste)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/*
ON_COMMAND(ID_SYNTH_PLAY_ALL, OnSynthPlayAll)
ON_UPDATE_COMMAND_UI(ID_SYNTH_PLAY_ALL, OnUpdateSynthPlayAll)
ON_COMMAND(ID_SYNTH_PAUSE, OnSynthPause)
ON_UPDATE_COMMAND_UI(ID_SYNTH_PAUSE, OnUpdateSynthPause)
ON_COMMAND(ID_SYNTH_PLAY, OnSynthPlay)
ON_UPDATE_COMMAND_UI(ID_SYNTH_PLAY, OnUpdateSynthPlay)
ON_COMMAND(ID_SYNTH_STOP, OnSynthStop)
ON_UPDATE_COMMAND_UI(ID_SYNTH_STOP, OnUpdateSynthStop)
ON_MESSAGE(WM_TTS_ATTRCHANGE, OnSynthAttrChange)
ON_MESSAGE(WM_TTS_PROGRESS, OnSynthProgress)
*/
/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction
CMainFrame::CMainFrame()
{
// m_nState = TTSSTATE_STOP;
// m_pText = NULL;
}
CMainFrame::~CMainFrame()
{
if ( m_pText )
delete[] m_pText;
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
// Add the buttons and adornments to the CommandBar.
if (!InsertButtons(tbButtons, nNumButtons, IDR_MAINFRAME, nNumImages) ||
!AddAdornments(dwAdornmentFlags))
{
TRACE0("Failed to add toolbar buttons\n");
return -1;
}
int width,height;
width=::GetSystemMetrics(SM_CXVIRTUALSCREEN);
height=::GetSystemMetrics(SM_CYVIRTUALSCREEN);
RECT rc={1,26,width,height};
// RECT rc={2,26,218,293};
theApp.EditList.Create(ES_AUTOVSCROLL|WS_VSCROLL|ES_MULTILINE| WS_BORDER|ES_LEFT,rc,this,IDC_VIEW_EDIT);
theApp.EditList.SetFocus();
theApp.EditList.ShowWindow(true);
return 0;
}
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics
#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
CFrameWnd::AssertValid();
}
void CMainFrame::Dump(CDumpContext& dc) const
{
CFrameWnd::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers
void CMainFrame::OnFileOpen()
{
CString str;
unsigned char HeaderCharbuf[2]={0};
// CListCtrl a;
// PathFileNdlg dlg=new PathFileNdlg;
// if (dlg.DoModal() == IDOK)
// {
// str= dlg.GetFilePath();
TCHAR szFilters[]=L"文件類型 (*.txt)|*.txt|All Files (*.*)|*.*||";
CFileDialog fileDlg(FALSE, _T("txt"), _T("*.txt"),OFN_PATHMUSTEXIST, szFilters, this);
if(IDOK==fileDlg.DoModal())
{
str=fileDlg.GetPathName();
RETAILMSG(TRUE, (L"得到文件:%s!\r\n",str));
if(str==L"")return ;
WIN32_FIND_DATA findFileData;
HANDLE hFind;
hFind = FindFirstFile(str, &findFileData);
if(hFind == INVALID_HANDLE_VALUE){ ::CloseHandle(hFind); return;}
if(findFileData.dwFileAttributes== FILE_ATTRIBUTE_DIRECTORY || findFileData.dwFileAttributes==272)
{
RETAILMSG(TRUE, (L"OK,查找文件,找到的是目錄!\r\n"));
::CloseHandle(hFind);
return;
}
HANDLE mFile;
DWORD dwSize,ReadSize=0,cbyte=0;
int len=0;
mFile=CreateFile(str,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
dwSize = GetFileSize (mFile, NULL) ;
char* databuf;
str="";
CString str1="";
databuf=new char[dwSize+2];
memset(databuf,0,dwSize+2);
SetFilePointer(mFile,ReadSize,NULL,FILE_BEGIN);
ReadFile(mFile,databuf,dwSize,&cbyte,NULL);
memcpy(HeaderCharbuf,databuf,2);
if((HeaderCharbuf[0]==0xff) && (HeaderCharbuf[1]==0xfe))
{
int i=2,j=0;
TCHAR *pbuf=new TCHAR[dwSize/2+2];
memset(pbuf,0,dwSize/2+2);
for(;i<(int)dwSize;i++)
{
if(i%2==0)
pbuf[j]=databuf[i];
else
{
pbuf[j]&=0xff;
pbuf[j]+=databuf[i]<<8;
j++;
}
}
//str=pbuf;
SetDlgItemText(IDC_VIEW_EDIT,pbuf);
delete []pbuf;
}
else
{
TCHAR *pbuf=new TCHAR[dwSize+2];
memset(pbuf,0,dwSize+2);
MultiByteToWideChar(CP_ACP, NULL,databuf,strlen(databuf),pbuf, strlen(databuf));
str=databuf;
SetDlgItemText(IDC_VIEW_EDIT,str);
delete []pbuf;
}
theApp.EditList.SetFocus();
theApp.EditList.Invalidate(true);
CloseHandle(mFile);
delete []databuf;
}
}
void CMainFrame::OnFileSave()
{
CString str;
char buf[256]={0};
TCHAR szFilters[]=L"文件類型 (*.txt)|*.txt|All Files (*.*)|*.*||";
CFileDialog fileDlg(FALSE, _T("txt"), _T("*.txt"),OFN_PATHMUSTEXIST, szFilters, this);
if(IDOK==fileDlg.DoModal())
{
str=fileDlg.GetPathName();
HANDLE mFile;
mFile=CreateFile(str,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
CString datastr;
unsigned short *pData=datastr.GetBuffer(0);
GetDlgItemText(IDC_VIEW_EDIT,datastr);
DWORD dwSize,ReadSize=0,len=0,cbyte=0;
dwSize=datastr.GetLength();
while(ReadSize<dwSize)
{
memset(buf,0,sizeof(buf));
if((dwSize-ReadSize)>128)len=128;else len=dwSize-ReadSize;
WideCharToMultiByte(CP_ACP,WC_COMPOSITECHECK,datastr.GetBuffer(0)+ReadSize,len,buf,256,NULL,NULL);
SetFilePointer(mFile,ReadSize,NULL,FILE_BEGIN);
WriteFile(mFile,buf,strlen(buf),&cbyte,NULL);
ReadSize=ReadSize+strlen(buf);
}
CloseHandle(mFile);
}
}
void CMainFrame::OnFileNew()
{
CString str=L"";
SetDlgItemText(IDC_VIEW_EDIT,str);
}
void CMainFrame::OnEditUndo()
{
theApp.EditList.Undo();
}
void CMainFrame::OnEditCut()
{
theApp.EditList.Cut();
}
void CMainFrame::OnEditCopy()
{
theApp.EditList.Copy();
}
void CMainFrame::OnEditPaste()
{
theApp.EditList.Paste();
}
/*
void CMainFrame::LockText()
{
theApp.EditList.SetReadOnly();
if ( m_pText )
delete[] m_pText;
int nLength = theApp.EditList.GetWindowTextLength() + 1;
m_pText = new TCHAR[nLength];
theApp.EditList.GetWindowText(m_pText, nLength);
}
void CMainFrame::UnlockText()
{
delete[] m_pText;
m_pText = NULL;
theApp.EditList.SetReadOnly(FALSE);
}
void CMainFrame::OnSynthPlayAll()
{
LockText();
m_nStart = 0;
SynthText(m_pText);
}
void CMainFrame::OnUpdateSynthPlayAll(CCmdUI* pCmdUI)
{
pCmdUI->Enable(TTSSTATE_STOP == m_nState && theApp.EditList.GetWindowTextLength());
}
void CMainFrame::OnSynthPause()
{
Pause();
}
void CMainFrame::OnUpdateSynthPause(CCmdUI* pCmdUI)
{
pCmdUI->Enable(TTSSTATE_PLAY == m_nState);
}
void CMainFrame::OnSynthPlay()
{
if ( TTSSTATE_STOP == GetState() )
{
LockText();
DWORD dwSel =theApp.EditList.GetSel();
m_nStart = LOWORD(dwSel);
WORD nLength = HIWORD(dwSel) - m_nStart;
if ( nLength == 0 )
SynthText(m_pText + m_nStart);
else
SynthText(m_pText + m_nStart, nLength);
}
else
Resume();
}
void CMainFrame::OnUpdateSynthPlay(CCmdUI* pCmdUI)
{
pCmdUI->Enable(m_nState != TTSSTATE_PLAY && theApp.EditList.GetWindowTextLength());
}
void CMainFrame::OnSynthStop()
{
Cancel();
}
void CMainFrame::OnUpdateSynthStop(CCmdUI* pCmdUI)
{
pCmdUI->Enable(m_nState != TTSSTATE_STOP);
}
LRESULT CMainFrame::OnSynthAttrChange(WPARAM wParam, LPARAM lParam)
{
if ( TTSATTR_STATE == wParam )
{
m_nState = lParam;
if ( TTSSTATE_STOP == lParam )
UnlockText();
}
return 0;
}
TTSERROR CMainFrame::OnAttrChange(TTSDWORD dwAttrId, TTSVAR varAttrValue)
{
PostMessage(WM_TTS_ATTRCHANGE, (WPARAM)dwAttrId, (LPARAM)varAttrValue);
return CIsPlayer4::OnAttrChange(dwAttrId, varAttrValue);
}
LRESULT CMainFrame::OnSynthProgress(WPARAM wParam, LPARAM lParam)
{
theApp.EditList.SetSel(m_nStart + (int)wParam, m_nStart + (int)lParam);
return 0;
}
TTSERROR CMainFrame::OnProgress(TTSDWORD dwProcPos, TTSDWORD dwProcLen)
{
PostMessage(WM_TTS_PROGRESS, dwProcPos / sizeof(TCHAR), (dwProcPos + dwProcLen) / sizeof(TCHAR));
return CIsPlayer4::OnProgress(dwProcPos, dwProcLen);
}
*/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -