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

📄 docfiledlg.cpp

📁 蓝天盲人电脑软件
💻 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 + -