| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- #include "StdAfx.h"
- #include ".\pasteimageashtmlimage.h"
- #include "../../shared/TextConvert.h"
- CString g_csDIBImagePath = _T("");
- int g_nDIBImageName = 1;
- CPasteImageAsHtmlImage::CPasteImageAsHtmlImage(void)
- {
- }
- CPasteImageAsHtmlImage::~CPasteImageAsHtmlImage(void)
- {
- }
- bool CPasteImageAsHtmlImage::ConvertPathToHtmlImageTag(const CDittoInfo &DittoInfo, IClip *pClip)
- {
- bool bRet = false;
- IClipFormats *pFormats = pClip->Clips();
- if(pFormats)
- {
- if(g_csDIBImagePath.IsEmpty())
- {
- CreateLocalPath(true);
- }
- CString csIMG = _T("");
- IClipFormat *pCF_DIB = pFormats->FindFormatEx(CF_DIB);
- if(pCF_DIB != NULL)
- {
- CString csFile;
- csFile.Format(_T("%s\\%d.bmp"), g_csDIBImagePath, g_nDIBImageName);
- g_nDIBImageName++;
- LPVOID pvData = GlobalLock(pCF_DIB->Data());
- ULONG size = (ULONG)GlobalSize(pCF_DIB->Data());
- if(WriteDataToFile(csFile, pvData, size))
- {
- GlobalUnlock(pCF_DIB->Data());
- csIMG.Format(_T("<IMG src=\"file:///%s\">"), csFile);
- }
- else
- {
- GlobalUnlock(pCF_DIB->Data());
- }
- }
- else
- {
- IClipFormat *pHDrop = pFormats->FindFormatEx(CF_HDROP);
- if(pHDrop)
- {
- HDROP drop = (HDROP)GlobalLock((HDROP)pHDrop->Data());
- int nNumFiles = DragQueryFile(drop, -1, NULL, 0);
- TCHAR file[MAX_PATH];
- for(int nFile = 0; nFile < nNumFiles; nFile++)
- {
- if(DragQueryFile(drop, nFile, file, sizeof(file)) > 0)
- {
- CString csOrigfile(file);
- CString csFile(file);
- csFile = csFile.MakeLower();
- if(csFile.Find(_T(".bmp")) != -1 ||
- csFile.Find(_T(".dib")) != -1 ||
- csFile.Find(_T(".jpg")) != -1 ||
- csFile.Find(_T(".jpeg")) != -1 ||
- csFile.Find(_T(".jpe")) != -1 ||
- csFile.Find(_T(".jfif")) != -1 ||
- csFile.Find(_T(".gif")) != -1 ||
- csFile.Find(_T(".tif")) != -1 ||
- csFile.Find(_T(".tiff")) != -1 ||
- csFile.Find(_T(".png")) != -1)
- {
- CString csFormat;
- csFormat.Format(_T("<IMG src=\"file:///%s\">"), csOrigfile);
- if(nFile < nNumFiles-1)
- {
- csFormat += _T("<br>");
- }
- csIMG += csFormat;
- }
- }
- }
- GlobalUnlock(pHDrop->Data());
- }
- }
- if(csIMG.IsEmpty() == FALSE)
- {
- pFormats->DeleteAll();
- CStringA utf8 = CTextConvert::UnicodeToUTF8(csIMG);
- pFormats->AddNew(DittoAddinHelpers::GetFormatID(_T("HTML Format")), DittoAddinHelpers::NewGlobalP(utf8.GetBuffer(), utf8.GetLength()));
- bRet = true;
- }
- }
- return bRet;
- }
- bool CPasteImageAsHtmlImage::WriteDataToFile(CString csPath, LPVOID data, ULONG size)
- {
- bool bRet = false;
- CFile file;
- CFileException ex;
- if(file.Open(csPath, CFile::modeCreate|CFile::modeWrite|CFile::typeBinary, &ex))
- {
- BITMAPINFO *lpBI = (BITMAPINFO *)data;
- int nPaletteEntries = 1 << lpBI->bmiHeader.biBitCount;
- if(lpBI->bmiHeader.biBitCount > 8)
- nPaletteEntries = 0;
- else if( lpBI->bmiHeader.biClrUsed != 0 )
- nPaletteEntries = lpBI->bmiHeader.biClrUsed;
- BITMAPFILEHEADER BFH;
- memset(&BFH, 0, sizeof( BITMAPFILEHEADER));
- BFH.bfType = 'MB';
- BFH.bfSize = sizeof(BITMAPFILEHEADER) + size;
- BFH.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + nPaletteEntries * sizeof(RGBQUAD);
- file.Write(&BFH, sizeof(BITMAPFILEHEADER));
- file.Write(data, size);
- file.Close();
- bRet = true;
- }
- else
- {
- CString csError;
- TCHAR exError[250];
- ex.GetErrorMessage(exError, sizeof(exError));
- csError.Format(_T("OutLookExpress Addin - Failed to write CF_DIB to file: %s, Error: %s"), csPath, exError);
- OutputDebugString(csPath);
- }
- return bRet;
- }
- bool CPasteImageAsHtmlImage::CleanupPastedImages()
- {
- bool bRet = false;
- if(g_csDIBImagePath.IsEmpty())
- {
- CreateLocalPath(false);
- }
- CFileFind find;
- BOOL bCont = find.FindFile(g_csDIBImagePath + _T("\\*"));
- while(bCont)
- {
- bCont = find.FindNextFile();
- DeleteFile(find.GetFilePath());
- }
- find.Close();
- bRet = RemoveDirectory(g_csDIBImagePath) == TRUE;
- return false;;
- }
- void CPasteImageAsHtmlImage::CreateLocalPath(bool bCreateDir)
- {
- g_csDIBImagePath = _wgetenv(_T("TMP"));;
- g_csDIBImagePath += _T("\\ditto");
- if(bCreateDir)
- {
- CreateDirectory(g_csDIBImagePath, NULL);
- }
- }
|