#include "stdafx.h" #include "TWordFormulasTemplet.h" #include "AFXDISP.H" #include "ATLBASE.H" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif TWordFormulasTemplet::TWordFormulasTemplet() { m_nCount = 0; } TWordFormulasTemplet::~TWordFormulasTemplet() { //释放内存申请资源 m_wdInlineShapes.ReleaseDispatch(); m_wdDoc.ReleaseDispatch(); m_wdDocs.ReleaseDispatch(); m_wdApp.ReleaseDispatch(); } BOOL TWordFormulasTemplet::OpenWordFormulasTempletFile(LPCTSTR pszFileName) { BOOL bSuc = FALSE; if (pszFileName != NULL) { if (PathFileExists(pszFileName)) { if(!m_wdApp.CreateDispatch(_T("Word.Application"))) { AfxMessageBox(_T("不能执行Microsoft Word 8.0!")); return bSuc; } m_wdApp.SetVisible(FALSE); m_wdDocs = m_wdApp.GetDocuments(); // 打开文件 COleVariant covTrue((short)TRUE),covFalse((short)FALSE); COleVariant covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR); COleVariant _tmp(pszFileName); m_wdDoc = m_wdDocs.Open(&_tmp,& covTrue,&covTrue,&covFalse,&covOptional,& covOptional,&covFalse,&covOptional,& covOptional,&covOptional); if (m_wdDoc.m_lpDispatch != NULL) { m_wdInlineShapes = m_wdDoc.GetInlineShapes(); if (m_wdInlineShapes.m_lpDispatch != NULL) { m_nCount = m_wdInlineShapes.GetCount(); bSuc = TRUE; } } } else { CString sTip; sTip.Format(_T("\n没有找到%s文件,请确定该文件是否存在!"), pszFileName); acutPrintf(sTip); } } return bSuc; } int TWordFormulasTemplet::GetFormulaCount() { return m_nCount; } void TWordFormulasTemplet::CloseFile() { COleVariant vTrue((short)TRUE), vFalse((short)FALSE), vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); m_wdApp.Quit(vFalse, vTrue, vFalse); //释放内存申请资源 m_wdInlineShapes.ReleaseDispatch(); m_wdDoc.ReleaseDispatch(); m_wdDocs.ReleaseDispatch(); m_wdApp.ReleaseDispatch(); } void TWordFormulasTemplet::InsertFormula(int nIndex, Selection& wdSelection) { if (m_wdInlineShapes.m_lpDispatch != NULL && m_wdApp.m_lpDispatch != NULL && wdSelection.m_lpDispatch != NULL) { if (nIndex >= 1 && nIndex <= m_nCount) { InlineShape inlShap = m_wdInlineShapes.Item(nIndex); if (inlShap.m_lpDispatch != NULL) { Selection wdSel; wdSel = m_wdApp.GetSelection(); if (wdSel.m_lpDispatch != NULL) { EmptyClipboard(); // 清空剪切板 inlShap.Select(); wdSel.Copy(); wdSelection.Paste(); EmptyClipboard(); wdSel.ReleaseDispatch(); } inlShap.ReleaseDispatch(); } } } }