Ejemplo n.º 1
0
STDMETHODIMP CValueAxis::Load(LPSTREAM pStm)
{
	pStm->Read(&m_iWholeDigits, sizeof(int), NULL);
	pStm->Read(&m_iDecimalDigits, sizeof(int), NULL);

	pStm->Read(&m_dMinVal, sizeof(double), NULL);
	pStm->Read(&m_dMaxVal, sizeof(double), NULL);

	return CAxis::Load(pStm);
}
Ejemplo n.º 2
0
STDMETHODIMP CAxis::Load(LPSTREAM pStm)
{
	m_bstrDisplayFormat.ReadFromStream(pStm);
	m_bstrTitle.ReadFromStream(pStm);
	pStm->Read(&m_lNumTicks, sizeof(m_lNumTicks), NULL);
	pStm->Read(&m_bShowAxis, sizeof(m_bShowAxis), NULL);
	pStm->Read(&m_bShowTitle, sizeof(m_bShowTitle), NULL);
	pStm->Read(&m_clrAxis, sizeof(m_clrAxis), NULL);
	pStm->Read(&m_clrTitle, sizeof(m_clrTitle), NULL);

	ReadFontFromStream(&m_spTickFont, pStm);
	ReadFontFromStream(&m_spTitleFont, pStm);

	return S_OK;
}
Ejemplo n.º 3
0
FARINTERNAL UtDIBFileStmToPBrushNativeStm
	(LPSTREAM pstmDIBFile, LPSTREAM pstmPBrush)
{
	BITMAPFILEHEADER bfh;
	HRESULT	error;
	
	if (error = pstmDIBFile->Read(&bfh, sizeof(bfh), 0))
		return error;
	
	// seek to the begining of the stream
	LARGE_INTEGER large_int;
	LISet32( large_int, 0);
	if (error = pstmDIBFile->Seek(large_int, STREAM_SEEK_SET, 0))
		return error;
	
	if (error = pstmPBrush->Write(&(bfh.bfSize), sizeof(DWORD), 0))
		return error;
	
	ULARGE_INTEGER ularge_int;
	ULISet32(ularge_int, bfh.bfSize);
	
	if ((error = pstmDIBFile->CopyTo(pstmPBrush, ularge_int,
			NULL, NULL)) == NOERROR)
		StSetSize(pstmPBrush, 0, TRUE);
	
	return error;
}
Ejemplo n.º 4
0
HRESULT STDMETHODCALLTYPE CXMLDocument::Load(/* [in] */ LPSTREAM pStm)
{
	if (pStm == NULL)
	{
		return E_INVALIDARG;
	}

	// Load the XML from the stream
	STATSTG statstg;
	pStm->Stat(&statstg, STATFLAG_NONAME);

	ULONG cbBufSize = statstg.cbSize.LowPart;

	char *pBuffer = new char[cbBufSize];
	if (pBuffer == NULL)
	{
		return E_OUTOFMEMORY;
	}

	memset(pBuffer, 0, cbBufSize);
	pStm->Read(pBuffer, cbBufSize, NULL);

	m_spRoot.Release();
	ParseExpat(pBuffer, cbBufSize, (IXMLDocument *) this, &m_spRoot);

	delete []pBuffer;

	m_nReadyState = READYSTATE_LOADED;

	return S_OK;
}
Ejemplo n.º 5
0
STDMETHODIMP CTimeAxis::Load(LPSTREAM pStm)
{
	double dTimeSpan;
	pStm->Read(&dTimeSpan, sizeof(double), NULL);
	m_dMinVal = m_dMaxVal - dTimeSpan;

	return CAxis::Load(pStm);
}
Ejemplo n.º 6
0
STDMETHODIMP CGrid::Load(LPSTREAM pStm)
{
    pStm->Read(&m_bShowVertical, sizeof(m_bShowVertical), NULL);
    pStm->Read(&m_bShowHorizontal, sizeof(m_bShowHorizontal), NULL);
    pStm->Read(&m_lNumberOfVerticalLines, sizeof(m_lNumberOfVerticalLines), NULL);
    pStm->Read(&m_lNumberOfHorizontalLines, sizeof(m_lNumberOfHorizontalLines), NULL);
    pStm->Read(&m_enumVerticalStyle, sizeof(m_enumVerticalStyle), NULL);
    pStm->Read(&m_enumHorizontalStyle, sizeof(m_enumHorizontalStyle), NULL);
    pStm->Read(&m_nWidth, sizeof(m_nWidth), NULL);
    pStm->Read(&m_clrVerticalColor, sizeof(m_clrVerticalColor), NULL);
    pStm->Read(&m_clrHorizontalColor, sizeof(m_clrHorizontalColor), NULL);

    return S_OK;
}
Ejemplo n.º 7
0
LPFONT AFXAPI _AfxCreateFontFromStream(LPSTREAM pstm)
{
	BOOL bSuccess = FALSE;
	LPFONT pFont = NULL;
	LPPERSISTSTREAM pPersStm = NULL;
	CLSID clsid;

	if (SUCCEEDED(pstm->Read(&clsid, sizeof(CLSID), NULL)))
	{
		HRESULT hr;

		if (IsEqualCLSID(clsid, CLSID_StdFont) ||
			IsEqualCLSID(clsid, _afx_CLSID_StdFont_V1))
		{
			// We know this kind of font; create it using the API.
			hr = ::OleCreateFontIndirect((LPFONTDESC)&_afxFontDescHelv, IID_IFont,
					(LPVOID*)&pFont);
		}
		else
		{
			// Some other implementation of IFont.
			hr = CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER, IID_IFont,
					(LPVOID*)&pFont);
		}

		if (SUCCEEDED(hr))
		{
			// Successfully created font, now get its IPersistStream interface.

			ASSERT_POINTER(pFont, IFont);

			if (SUCCEEDED(pFont->QueryInterface(IID_IPersistStream,
					(LPVOID*)&pPersStm)))
			{
				ASSERT_POINTER(pPersStm, IPersistStream);
			}
		}

		if (pPersStm != NULL)
		{
			// Load the font.

			ASSERT_POINTER(pFont, IFont);
			bSuccess = SUCCEEDED(pPersStm->Load(pstm));
			pPersStm->Release();
		}
	}

	// If we failed for any reason, clean up the font.
	if (!bSuccess && pFont != NULL)
	{
		pFont->Release();
		pFont = NULL;
	}

	return pFont;
}
Ejemplo n.º 8
0
HRESULT CGifSmileyCtrl::IPersistStreamInit_Load(LPSTREAM pStm,const ATL_PROPMAP_ENTRY* pMap)
{
	HRESULT hr = S_OK;
	INFO_GIF infoGif;
	hr = pStm->Read(&infoGif, sizeof(INFO_GIF), NULL);

	hr = IPersistStreamInitImpl<CGifSmileyCtrl>::IPersistStreamInit_Load( pStm, pMap);

	CopySmile(infoGif.hwndFrom, infoGif.filePath, infoGif.clrBackground, 0);
	return hr;
}
Ejemplo n.º 9
0
HRESULT CDrawMenu::DoLoad(DWORD dwVer, LPSTREAM pStm)
{
	if (dwVer > _SUPERCX_VER_0200)
	{
		pStm->Read(&m_bButtonDisplayed, sizeof(m_bButtonDisplayed), NULL);
		m_bstrButtonCaption.ReadFromStream(pStm);
	}
	else
	{
		m_bButtonDisplayed = FALSE;
	}

	int nCount;
	pStm->Read(&nCount, sizeof(nCount), NULL);
	for (int i = 0; i < nCount; i++)
	{
		CMenuItem item;
		item.m_bstrText.ReadFromStream(pStm);
		pStm->Read(&item.m_dwState, sizeof(DWORD), NULL);
		if (dwVer > _SUPERCX_VER_0203)
		{
			item.m_bstrID.ReadFromStream(pStm);
			pStm->Read(&item.m_dwShiftState, sizeof(DWORD), NULL);
			pStm->Read(&item.m_dwKeyCode, sizeof(DWORD), NULL);
		}
		m_arrItems.Add(item);
	}

	pStm->Read(&m_rcPosition, sizeof(m_rcPosition), NULL);

	m_bstrDescription.ReadFromStream(pStm);
	
	return CCxDrawObjectBase::DoLoad(dwVer, pStm);
}
Ejemplo n.º 10
0
STDMETHODIMP CDrawTxt::LoadOldVer(LPSTREAM pStm)
{
//	pStm->Read(&m_bAutoSize, sizeof(BOOL), NULL);
	pStm->Read(&m_dFontHeight, sizeof(double), NULL);
	pStm->Read(&m_dFontWidth, sizeof(double), NULL);
	pStm->Read(&m_lWeight, sizeof(long), NULL);
	pStm->Read(&m_bItalic, sizeof(BOOL), NULL);
	pStm->Read(&m_bUnderLine, sizeof(BOOL), NULL);
	pStm->Read(&m_bStrikethrough, sizeof(BOOL), NULL);
	m_bstrFontName.ReadFromStream(pStm);
	m_bstrCaption.ReadFromStream(pStm);
	pStm->Read(&m_clrForeColor, sizeof(OLE_COLOR), NULL);
	pStm->Read(&m_clrBackColor, sizeof(OLE_COLOR), NULL);
	pStm->Read(&m_nTextAlign, sizeof(UINT), NULL);
	pStm->Read(&m_bsBackStyle, sizeof(enumBackStyle), NULL);
	pStm->Read(&m_rcPosition, sizeof(RECTF), NULL);

	return ICxDrawObjectImpl<CDrawTxt>::LoadOldVer(pStm);
}
Ejemplo n.º 11
0
void ReadStorage(LPSTORAGE pStg)
// reads one storage -- recursive calls for substorages
{
    USES_CONVERSION;
    LPSTORAGE pSubStg = NULL;
    LPSTREAM pStream = NULL;
    LPENUMSTATSTG pEnum = NULL;
    LPMALLOC pMalloc = NULL; // for freeing statstg
    STATSTG statstg;
    ULONG nLength;
    BYTE buffer[101];

    g_nIndent++;
    ::CoGetMalloc(MEMCTX_TASK, &pMalloc); // assumes AfxOleInit
                                          //  was called
    VERIFY(pStg->EnumElements(0, NULL, 0, &pEnum) == S_OK);
    while (pEnum->Next(1, &statstg, NULL) == S_OK) {
      if (statstg.type == STGTY_STORAGE) {
        VERIFY(pStg->OpenStorage(statstg.pwcsName, NULL,
               STGM_READ | STGM_SHARE_EXCLUSIVE,
               NULL, 0, &pSubStg) == S_OK);
        ASSERT(pSubStg != NULL);
        TRACE("%0.*sStorage = %s\n", (g_nIndent - 1) * 4,
              g_szBlanks, OLE2CT(statstg.pwcsName));
        ReadStorage(pSubStg);
        pSubStg->Release();
      }
      else if (statstg.type == STGTY_STREAM) {
        VERIFY(pStg->OpenStream(statstg.pwcsName, NULL,
               STGM_READ | STGM_SHARE_EXCLUSIVE,
               0, &pStream) == S_OK);
        ASSERT(pStream != NULL);
        TRACE("%0.*sStream = %s\n", (g_nIndent - 1) * 4,
               g_szBlanks, OLE2CT(statstg.pwcsName));
        pStream->Read(buffer, 100, &nLength);
        buffer[nLength] = '\0';
        TRACE("%s\n", buffer);
        pStream->Release();
      }
      else {
        ASSERT(FALSE);  // LockBytes?
      }
      pMalloc->Free(statstg.pwcsName); // avoids memory leaks
    }
    pMalloc->Release();
    pEnum->Release();
    g_nIndent--;
}
Ejemplo n.º 12
0
// --------------------------------------------------------------------------------------------
STDMETHODIMP CRegOperatPropAct::Load (LPSTREAM pStm)
{
	if (m_bIsInitialized)		// m_bIsInitialized == true, wenn Page schon durch InitNew()
		return E_UNEXPECTED;	// initialisiert wurde

// Daten einlesen
// zuerst Bezeichner einlesen
HRESULT hr = CPropertyAction::Load (pStm);

	if (FAILED(hr)) return hr;

// meine Versionsnummer und Signatur lesen und überprüfen
DWORD dwSignature = 0;
DWORD dwVersion = 0;

	RETURN_FAILED_HRESULT(pStm->Read (&dwSignature, sizeof(DWORD), NULL));
	if (REGOPERATPROPACT_SIGNATURE != dwSignature)
		return E_UNEXPECTED;

	RETURN_FAILED_HRESULT(pStm->Read (&dwVersion, sizeof(DWORD), NULL));
	if ((dwVersion & ~ MINOR_VERSION_MASK) > REGOPERATPROPACT_ACTVERSION)
		return STG_E_OLDDLL;	// File was written with a newer version

// dann selektierte Info der letzten Auswahl
	RETURN_FAILED_HRESULT (pStm->Read (&m_caSelInfo.bClassKey, sizeof(BOOL), NULL));
	RETURN_FAILED_HRESULT (pStm->Read (&m_caSelInfo.bInter, sizeof(BOOL), NULL));
	RETURN_FAILED_HRESULT (pStm->Read (&m_caSelInfo.bExter, sizeof(BOOL), NULL));
	RETURN_FAILED_HRESULT (pStm->Read (&m_caSelInfo.bBound, sizeof(BOOL), NULL));

// ggf. Moniker einlesen
BOOL fHasMoniker = TRUE;

	if (dwVersion >= REGOPERATPROPACT_VERSION_1_0_2) {
		RETURN_FAILED_HRESULT (pStm->Read (&fHasMoniker, sizeof(BOOL), NULL));
	}
	if (fHasMoniker) {
		RETURN_FAILED_HRESULT (OleLoadFromStream(pStm, IID_IMoniker, m_mkOperOptions.ppv()));
	}

	if (NULL == m_pRegOperDlg)
		// Initialisierungsdaten für den Dialog wurden zwar soeben von Load() bereitgestellt,
		// können hier aber noch nicht an diesen weitergereicht werden
		m_bHasInitData = true;
	else
		// Initialisierungsdaten an den Dialog weiterreichen
		m_pRegOperDlg->SetSelectedInfo (&m_caSelInfo);
	
	m_bIsInitialized = true;	// Page wurde jetzt durch Load() initialisiert
	m_bIsDirty = false;			// Dialogparameter wurden (noch) nicht verändert
	return S_OK;

} // Load
Ejemplo n.º 13
0
STDMETHODIMP CPoint::IMyPersistStreamImpl_Load(LPSTREAM pIStream)
{
    ULONG           cb;
    HRESULT         hr;

    if (NULL==pIStream)
        return ResultFromScode(E_POINTER);
    //
    // Read an object from the stream.
    //
    hr=pIStream->Read(&m_Point, sizeof(POINT), &cb);
    if (FAILED(hr))
        return hr;
    if (sizeof(POINT) != cb)
        return E_FAIL;

	return NOERROR;
}
Ejemplo n.º 14
0
BOOL AFXAPI _AfxGetClassIDFromStreamedPropset(LPCLSID lpClsid, LPSTREAM lpStream)
{
	BOOL bSuccess = FALSE;
	ULARGE_INTEGER uliSave;
	LARGE_INTEGER liClsidOffset;
	LISet32(liClsidOffset, 8);

	if (SUCCEEDED(lpStream->Seek(_afxLargeZero, STREAM_SEEK_CUR, &uliSave)))
	{
		if (SUCCEEDED(lpStream->Seek(liClsidOffset, STREAM_SEEK_CUR, NULL)) &&
			SUCCEEDED(lpStream->Read(lpClsid, sizeof(CLSID), NULL)))
		{
			bSuccess = TRUE;
		}

		lpStream->Seek(*(LARGE_INTEGER*)&uliSave, STREAM_SEEK_SET, NULL);
	}

	return bSuccess;
}
Ejemplo n.º 15
0
BOOL CMapiApi::GetLargeStringProperty( LPMAPIPROP pProp, ULONG tag, nsCString& val)
{
  LPSTREAM  lpStream;
  HRESULT    hr = pProp->OpenProperty( tag, &IID_IStream, 0, 0, (LPUNKNOWN *)&lpStream);
  if (HR_FAILED( hr))
    return( FALSE);
  STATSTG    st;
  BOOL bResult = TRUE;
  hr = lpStream->Stat( &st, STATFLAG_NONAME);
  if (HR_FAILED( hr))
    bResult = FALSE;
  else {
    if (!st.cbSize.QuadPart)
      st.cbSize.QuadPart = 1;
    char *pVal = new char[ (int) st.cbSize.QuadPart + 1];
    // val.SetCapacity( (int) st.cbSize.QuadPart);
    if (pVal) {
      ULONG  sz;
      hr = lpStream->Read( pVal, (ULONG) st.cbSize.QuadPart, &sz);
      if (HR_FAILED( hr)) {
        bResult = FALSE;
        *pVal = 0;
        sz = 0;
      }
      else
        pVal[(int) st.cbSize.QuadPart] = 0;
      val = pVal;
      delete [] pVal;
    }
    else
      bResult = FALSE;
  }

  lpStream->Release();

  return( bResult);
}
Ejemplo n.º 16
0
BOOL AFXAPI _AfxSaveStreamDataAsBlobProp(LPSTREAM pstm, CPropertySection& psec,
		DWORD dwPropID, DWORD dwType)
{
	BOOL bSuccess = FALSE;
	ULARGE_INTEGER uliStart;
	ULARGE_INTEGER uliEnd;

	// Note:  Stream length must fit in a DWORD.

	if (SUCCEEDED(pstm->Seek(_afxLargeZero, STREAM_SEEK_CUR, &uliStart)) &&
		SUCCEEDED(pstm->Seek(_afxLargeZero, STREAM_SEEK_END, &uliEnd)) &&
		SUCCEEDED(pstm->Seek(*(LARGE_INTEGER*)&uliStart, STREAM_SEEK_SET,
			NULL)))
	{
		DWORD cb = uliEnd.LowPart - uliStart.LowPart;
		HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE|GMEM_SHARE,
			cb + (DWORD)sizeof(cb));

		if (hGlobal != NULL)
		{
			LPBYTE pbData = (LPBYTE)GlobalLock(hGlobal);
			if (pbData != NULL)
			{
				*(DWORD*)pbData = cb;
				if (SUCCEEDED(pstm->Read(pbData + (DWORD)sizeof(DWORD), cb,
					NULL)))
				{
					bSuccess = psec.Set(dwPropID, pbData, dwType);
				}
				GlobalUnlock(hGlobal);
			}
			GlobalFree(hGlobal);
		}
	}

	return bSuccess;
}
Ejemplo n.º 17
0
FARINTERNAL	UtGetHMFPICTFromMSDrawNativeStm
	(LPSTREAM pstm,	DWORD dwSize, HANDLE FAR* lphdata)
{
	HRESULT		error;
	WORD		mfp[3]; // mm, xExt, yExt
	HMETAFILE	hMF = NULL;
	
	*lphdata = NULL;
	
	if (error = pstm->Read(mfp, sizeof(mfp), NULL))
		return error;
	
	dwSize -= sizeof(mfp);

	if (error = UtGetHMFFromMFStm(pstm, dwSize, FALSE, (void **)&hMF))
		return error;
		
	AssertSz(mfp[0] == MM_ANISOTROPIC, "invalid map mode in MsDraw native data");
	
	if (*lphdata = UtGetHMFPICT(hMF, TRUE, (int) mfp[1], (int) mfp[2]))
		return NOERROR;

	return ResultFromScode(E_OUTOFMEMORY);	
}
Ejemplo n.º 18
0
STDMETHODIMP CDirectDynamic::Load(LPSTREAM pStm)
{
	m_bstrSource.ReadFromStream(pStm);
	pStm->Read(&m_bEnableMouseInput, sizeof(m_bEnableMouseInput), NULL);
	return S_OK;
}
Ejemplo n.º 19
0
HRESULT CDrawTxt::DoLoad(DWORD dwVer, LPSTREAM pStm)
{
	pStm->Read(&m_enumMousePointer, sizeof(m_enumMousePointer), NULL);
	m_bstrDescription.ReadFromStream(pStm);
	pStm->Read(&m_dFontHeight, sizeof(double), NULL);
	pStm->Read(&m_dFontWidth, sizeof(double), NULL);
	pStm->Read(&m_lWeight, sizeof(long), NULL);
	pStm->Read(&m_bItalic, sizeof(BOOL), NULL);
	pStm->Read(&m_bUnderLine, sizeof(BOOL), NULL);
	pStm->Read(&m_bStrikethrough, sizeof(BOOL), NULL);
	m_bstrFontName.ReadFromStream(pStm);
	m_bstrCaption.ReadFromStream(pStm);
	pStm->Read(&m_clrForeColor, sizeof(OLE_COLOR), NULL);
	pStm->Read(&m_clrBackColor, sizeof(OLE_COLOR), NULL);
	pStm->Read(&m_nTextAlign, sizeof(UINT), NULL);
	pStm->Read(&m_bsBackStyle, sizeof(enumBackStyle), NULL);
	pStm->Read(&m_rcPosition, sizeof(RECTF), NULL);

	if (dwVer > _SUPERCX_VER_0207)
	{
		pStm->Read(&m_bAutoSize, sizeof(BOOL), NULL);
		pStm->Read(&m_bWordWrap, sizeof(BOOL), NULL);
	}
		
	return CCxDrawObjectBase::DoLoad(dwVer, pStm);
}
Ejemplo n.º 20
0
	HRESULT STDMETHODCALLTYPE TinySmiley::LoadStream(LPSTREAM pStm)
	{
		if (!pStm) return S_FALSE;
		STATSTG pstatstg;
		if (FAILED(pStm->Stat(&pstatstg, 0)))
		{
			return S_FALSE;
		}
		INT comp = 0;
		BYTE* pData = NULL;
		//获得字节流大小
		BYTE* pv = new BYTE[(UINT)pstatstg.cbSize.QuadPart];
		if (!pv) return S_FALSE;
		ULONG bytesSaved = 0;
		if (FAILED(pStm->Read(pv, (LONG)pstatstg.cbSize.QuadPart, &bytesSaved)))
		{
			goto error;
		}
		pData = stbi_load_from_memory_ex(pv, (INT)pstatstg.cbSize.QuadPart, &m_cx, &m_cy, &comp, 4, &m_count);
		SAFE_DELETE_ARRAY(pv);
		if (!pData)
		{
			goto error;
		}
		if (m_count == 1)
		{
			BITMAPINFO bmi;
			memset(&bmi, 0, sizeof(BITMAPINFO));
			bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
			bmi.bmiHeader.biWidth = m_cx;
			bmi.bmiHeader.biHeight = -m_cy;
			bmi.bmiHeader.biPlanes = 1;
			bmi.bmiHeader.biBitCount = 32;
			bmi.bmiHeader.biCompression = BI_RGB;
			bmi.bmiHeader.biSizeImage = m_cx * m_cy * 4;
			BYTE* pvBits = NULL;
			HBITMAP hBitmap = ::CreateDIBSection(NULL, &bmi, DIB_RGB_COLORS, (void**)&pvBits, NULL, 0);
			if (hBitmap)
			{
				for (INT i = 0; i < m_cx * m_cy; i++)
				{
					pvBits[i * 4 + 3] = pData[i * 4 + 3];
					if (pvBits[i * 4 + 3] < 255)
					{
						pvBits[i * 4] = (BYTE)(DWORD(pData[i * 4 + 2])*pData[i * 4 + 3] / 255);//B
						pvBits[i * 4 + 1] = (BYTE)(DWORD(pData[i * 4 + 1])*pData[i * 4 + 3] / 255);//G
						pvBits[i * 4 + 2] = (BYTE)(DWORD(pData[i * 4])*pData[i * 4 + 3] / 255);//R
					}
					else
					{
						pvBits[i * 4] = pData[i * 4 + 2];
						pvBits[i * 4 + 1] = pData[i * 4 + 1];
						pvBits[i * 4 + 2] = pData[i * 4];
					}
				}
				m_images.push_back(hBitmap);
			}
		}
		else
		{
			BYTE* seek = pData + m_count * 4 * m_cx * m_cy;
			for (size_t i = 0; i < m_count; i++)
			{
				BITMAPINFO bmi;
				memset(&bmi, 0, sizeof(BITMAPINFO));
				bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
				bmi.bmiHeader.biWidth = m_cx;
				bmi.bmiHeader.biHeight = -m_cy;
				bmi.bmiHeader.biPlanes = 1;
				bmi.bmiHeader.biBitCount = 32;
				bmi.bmiHeader.biCompression = BI_RGB;
				bmi.bmiHeader.biSizeImage = m_cx * m_cy * 4;
				BYTE* pvBits = NULL;
				HBITMAP hBitmap = ::CreateDIBSection(NULL, &bmi, DIB_RGB_COLORS, (void**)&pvBits, NULL, 0);
				if (hBitmap)
				{
					BYTE* ps = pData + i * m_cx * m_cy;
					for (INT i = 0; i < m_cx * m_cy; i++)
					{
						pvBits[i * 4 + 3] = ps[i * 4 + 3];
						if (pvBits[i * 4 + 3] < 255)
						{
							pvBits[i * 4] = (BYTE)(DWORD(ps[i * 4 + 2])*ps[i * 4 + 3] / 255);//B
							pvBits[i * 4 + 1] = (BYTE)(DWORD(ps[i * 4 + 1])*ps[i * 4 + 3] / 255);//G
							pvBits[i * 4 + 2] = (BYTE)(DWORD(ps[i * 4])*ps[i * 4 + 3] / 255);//R
						}
						else
						{
							pvBits[i * 4] = ps[i * 4 + 2];
							pvBits[i * 4 + 1] = ps[i * 4 + 1];
							pvBits[i * 4 + 2] = ps[i * 4];
						}
					}
					m_images.push_back(hBitmap);
					m_delays.push_back(*(UINT*)seek);
					seek += sizeof(UINT);
				}
			}
		}
		stbi_image_free(pData);
		return m_images.size() == m_count ? S_OK : S_FALSE;
	error:
		SAFE_DELETE_ARRAY(pv);
		stbi_image_free(pData);
		return S_FALSE;
	}
Ejemplo n.º 21
0
/* This seems to be called if one clicks on Save in the context menu.
   And also sometimes before an Open click. */
STDMETHODIMP
GpgolAttachedFileEvents::OnWritePattToSzFile
  (LPATTACH att, LPTSTR file, ULONG flags)
{
  HRESULT hr;
  ULONG tag;
  char *iv;
  size_t ivlen;
  symenc_t symenc;
  LPSTREAM stream;
  char tmpbuf[16];
  ULONG nread;
  int rc;

  log_debug ("%s:%s: att=%p file=`%s' flags=%lx\n",
	     SRCNAME, __func__, att, file, flags);
  if (!att)
    return E_FAIL;

  if (get_gpgolprotectiv_tag ((LPMESSAGE)att, &tag) )
    return E_ABORT;
  iv = mapi_get_binary_prop ((LPMESSAGE)att, tag, &ivlen);
  if (!iv)
    return S_FALSE; /* Not encrypted by us - Let OL continue as usual.  */

  symenc = symenc_open (get_128bit_session_key (), 16, iv, ivlen);
  xfree (iv);
  if (!symenc)
    {
      log_error ("%s:%s: can't open encryption context", SRCNAME, __func__);
      return E_ABORT;
    }

  hr = att->OpenProperty (PR_ATTACH_DATA_BIN, &IID_IStream,
                          0, 0, (LPUNKNOWN*) &stream);
  if (FAILED (hr))
    {
      log_error ("%s:%s: can't open data stream of attachment: hr=%#lx",
                 SRCNAME, __func__, hr);
      symenc_close (symenc);
      return E_ABORT;
    }

  hr = stream->Read (tmpbuf, 16, &nread);
  if (hr)
    {
      log_debug ("%s:%s: Read failed: hr=%#lx", SRCNAME, __func__, hr);
      stream->Release ();
      symenc_close (symenc);
      return E_ABORT;
    }
  symenc_cfb_decrypt (symenc, tmpbuf, tmpbuf, 16);
  if (memcmp (tmpbuf, "GpgOL attachment", 16))
    {
      MessageBox (NULL,
                  _("Sorry, we are not able to decrypt this attachment.\n\n"
                    "Please use the decrypt/verify button to decrypt the\n"
                    "entire message again.  Then open this attachment."),
                  "GpgOL", MB_ICONERROR|MB_OK);
      stream->Release ();
      symenc_close (symenc);
      return E_ABORT;
    }

  rc = decrypt_and_write_file (stream, file, symenc);

  stream->Release ();
  symenc_close (symenc);
  return rc;
}
Ejemplo n.º 22
0
int _tmain(int argc, wchar_t* argv[])
{
  GdiplusStartupInput gdiplusStartupInput;
  ULONG_PTR gdiplusToken;
  GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
  
  if (argc != 4) {
    wprintf(L"Usage: %s outfile.jpg(or - for stdout) WxH JPEG_quality(0-100)\n", argv[0]);
    return 1;
  }
  int outWidth = 0, outHeight = 0;
  swscanf(argv[2], L"%dx%d", &outWidth, &outHeight);
  ULONG jpegQuality = 0;
  swscanf(argv[3], L"%d", &jpegQuality);
  BOOL useStdout = wcscmp(L"-", argv[1]) == 0;

  HWND desktop = GetDesktopWindow();
  HDC desktopdc = GetDC(desktop);
  HDC mydc = CreateCompatibleDC(desktopdc);
  int width = GetSystemMetrics(SM_CXSCREEN);
  int height = GetSystemMetrics(SM_CYSCREEN);
  if (!outWidth || !outHeight) {
    outWidth = width;
    outHeight = height;
  }
  
  HBITMAP mybmp = CreateCompatibleBitmap(desktopdc, outWidth, outHeight);
  HBITMAP oldbmp = (HBITMAP)SelectObject(mydc, mybmp);
  //BitBlt(mydc,0,0,width,height,desktopdc,0,0, SRCCOPY|CAPTUREBLT);
  StretchBlt(mydc, 0, 0, outWidth, outHeight, desktopdc, 0, 0, width, height, SRCCOPY|CAPTUREBLT);
  SelectObject(mydc, oldbmp);
  
  const wchar_t* filename = argv[1];
  EncoderParameters encoderParameters;
  encoderParameters.Count = 1;
  encoderParameters.Parameter[0].Guid = EncoderQuality;
  encoderParameters.Parameter[0].Type = EncoderParameterValueTypeLong;
  encoderParameters.Parameter[0].NumberOfValues = 1;
  encoderParameters.Parameter[0].Value = &jpegQuality;

  LPSTREAM lpStream = NULL;
  CreateStreamOnHGlobal(NULL, TRUE, &lpStream);

  Bitmap* b = Bitmap::FromHBITMAP(mybmp, NULL);
  CLSID  encoderClsid;
  Status stat = GenericError;
  if (b && GetEncoderClsid(L"image/jpeg", &encoderClsid) != -1) {
    if (useStdout)
      stat = b->Save(lpStream, &encoderClsid, &encoderParameters);
    else
      stat = b->Save(filename, &encoderClsid, &encoderParameters);
  }
  if (useStdout) {
    ULARGE_INTEGER pos, newpos;
    LARGE_INTEGER seek;
    ULONG read;
    seek.QuadPart = 0L;
    lpStream->Seek(seek, STREAM_SEEK_CUR, &pos);
    lpStream->Seek(seek, STREAM_SEEK_SET, &newpos);
    void *buf = malloc(pos.QuadPart);
    lpStream->Read(buf, pos.QuadPart, &read);
    _setmode(_fileno(stdout), _O_BINARY);
    fwrite(buf, 1, pos.QuadPart, stdout);
  }
  if (b)
    delete b;
  
  // cleanup
  GdiplusShutdown(gdiplusToken);
  ReleaseDC(desktop, desktopdc);
  DeleteObject(mybmp);
  DeleteDC(mydc);
  return !(stat == Ok);
}
Ejemplo n.º 23
0
/* Copy STREAM to a new file FILENAME while decrypting it using the
   context SYMENC.  */
static int
decrypt_and_write_file (LPSTREAM stream, const char *filename, symenc_t symenc)
{
  int rc = E_ABORT;
  HRESULT hr;
  ULONG nread;
  char *buf = NULL;
  FILE *fpout = NULL;

  fpout = fopen (filename, "wb");
  if (!fpout)
    {
      log_error ("%s:%s: fwrite failed: %s", SRCNAME, __func__,
                 strerror (errno));
      MessageBox (NULL,
                  _("Error creating file for attachment."),
                  "GpgOL", MB_ICONERROR|MB_OK);
      goto leave;
    }

  buf = (char*)xmalloc (COPYBUFFERSIZE);
  do
    {
      hr = stream->Read (buf, COPYBUFFERSIZE, &nread);
      if (hr)
        {
          log_error ("%s:%s: Read failed: hr=%#lx", SRCNAME, __func__, hr);
          MessageBox (NULL,
                      _("Error reading attachment."),
                      "GpgOL", MB_ICONERROR|MB_OK);
          goto leave;
        }
      if (nread)
        symenc_cfb_decrypt (symenc, buf, buf, nread);
      if (nread && fwrite (buf, nread, 1, fpout) != 1)
        {
          log_error ("%s:%s: fwrite failed: %s", SRCNAME, __func__,
                     strerror (errno));
          MessageBox (NULL,
                      _("Error writing attachment."),
                      "GpgOL", MB_ICONERROR|MB_OK);
          goto leave;
        }
    }
  while (nread == COPYBUFFERSIZE);

  xfree (buf);
  buf = NULL;
  if (fclose (fpout))
    {
      log_error ("%s:%s: fclose failed: %s",
                 SRCNAME, __func__, strerror (errno));
      MessageBox (NULL,
                  _("Error writing attachment."),
                  "GpgOL", MB_ICONERROR|MB_OK);
      goto leave;
    }

  rc = S_OK;

 leave:
  xfree (buf);
  if (fpout)
    fclose (fpout);
  if (rc != S_OK)
    remove (filename);
  return rc;
}
Ejemplo n.º 24
0
FARINTERNAL Ut10NativeStmToContentsStm
	(LPSTORAGE pstg, REFCLSID rclsid, BOOL fDeleteSrcStm)
{

	CLIPFORMAT	cfOld;
	CLIPFORMAT	cfNew;	
	LPOLESTR	lpszUserType = NULL;
	HRESULT		error;
	LPSTREAM	pstmSrc = NULL;
	LPSTREAM	pstmDst = NULL;

	
	if (error = ReadFmtUserTypeStg(pstg, &cfOld, &lpszUserType))
		return error;

	if (rclsid == CLSID_StaticDib)
		cfNew = CF_DIB;
	else if (rclsid == CLSID_StaticMetafile)
		cfNew = CF_METAFILEPICT;
	else {
		AssertSz(FALSE, "Internal Error: this routine shouldn't have been called for this class");
		return ResultFromScode(E_FAIL);
	}
	
	if (cfOld == g_cfPBrush) {
		if (cfNew != CF_DIB) {
			error = ResultFromScode(DV_E_CLIPFORMAT);			
			goto errRtn;
		}
	} else if (cfOld == g_cfMSDraw) {
		if (cfNew != CF_METAFILEPICT) {
			error = ResultFromScode(DV_E_CLIPFORMAT);			
			goto errRtn;
		}
	} else {
		// Converted to static object from some class other than PBrush or
		// MSDraw. The data must be in a proper format in the CONTENTS
		// stream.
		return NOERROR;
	}
	
	if (error = pstg->OpenStream(OLE10_NATIVE_STREAM, NULL,
						(STGM_READ|STGM_SHARE_EXCLUSIVE),
						0, &pstmSrc))
		goto errRtn;
	
	if (error = OpenOrCreateStream(pstg, OLE_CONTENTS_STREAM, &pstmDst))
		goto errRtn;
	
	DWORD dwSize;
	if (error = pstmSrc->Read(&dwSize, sizeof(DWORD), NULL))
		goto errRtn;
			
	if (cfOld == g_cfMSDraw) {
		WORD mfp[3]; // mm, xExt, yExt
	
		if (error = pstmSrc->Read(mfp, sizeof(mfp), NULL))
			goto errRtn;
		
		dwSize -= sizeof(mfp);
		
		error = UtMFStmToPlaceableMFStm(pstmSrc, dwSize,
					(LONG) mfp[1], (LONG) mfp[2], pstmDst);
		
	} else {
		// The PBrush native data format is DIB File format. So all we got to
		// do is CopyTo.
		
		ULARGE_INTEGER ularge_int;
		ULISet32(ularge_int, dwSize);
		if ((error = pstmSrc->CopyTo(pstmDst, ularge_int, NULL,
				NULL)) == NOERROR)
			StSetSize(pstmDst, 0, TRUE);		
	}
	
errRtn:
	if (pstmDst)
		pstmDst->Release();
			
	if (pstmSrc)
		pstmSrc->Release();
	
	if (error == NOERROR) {
 		error = WriteFmtUserTypeStg(pstg, cfNew, lpszUserType);

		if (fDeleteSrcStm)				
			pstg->DestroyElement(OLE10_NATIVE_STREAM);

	} else {
		pstg->DestroyElement(OLE_CONTENTS_STREAM);	
	}	
	
	if (lpszUserType)
		PubMemFree(lpszUserType);
	
	return error;
}
Ejemplo n.º 25
0
HRESULT CDrawEllipse::DoLoad(DWORD dwVer, LPSTREAM pStm)
{
	pStm->Read(&m_enumFillStyle, sizeof(m_enumFillStyle), NULL);
	pStm->Read(&m_enumHorFillDirection, sizeof(m_enumHorFillDirection), NULL);
	pStm->Read(&m_enumVerFillDirection, sizeof(m_enumVerFillDirection), NULL);
	pStm->Read(&m_nHorFillPercent, sizeof(m_nHorFillPercent), NULL);
	pStm->Read(&m_nVerFillPercent, sizeof(m_nVerFillPercent), NULL);
	m_BrushImageFileName.ReadFromStream(pStm);
	pStm->Read(&m_clrFillColor, sizeof(m_clrFillColor), NULL);
	pStm->Read(&m_clrHighLightFill, sizeof(m_clrHighLightFill), NULL);
	
	pStm->Read(&m_enumEdgeStyle, sizeof(m_enumEdgeStyle), NULL);
	pStm->Read(&m_fEdgeWidth, sizeof(m_fEdgeWidth), NULL);
	pStm->Read(&m_enumLineJoinStyle, sizeof(m_enumLineJoinStyle), NULL);
	
	pStm->Read(&m_clrEdgeColor, sizeof(m_clrEdgeColor), NULL);
	pStm->Read(&m_clrHighLightEdge, sizeof(m_clrHighLightEdge), NULL);
	
	pStm->Read(&m_ptRotateBase, sizeof(m_ptRotateBase), NULL);
	pStm->Read(&m_enumScaleBase, sizeof(m_enumScaleBase), NULL);
	
	pStm->Read(&m_enumMousePointer, sizeof(m_enumMousePointer), NULL);
	m_bstrDescription.ReadFromStream(pStm);
	
	return CCxDrawObjectBase::DoLoad(dwVer, pStm);
}