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

📄 dsofprint.cpp

📁 用于在线office文档编辑的控件。可以在线新建文档、修改文档
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		pEx->Delete();
	return S_OK; 	
	}
	return S_OK; 	
}
STDMETHODIMP CDsoFramerControl::FtpGetFile(BSTR strRemoteFile, BSTR strLocalFile, long * pbool)
{
 	if(!m_pFtpConnection||!m_bConnect)return 0;
	if(!strLocalFile||strLocalFile[0] ==0) return 0;
	if(!strRemoteFile||strRemoteFile[0] ==0) return 0;
	BOOL bUploaded = m_pFtpConnection->GetFile((const char *)strRemoteFile,(const char *)strLocalFile,
		FALSE,FILE_ATTRIBUTE_NORMAL,FTP_TRANSFER_TYPE_BINARY,1);
	return bUploaded?1:0;	return S_OK; 

}
STDMETHODIMP CDsoFramerControl::FtpPutFile(BSTR strLocalFile, BSTR strRemoteFile, long blOverWrite, long * pbool)
{
 	if(!m_pFtpConnection||!m_bConnect)return 0;
	if(!strLocalFile||strLocalFile[0] ==0) return 0;
	if(!strRemoteFile||strRemoteFile[0] ==0) return 0;
	
	BOOL bUploaded = m_pFtpConnection->PutFile((const char *)strLocalFile,
		(const char *)strRemoteFile,FTP_TRANSFER_TYPE_BINARY,1);
	return bUploaded?1:0;
	return S_OK; 

}
STDMETHODIMP CDsoFramerControl::FtpDisConnect(long * pbool)
{
 	m_pFtpConnection->Close();
	m_pFtpConnection = NULL;
	m_bConnect = FALSE;
	if(m_pSession){
		delete m_pSession;
		m_pSession = NULL;
	}

	* pbool =  1;
	return S_OK; 

}
 

STDMETHODIMP CDsoFramerControl::GetFieldValue(BSTR strFieldName, BSTR strCmdOrSheetName,BSTR* strValue)
{
	IDispatch * lDisp;
    get_ActiveDocument(&lDisp);
	if(!lDisp){
 		return S_OK;
	}
	HRESULT hr;
	USES_CONVERSION;
	try{
		switch(m_nOriginalFileType){
		case FILE_TYPE_WORD:
			{	
				
				CComQIPtr<MSWord::_Document> spDoc(lDisp);
				if(!spDoc)
					break;
				CComPtr<MSWord::Bookmarks> pBkMarks = NULL;
				CComPtr<MSWord::Bookmark> pBkMark = NULL;
				CComPtr<MSWord::Range> pRange = NULL;
//				CComPtr<MSWord::Selection>	spSelection = NULL;
				hr = spDoc->get_Bookmarks(&pBkMarks);
				if(FAILED(hr)||(!pBkMarks)){
					spDoc.Release();
 					return E_NOBOOKMARK;
				}
 
				pBkMark = pBkMarks->Item(COleVariant(W2A(strFieldName)));
				if(!pBkMark)
					return NULL;
				hr = pBkMark->get_Range(&pRange);
				if(FAILED(hr)||(!pRange))
					return NULL;
 				hr = pRange->get_Text(strValue);
 				if(SUCCEEDED(hr)){
				}
				pRange.Release();
				pBkMark.Release();
				pBkMarks.Release();
				spDoc.Release();		
			}
			break;
		case FILE_TYPE_EXCEL:
			{	
				
				
			}
			break;
		case FILE_TYPE_PPT:
		case FILE_TYPE_PDF:
		case FILE_TYPE_UNK:
		default:
			break;
		}
	}catch(...){
		
	}
 	return S_OK;
}
/*
//设置为红色
object.SetFieldValue("BookMarkName,"255","::SETCOLOR::");
//白色
object.SetFieldValue("BookMarkName,"16777215","::SETCOLOR::");
//获取颜色
var v = object.SetFieldValue("BookMarkName," ","::GETCOLOR::");
*/
STDMETHODIMP CDsoFramerControl::SetFieldValue(BSTR strFieldName, BSTR strValue,
												 BSTR strCmdOrSheetName,VARIANT_BOOL* pbool)
{
	IDispatch * lDisp;
    get_ActiveDocument(&lDisp);
	if(!lDisp){
		*pbool = FALSE;
		return S_OK;
	}
	HRESULT hr;
	USES_CONVERSION;
	try{
		switch(m_nOriginalFileType){
		case FILE_TYPE_WORD:
			{	
				
				CComQIPtr<MSWord::_Document> spDoc(lDisp);
				if(!spDoc)
					break;
				CComPtr<MSWord::Bookmarks> pBkMarks = NULL;
				CComPtr<MSWord::Bookmark> pBkMark = NULL;
				CComPtr<MSWord::Range> pRange = NULL;
				CComPtr<MSWord::Selection>	spSelection = NULL;
				hr = spDoc->get_Bookmarks(&pBkMarks);
				if(FAILED(hr)||(!pBkMarks)){
					spDoc.Release();
					*pbool = FALSE;
					return E_NOBOOKMARK;
				}
				if(0==wcsicmp(strCmdOrSheetName,L"::ADDMARK::")){
		 			CComPtr<MSWord::_Application> spApp(spDoc->GetApplication());				
					hr = spApp->get_Selection(&spSelection);
					if(FAILED(hr)||(!spSelection)) return E_UNKNOW;
					hr = spSelection->get_Range(&pRange);
					if(FAILED(hr)||(!pRange)) return E_UNKNOW;
					VARIANT vt;
					vt.vt = VT_DISPATCH;
					vt.pdispVal = pRange;
					//hr = pBkMarks->raw_Add(A2W(strFieldName),&vt,&pBkMark);
					//if(FAILED(hr)||(!pBkMark)) return E_UNKNOW;
					pBkMarks->Add(strFieldName,&vt);
					pRange.Release();
					spSelection.Release();
					spApp.Release(); 
				}else if(0==wcsicmp(strCmdOrSheetName,L"::SETCOLOR::")){  
					hr = pBkMarks->raw_Item(COleVariant(W2A(strFieldName)),&pBkMark);
					if(FAILED(hr)) return E_UNKNOW;	
					hr = pBkMark->get_Range(&pRange);
					if(pRange){
						CComPtr<MSWord::_Font>	pFont = NULL;
						hr = pRange->get_Font(&pFont);
						if(FAILED(hr)) return E_UNKNOW;	
						long iColor = atol(W2A(strValue));
						pFont->PutColor((enum MSWord::WdColor)iColor);
						pFont = NULL;
						pRange = NULL;
					} 			 
					pBkMark = NULL;
					return 0;
				}else if(0==wcsicmp(strCmdOrSheetName,L"::GETCOLOR::")){  
					hr = pBkMarks->raw_Item(COleVariant(W2A(strFieldName)),&pBkMark);
					if(FAILED(hr)) return E_UNKNOW;	
					hr = pBkMark->get_Range(&pRange);
					long iColor = 0;
					if(pRange){
						CComPtr<MSWord::_Font>	pFont = NULL;
						hr = pRange->get_Font(&pFont);
						if(FAILED(hr)) return E_UNKNOW;	
						pFont->get_Color((enum MSWord::WdColor*)&iColor);
						//pFont->PutColor((enum MSWord::WdColor)iColor);
						pFont = NULL;
						pRange = NULL;
						return iColor;
					} 			 
					pBkMark = NULL;
					return E_UNKNOW;
				}
				else if(0==wcsicmp(strCmdOrSheetName,L"::DELMARK::")){  
					hr = pBkMarks->raw_Item(COleVariant(W2A(strFieldName)),&pBkMark);
					if(FAILED(hr)) return E_UNKNOW;	
											
					hr = pBkMark->get_Range(&pRange);
					if(pRange){
						pRange->Delete();
						pRange = NULL;
					}
					pBkMark->Delete();				 
					pBkMark = NULL;
					return 0;
				}else if(0==wcsicmp(strCmdOrSheetName,L"::GETMARK::")){ 
					hr = pBkMarks->raw_Item(COleVariant(W2A(strFieldName)),&pBkMark);
					if(FAILED(hr)) return E_UNKNOW;	
											
					hr = pBkMark->get_Range(&pRange);
					if(pRange){
						pRange->Select();
						pRange = NULL;
					}
 					pBkMark = NULL;
					return 0;
				}
				pBkMark = pBkMarks->Item(COleVariant(W2A(strFieldName)));
				if(!pBkMark){
					pBkMarks.Release();
					spDoc.Release();
					*pbool = FALSE;
					return E_NOBOOKMARK;
				}						
				hr = pBkMark->get_Range(&pRange);
				if(FAILED(hr)||(!pRange)){
					pBkMark.Release();
					pBkMarks.Release();
					spDoc.Release();
					*pbool = FALSE;
					return E_NOBOOKMARK;
				}			
				if(0==wcsicmp((strCmdOrSheetName),L"::FILE::")){
					//pRange->InsertFile(strValue);
					/////////////////////////////////////////////////
					if(SUCCEEDED(hr)){
						char szPath[MAX_PATH];
						szPath[0] = 0;
						FILE * fp = NULL;
						char temp[1024];
						UINT nBytesRead = 0;
						if(_wcsnicmp(strValue, L"HTTP", 4) == 0  || _wcsnicmp(strValue, L"FTP", 3) == 0){
							::GetTempPath(MAX_PATH, szPath);
							strcat(szPath,"DSOWebOffice");
							
							if (CreateDirectory(szPath, NULL) || GetLastError() == ERROR_ALREADY_EXISTS)
							{
								lstrcat(szPath, "\\");
							}
							::GetTempFileName(szPath, "", 0, szPath);
							//theApp.GetTempFileName(szPath);
							CInternetSession session("DSO");
							CStdioFile * pFile = NULL;
							pFile = session.OpenURL(W2A(strValue),0,
								INTERNET_FLAG_TRANSFER_BINARY|INTERNET_FLAG_KEEP_CONNECTION|INTERNET_FLAG_RELOAD|
								INTERNET_FLAG_DONT_CACHE);
							if(!pFile){
								return 0;
							}
							if((fp = fopen(szPath,"wb")) == NULL){
								pFile->Close();
								delete pFile;
								return 0;
							}
							DWORD iLen = 0;
							while(iLen = pFile->Read(temp, 1024)){
								fwrite(temp, 1, iLen, fp);
								fflush(fp);
							}
							fclose(fp);
							if(pFile){
								pFile->Close();
								delete pFile;
							}
							pRange->InsertFile(szPath,&vtMissing,&vtMissing,&vtMissing,&vtMissing );
						}else {
							pRange->InsertFile(strValue,&vtMissing,&vtMissing,&vtMissing,&vtMissing );
						}						
					} 	
					////////////////////////////////////////////////////
				}else if(0 == wcsnicmp((strCmdOrSheetName),L"::JPG::",7)){
					CComPtr<MSWord::InlineShapes>	spLineShapes = NULL;							
					CComPtr<MSWord::InlineShape>	spInlineShape = NULL;						
					CComPtr<MSWord::Shape>	spShape = NULL;
					CComPtr<MSWord::WrapFormat>	wrap = NULL;					 
					hr = pRange->get_InlineShapes(&spLineShapes);
					if(FAILED(hr)||(!pRange))
						return E_UNKNOW;
					hr = spLineShapes->raw_AddPicture(strValue,&vtMissing,&vtMissing,&vtMissing,&spInlineShape);
					if(pRange){
						spInlineShape->raw_ConvertToShape(&spShape);
						if(spShape){
							hr = spShape->get_WrapFormat(&wrap); 
							char * p = BSTR2char(strCmdOrSheetName);
							char *p1 = p;
							p += 7;
							if(p){
								wrap->put_Type((MSWord::WdWrapType)atol(p));
							}else{
								wrap->put_Type((MSWord::WdWrapType)5);
							}
							if(p1) free(p1);
							wrap->put_AllowOverlap(-1);
							wrap = NULL;
						}
						spShape = NULL;
					}
 					spLineShapes = NULL;
					spInlineShape = NULL;
				}else{				  		
					pRange->Select();
					if(FAILED(hr)||(!pRange))
						return E_UNKNOW;
					pRange->Text = strValue;
					VARIANT vt;
					vt.vt = VT_DISPATCH;
					vt.pdispVal = pRange;
					pBkMarks->Add(strFieldName,&vt);
					//pBkMarks->raw_Add(A2W(strFieldName),&pRange,&pBkMark);
					pRange->MoveStart();
				}
				pRange.Release();
				pBkMark.Release();
				pBkMarks.Release();
				spDoc.Release();		
			}
			break;
		case FILE_TYPE_EXCEL:
			{	
				
				
			}
			break;
		case FILE_TYPE_PPT:
		case FILE_TYPE_PDF:
		case FILE_TYPE_UNK:
		default:
			break;
		}
	}catch(...){
		
	}
	*pbool = TRUE; 
	return S_OK;
}
/*--------------------------ProDoc--------------------------
lProOrUn:1,保护文档,0,解保护文档
lProType: 保护类型,
    wdNoProtection = -1,
    wdAllowOnlyRevisions = 0,
    wdAllowOnlyComments = 1,
    wdAllowOnlyFormFields = 2
strProPWD:保护密码
------------------------------------------------------------*/
STDMETHODIMP CDsoFramerControl::ProtectDoc(long lProOrUn,long lProType,  BSTR strProPWD, VARIANT_BOOL * pbool)
{
	IDispatch * lDisp;
    get_ActiveDocument(&lDisp);
	if(!lDisp){
		*pbool = FALSE;
		return S_OK;
	}
	HRESULT hr;
	USES_CONVERSION;
	try{
		switch(m_nOriginalFileType){
		case FILE_TYPE_WORD:
			{				
				CComQIPtr<MSWord::_Document> spDoc(lDisp);
				if(!spDoc)
					break;
				if(0 == lProOrUn){
					spDoc->Unprotect(COleVariant(W2A(strProPWD)));		
				}else{
 					spDoc->Protect((MSWord::WdProtectionType)lProType,&vtMissing,COleVariant(W2A(strProPWD)));
				}
				spDoc.Release();		
			}
			break;
		case FILE_TYPE_EXCEL:
			{	
				if(0 == lProOrUn){
					CComQIPtr<MSExcel::_Workbook> spDoc(lDisp);	
					if(!spDoc)
						break;
					CComPtr<MSExcel::Sheets> spSheets;
					CComQIPtr<MSExcel::_Worksheet> spSheet;
					_variant_t vtPwd(strProPWD);
					hr = spDoc->get_Worksheets(&spSheets);
					if((FAILED(hr))||(!spSheets))
						return E_NOSHEET;
					long lCount = spSheets->GetCount();
					while(lCount){
						_variant_t vt(lCount);
						spSheet = spSheets->GetItem(vt);
						if(!spSheets)
							return E_NOSHEET;
						spSheet->Unprotect(vtPwd);
						spSheet = (MSExcel::_Worksheet *)NULL;
						lCount--;
					}					
				}else{
					CComQIPtr<MSExcel::_Workbook> spDoc(lDisp);
					if(!spDoc)
						break;
 					CComPtr<MSExcel::Sheets> spSheets;
					CComQIPtr<MSExcel::_Worksheet> spSheet;
					_variant_t vtPwd(strProPWD);
					hr = spDoc->get_Worksheets(&spSheets);
					if((FAILED(hr))||(!spSheets))
						return E_NOSHEET;
					long lCount = spSheets->GetCount();
					while(lCount){
						_variant_t vt(lCount);
						spSheet = spSheets->GetItem(vt);
						if(!spSheets)
							return E_NOSHEET;
						spSheet->Protect(vtPwd);
						spSheet = (MSExcel::_Worksheet *)NULL;
						lCount--;
					}					

				}
				
			}
			break;
		case FILE_TYPE_PPT:
		case FILE_TYPE_PDF:
		case FILE_TYPE_UNK:
		default:
			break;
		}
	}catch(...){
		
	}
	*pbool = TRUE; 
	return S_OK;
}

STDMETHODIMP CDsoFramerControl::SetMenuDisplay(long lMenuFlag, VARIANT_BOOL* pbool)
{
	/*
#define MNU_NEW                         0x01
#define MNU_OPEN                        0x02
#define MNU_CLOSE                       0x04
#define MNU_SAVE                        0x08
#define MNU_SAVEAS                      0x16
#define MNU_HONGTOU                     0x512
#define MNU_PGSETUP                     0x64
#define MNU_PRINT                       0x256
#define MNU_PROPS                       0x32
#define MNU_PRINTPV                     0x128
	*/
	m_wFileMenuFlags = lMenuFlag;
	* pbool = TRUE;
	return S_OK;
}

STDMETHODIMP CDsoFramerControl::ShowRevisions(long nNewValue, VARIANT_BOOL* pbool)
{
	IDispatch * lDisp;
    get_ActiveDocument(&lDisp);
	if(!lDisp){
		*pbool = FALSE;
		return S_OK;
	}
	HRESULT hr;
	USES_CONVERSION;
	try{
		switch(m_nOriginalFileType){
		case FILE_TYPE_WORD:
			{				
				CComQIPtr<MSWord::_Document> spDoc(lDisp);
				if(!spDoc)
					break;
				spDoc->ShowRevisions = nNewValue;
				spDoc.Release();		
			}
			break;
		case FILE_TYPE_EXCEL:
			{	
 				CComQIPtr<MSExcel::_Workbook> spDoc(lDisp);	
				if(!spDoc)
				break;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -