📄 ttsdlg.cpp.bak
字号:
void CTTSDlg::OnCancel()
{
CDialog::OnCancel();
}
void CTTSDlg::OnOK()
{
//CDialog::OnOK();
}
void CTTSDlg::OnTimer(UINT_PTR nIDEvent)
{
int status;
STTSQueryPlayStatus(&status);
if(status == 0 && m_senPos != m_page.end()) //读完一句话,且没有暂停或停止,读下一句
{
m_senPos++;
OnPlay();
}
CDialog::OnTimer(nIDEvent);
}
void CTTSDlg::InitIndex()
{
//初始化
m_bookIndex.resize(1000);
memset(m_readTag, 1, 1000);
memset(m_saveTag, 1, 1000);
m_isLoad = false;
m_isSave = false;
m_isCover = false;
m_isDelete = false;
//this is the index data file
ifstream file("D:/TTS-Data/index.dat");
string line;
//初始化文件索引、阅读标记以及存储标记
::getline(file, line);
//get the readTeg
istringstream temp(line);
temp >> m_lastReadBook >> m_lastSaveBook;
while(::getline(file, line))
{
istringstream input(line);
int readTag;
int bookNum;
string content;
input >> bookNum >> readTag >> content;
m_bookIndex[bookNum] = content;
m_readTag[bookNum] = readTag;
}
//初始化中间变量
m_currentBook = m_lastReadBook;
m_currentPage = m_readTag[m_lastReadBook];
m_curSaveBook = m_lastSaveBook;
m_curSavePage = m_saveTag[m_lastSaveBook];
}
void CTTSDlg::NextBook()
{
ostringstream readStr;
if(m_isSave) //当前为录制状态
{
if(m_curSaveBook != 999)
{
m_curSaveBook++;
m_curSavePage = m_saveTag[m_curSaveBook];
readStr << "录制当前阅读的内容到第" << m_curSaveBook << "书。"
<< m_bookIndex[m_curSaveBook] << "第" << m_saveTag[m_curSaveBook]
<< "页。是否确认";
//string read = "录制当前阅读的内容到第" + m_curSaveBook + "书。";
}
else
readStr << "已经到达最后一本书.";
}
else if(m_isDelete) //当前为删除状态
{
if(m_currentBook != 999)
{
m_currentBook++;
m_currentPage = 1;
readStr << "清除当前的内容, 第" << m_currentBook << "本书"
<< m_bookIndex[m_currentBook] << "是否确认";
}
else
readStr << "已经到达最后一本书.";
}
else //当前为阅读状态
{
m_isLoad = true;
if(m_currentBook != 999) //如果不是最后一本书
{
m_currentBook++;
m_currentPage = m_readTag[m_currentBook];
if(m_bookIndex[m_currentBook].length() == 0)
readStr << "第" << m_currentBook+1 << "本书,该书为空白。";
else
{
readStr << "第" << m_currentBook+1 << "本书。" << m_bookIndex[m_currentBook]
<< "当前读到第" << m_readTag[m_currentBook] << "页";
}
}
else
readStr << "已经到达最后一本书.";
}
STTSPlayString(m_hTTSInstance, (char*)readStr.str().c_str(), 1);
}
void CTTSDlg::PreBook()
{
ostringstream readStr;
if(m_isSave) //当前状态为录制
{
if(m_curSaveBook != 0)
{
m_curSaveBook--;
m_curSavePage = m_saveTag[m_curSaveBook];
readStr << "录制当前阅读的内容到第" << m_curSaveBook << "书。"
<< m_bookIndex[m_curSaveBook] << "第" << m_saveTag[m_curSaveBook]
<< "页。" << "是否确认";
}
else
readStr << "已经到达第一本书";
}
else if(m_isDelete)
{
if(m_currentBook != 0)
{
m_currentBook--;
m_currentPage = 1;
readStr << "清除当前的内容, 第" << m_currentBook << "本书"
<< m_bookIndex[m_currentBook] << "是否确认";
}
else
readStr << "已经到达第一本书";
}
else //当前状态为阅读
{
m_isLoad = true;
if(m_currentBook != 0) //如果不是第一本书
{
m_currentBook--;
m_currentPage = m_readTag[m_currentBook];
if(m_bookIndex[m_currentBook].length() == 0)
readStr << "第" << m_currentBook+1 << "本书,该书为空白。";
else
{
readStr << "第" << m_currentBook+1 << "本书。" << m_bookIndex[m_currentBook] << "当前读到第" << m_readTag[m_currentBook] << "页";
}
}
else
readStr << "已经到达第一本书";
}
STTSPlayString(m_hTTSInstance, (char*)readStr.str().c_str(), 1);
}
void CTTSDlg::NextPage()
{
ostringstream readStr;
if(m_isSave) //当前状态为录制状态
{
m_curSavePage++;
readStr << "录制当前阅读的内容到第" << m_curSavePage << "页"
<< "请按录制键开始录制";
}
else if(m_isDelete) //当前状态为删除状态
{
m_currentPage++;
ostringstream pageName;
pageName << "D:/TTS-Data" << m_currentBook << "/" << m_currentPage;
string line;
ifstream file(pageName.str().c_str());
if(!file.is_open()) //该页为空白页
{
readStr << "该页为空白页";
}
else
{
::getline(file, line);
file.close();
readStr << "清除当前的内容, 第" << m_currentPage << "页" << line
<< "请按清除键确认清除";
}
}
else //当前状态为阅读状态
{
//判断该书是否有内容
if(m_bookIndex[m_currentBook].length() == 0)
{
STTSPlayString(m_hTTSInstance, (char*)"该书为空白", 1);
return;
}
m_currentPage++;
//当前页的名字
ostringstream pageName;
pageName << "D:/TTS-Data" << m_currentBook << "/" << m_currentPage;
intptr_t handle;
_finddata_t fileInfo;
handle = _findfirst(pageName.str().c_str(), &fileInfo);
if(handle == -1) //如果该页为空
readStr << "第" << m_currentPage << "页。本页为空白页。";
else //如果该页不为空
{
ifstream file(pageName.str().c_str());
string line;
//得到该页的第一行
::getline(file, line);
readStr << "第" << m_currentPage << "页。" << line << "请按朗读暂停键开始阅读";
file.close();
_findclose(handle);
}
}
STTSPlayString(m_hTTSInstance, (char*)readStr.str().c_str(), 1);
}
void CTTSDlg::PrePage()
{
ostringstream readStr;
if(m_isSave) //当前状态为录制状态
{
if(m_curSavePage == 1)
readStr << "已到达首页";
else
{
m_curSavePage--;
readStr << "录制当前阅读的内容到第" << m_curSavePage << "页"
<< "请按录制键开始录制";
}
}
else if(m_isDelete) //当前状态为删除
{
if(m_currentPage == 1)
readStr << "已到达首页";
else if(m_currentPage > 1)
{
m_currentPage--;
ostringstream pageName;
pageName << "D:/TTS-Data" << m_currentBook << "/" << m_currentPage;
string line;
ifstream file(pageName.str().c_str());
if(!file.is_open()) //该页为空白页
readStr << "该页为空白页";
else
{
::getline(file, line);
file.close();
readStr << "清除当前的内容, 第" << m_currentPage << "页" << line
<< "请按清除键确认清除";
}
}
}
else //当前状态为阅读状态
{
//判断该书是否有内容
if(m_bookIndex[m_currentBook].length() == 0)
{
STTSPlayString(m_hTTSInstance, (char*)"该书为空白", 1);
return;
}
if(m_currentPage == 1)
readStr << "已到达首页";
else if(m_currentPage > 1)
{
m_currentPage--;
_finddata_t fileInfo;
intptr_t handle;
ostringstream pageName;
pageName << "D:/TTS-Data" << m_currentBook << "/" << m_currentPage;
handle = _findfirst(pageName.str().c_str(), &fileInfo);
if(handle == -1) //this page is empty
readStr << "第" << m_currentPage << "页。本页为空白页。";
else //this page is not empty
{
ifstream file(pageName.str().c_str());
string line;
//得到该页的第一行
::getline(file, line);
readStr << "第" << m_currentPage << "页。" << line << "请按朗读暂停键开始阅读";
file.close();
_findclose(handle);
}
}
}
STTSPlayString(m_hTTSInstance, (char*)readStr.str().c_str(), 1);
}
void CTTSDlg::LoadSavedPage()
{
ostringstream pageName;
pageName << "D:/TTS-Data/" << m_currentBook << "/"
<< m_currentPage;
ifstream file(pageName.str().c_str());
if(!file.is_open())
{
STTSPlayString(m_hTTSInstance, "该页为空白页", 1);
return;
}
if(!m_page.empty())
m_page.clear();
//装载存储的文件
string line;
while(::getline(file, line))
m_page.push_back(line);
m_page.push_back("朗读结束, 按暂停/虫读键重新听一遍,按返回键继续操作。");
file.close();
m_senPos = m_page.begin();
//更新阅读标记
m_lastReadBook = m_currentBook;
m_readTag[m_currentBook] = m_currentPage;
}
void CTTSDlg::CheckSavePage()
{
//当第二次进行确认时,保存该页内容
if(m_isSave)
{
SavePage();
return;
}
m_isSave = true;
ostringstream readStr;
readStr << "录制当前阅读的内容到第"<< m_lastSaveBook << "书。"
<< m_bookIndex[m_lastSaveBook].c_str() << "第"
<< m_saveTag[m_lastSaveBook] << "页。" << "是否确认";
STTSPlayString(m_hTTSInstance, (char*)readStr.str().c_str(), 1);
}
void CTTSDlg::SavePage()
{
ostringstream pageName;
pageName << "D:/TTS-Data/" << m_curSavePage << "/"
<< m_curSavePage;
if(m_isCover) //用户要求覆盖该页内容
{
ofstream file(pageName.str().c_str());
for(list<string>::iterator pos = m_page.begin();
pos != m_page.end(); pos++)
file << *pos << endl;
file.close();
//更新录制标记
m_lastSaveBook = m_curSaveBook;
m_saveTag[m_curSaveBook] = m_curSavePage + 1;
//表示录制成功
m_isCover = false;
m_isSave = false;
STTSPlayString(m_hTTSInstance, "该页内容已经录制", 1);
}
else
{
//检查该页内是否已经有内容
ifstream checkFile(pageName.str().c_str());
if(!checkFile.is_open()) //该页为空白页
{
//写入文件
ofstream file(pageName.str().c_str());
for(list<string>::iterator pos = m_page.begin();
pos != m_page.end(); pos++)
file << *pos << endl;
file.close();
//更新录制标记
m_lastSaveBook = m_curSaveBook;
m_saveTag[m_curSaveBook] = m_curSavePage + 1;
m_isSave = false; //录制成功
STTSPlayString(m_hTTSInstance, "该页内容已经录制", 1);
}
else //该页已有内容
{
STTSPlayString(m_hTTSInstance, "本页已有内容,按录制键覆盖或选择其他页", 1);
m_isCover = true;
}
}
//录制一本书的第一页,更新书目索引
if(m_curSavePage == 1)
{
//这本书原本为空
if(m_bookIndex[m_curSaveBook].length() == 0)
{
m_bookIndex[m_curSaveBook] = *m_page.begin();
m_readTag[m_curSaveBook] = 1;
}
else
m_bookIndex[m_curSaveBook] = *m_page.begin();
}
}
void CTTSDlg::CheckDelete()
{
if(m_isDelete)
{
Delete();
return;
}
m_isDelete = true;
ostringstream readStr;
readStr << "清除当前的内容, 第" << m_lastSaveBook << "本书"
<< m_bookIndex[m_lastSaveBook] << "是否确认";
STTSPlayString(m_hTTSInstance, (char*)readStr.str().c_str(), 1);
}
void CTTSDlg::Delete()
{
ostringstream name;
if(m_currentPage == 1) //清除整书
{
name << "D:/TTS-Data/" << m_curSavePage << "/*.*";
_finddata_t fileInfo;
intptr_t handle;
handle = _findfirst(name.str().c_str(), &fileInfo);
//删除该目录下所有文件
if(handle != -1)
{
do
{
remove(fileInfo.name);
}while(_findnext(handle, &fileInfo));
}
//更新书目索引
m_bookIndex[m_currentBook] = "";
m_readTag[m_currentBook] = 1;
m_saveTag[m_currentBook] = 1;
}
else //清除一页
{
name << "D:/TTS-Data/" << m_curSavePage << "/"
<< m_curSavePage;
ifstream checkFile(name.str().c_str());
if(!checkFile.is_open()) //该页为空白页
return;
remove(name.str().c_str());
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -