📄 docfiledlg.cpp
字号:
// DocFileDlg.cpp : implementation file
//
#include "stdafx.h"
#include "BlueSky.h"
#include "DocFileDlg.h"
#include "eci.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDocFileDlg dialog
CDocFileDlg::CDocFileDlg(CWnd* pParent /*=NULL*/)
: CDialog(CDocFileDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CDocFileDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void CDocFileDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDocFileDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDocFileDlg, CDialog)
//{{AFX_MSG_MAP(CDocFileDlg)
ON_WM_CTLCOLOR()
ON_WM_LBUTTONDBLCLK()
ON_WM_PAINT()
ON_WM_TIMER()
ON_WM_RBUTTONDBLCLK()
ON_WM_MOUSEMOVE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDocFileDlg message handlers
void CDocFileDlg::OnOK()
{
}
void CDocFileDlg::OnCancel()
{
}
void CDocFileDlg::ClipWindow()
{
CRect rect(417,306,608,606);
ClipCursor(&rect);
}
BOOL CDocFileDlg::OnInitDialog()
{
CDialog::OnInitDialog();
brush.CreateSolidBrush(RGB(0,120,220));
lbbrh.CreateSolidBrush(RGB(230,230,220));
SetWindowPos(NULL,0,0,1024,768,0);
//ClipWindow();
CString strFilePath = _T("E:\\DocFile\\*.doc");
CFileFind find;
BOOL bFind = find.FindFile(strFilePath);//在指定文件夹搜索WORD文档
while (bFind)
{
bFind = find.FindNextFile();
fileList.AddTail(find.GetFilePath());
}
hEci = NULL;
pos = fileList.GetHeadPosition();
if (pos)
filename = fileList.GetAt(pos);
return TRUE;
}
HBRUSH CDocFileDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if (pWnd->m_hWnd == m_hWnd)
return brush;
return hbr;
}
void CDocFileDlg::OnLButtonDblClk(UINT nFlags, CPoint point)
{
if (point.y<355)
{
//向上搜索文档
if (pos)
{
fileList.GetPrev(pos);
if (!pos)
pos = fileList.GetHeadPosition();
filename = fileList.GetAt(pos);
MessageBox(filename);
}
}
if (point.y>355 && point.y<405)
{
//读取当前文件名
if (pos)
{
filename = fileList.GetAt(pos);
MessageBox(filename);
}
}
if (point.y>405 && point.y<455)
{
//向下搜索文档
if (pos)
{
POSITION oldPos = pos;
fileList.GetNext(pos);
if (!pos)
pos = oldPos;
filename = fileList.GetAt(pos);
MessageBox(filename);
}
}
if (point.y>455 && point.y<505)
{
//朗读文件
if (filename.GetLength()>0)
{
CRect rc(0,610,1024,768);
ClipCursor(&rc); //把鼠标移到空白区域
eciSpeakText(_T("开始朗读"),0);
GetWords(filename);
hEci = Read(strWord);
}
}
if (point.y>505 && point.y<555)
{
//返回主界面
if (hEci)
if (eciSpeaking(hEci))
{
eciStop(hEci);
eciDelete(hEci);
}
CDialog::OnCancel();
}
if (point.y>555 && point.y<605)
{
//退出系统
if (hEci)
if (eciSpeaking(hEci))
{
eciStop(hEci);
eciDelete(hEci);
}
exit(0);
}
if (point.y>=610)
{
//暂停或继续朗读文件
static bool bPause = true;
if (hEci)
if (eciSpeaking(hEci))
if (bPause)
{
eciPause(hEci,1);
bPause = false;
}
else
{
eciPause(hEci,0);
bPause = true;
}
}
CDialog::OnLButtonDblClk(nFlags, point);
}
void CDocFileDlg::OnPaint()
{
CPaintDC dc(this);
CPen pen(PS_INSIDEFRAME,5,RGB(200,180,0));
CFont font,*pOldFont,font2;
font.CreatePointFont(300,_T("楷体_GB2312"));
pOldFont = dc.SelectObject(&font);
CString s = _T("我的文件");
dc.SetBkMode(TRANSPARENT);
dc.SetTextColor(RGB(0,220,0));
dc.TextOut(435,100,s,s.GetLength());
CPen *pOldPen = dc.SelectObject(&pen);
dc.SelectStockObject(NULL_BRUSH);
CBrush brush(RGB(220,230,220));
CBrush *pOldBrush = dc.SelectObject(&brush);
dc.Rectangle(412,300,612,610);
CPen pen2(PS_SOLID,1,RGB(200,180,0));
dc.SelectObject(&pen2);
for(int i=0; i<5; i++)
{
dc.MoveTo(412,355+50*i);
dc.LineTo(612,355+50*i);
}
font2.CreatePointFont(160,_T("楷体_GB2312"));
dc.SetTextColor(RGB(255,0,0));
dc.SelectObject(&font2);
dc.TextOut(470,320,_T("向上搜索"));
dc.TextOut(470,370,_T("当前文件"));
dc.TextOut(470,420,_T("向下搜索"));
dc.TextOut(470,470,_T("朗读文件"));
dc.TextOut(470,520,_T("返 回"));
dc.TextOut(470,570,_T("退出系统"));
dc.SelectObject(pOldBrush);
dc.SelectObject(pOldPen);
dc.SelectObject(pOldFont);
}
void CDocFileDlg::GetWords(CString s)
{
_Application oWordApp;
COleVariant vFalse((short)FALSE),
vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
if (!oWordApp.CreateDispatch(_T("Word.Application"), NULL))
return ;
try
{
Documents oDocs;
_Document oDoc;
oDocs = oWordApp.GetDocuments();
oDoc = oDocs.Add(vOpt, vOpt);
oDocs.Open(COleVariant(s), vOpt, //后台打开WORD
COleVariant((short)true), vOpt, vOpt, vOpt,
vOpt, vOpt, vOpt, vOpt);
Selection oSel;
oSel = oWordApp.GetSelection();
oSel.WholeStory(); //全部选择文本
strWord=oSel.GetText();
//oDocs.Close(vOpt,vOpt,vOpt);
}
catch(COleException *e)
{
LPVOID lpMsg;
::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS, NULL, e->m_sc,
MAKELANGID(LANG_NEUTRAL,
SUBLANG_DEFAULT),(LPTSTR) &lpMsg,
0, NULL);
::MessageBox(NULL, (LPCTSTR)lpMsg, _T("COM Error"),
MB_OK | MB_SETFOREGROUND);
::LocalFree( lpMsg );
}
catch(COleDispatchException *e)
{
char msg[512];
sprintf(msg, _T("Run-time error '%d':\n\n%s"),
e->m_scError & 0x0000FFFF, e->m_strDescription);
::MessageBox(NULL, msg, _T("Server Error"),
MB_OK | MB_SETFOREGROUND);
}
oWordApp.Quit(vFalse, vOpt, vOpt);
}
HANDLE CDocFileDlg::Read(CString s)
{
//朗读文本
HANDLE h = eciNew();
eciAddText(h,s);
eciSynthesize(h);
SetTimer(10,1000,NULL);
return h;
}
BOOL CDocFileDlg::DestroyWindow()
{
KillTimer(10);
return CDialog::DestroyWindow();
}
void CDocFileDlg::OnTimer(UINT nIDEvent)
{
//跟跟朗读进度,结束后退回鼠标到自定义菜单区域
if (hEci)
if (!eciSpeaking(hEci))
{
KillTimer(10);
Sleep(1000);
eciSpeakText(_T("朗读完毕"),0);
ClipWindow();
}
CDialog::OnTimer(nIDEvent);
}
void CDocFileDlg::OnRButtonDblClk(UINT nFlags, CPoint point)
{
//停止朗读
if (hEci)
if (eciSpeaking(hEci))
eciStop(hEci);
ClipWindow();
CDialog::OnRButtonDblClk(nFlags, point);
}
void CDocFileDlg::OnMouseMove(UINT nFlags, CPoint point)
{
char c=NULL;
switch ((point.y-305)/50)
{
case 0: c='1'; break;
case 1: c='2'; break;
case 2: c='3'; break;
case 3: c='4'; break;
case 4: c='5'; break;
case 5: c='6'; break;
}
if( c!=pointchar)
{
pointchar=c;
switch(c)
{
case '1': eciSpeakText("向上搜索",0); break;
case '2': eciSpeakText("当前文件",0); break;
case '3': eciSpeakText("向下搜索",0); break;
case '4': eciSpeakText("朗读文件",0); break;
case '5': eciSpeakText("返 回",0); break;
case '6': eciSpeakText("退出系统",0); break;
}
}
CDialog::OnMouseMove(nFlags, point);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -