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

📄 mainfrm.cpp

📁 一个wince的TEXT阅读器源代码
💻 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 + -