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

📄 helperpicture.h

📁 vc编写的
💻 H
字号:
/*
 Copyright (c) 1999, kSet Lab 
 Author: Konstantin Bukreev 
 E-mail: konstantin@mail.primorye.ru 

 Created: 20.09.99 17:19:20
 Version: 1.0.0

*/

#ifndef _HelperPicture_3f18f2a2_6f76_11d3_9285_0080adb811c5
#define _HelperPicture_3f18f2a2_6f76_11d3_9285_0080adb811c5

#if _MSC_VER > 1000 
#pragma once
#endif // _MSC_VER > 1000

#define IMPLEMENT_PICTURE_PROPERTY(fname, pname, dispid) \
	HRESULT STDMETHODCALLTYPE get_##fname(IPictureDisp **pVal) \
	{ \
		ATLTRACE2(atlTraceControls,2,_T("_HelperPictureProperty::get_%s\n"), #fname); \
		return GetPicture(m_##pname, pVal); \
	} \
	HRESULT STDMETHODCALLTYPE putref_##fname(IPictureDisp *newVal) \
	{ \
		ATLTRACE2(atlTraceControls,2,_T("_HelperPictureProperty::putref_%s\n"), #fname); \
		return PutRefPicture(dispid, m_##pname, newVal); \
	} \
	HRESULT STDMETHODCALLTYPE put_##fname(IPictureDisp *newVal) \
	{ \
		ATLTRACE2(atlTraceControls,2,_T("_HelperPictureProperty::put_%s\n"), #fname); \
		return PutPicture(dispid, m_##pname, newVal); \
	} 

template <class T>
class _HelperPictureProperty
{
public:
	HRESULT PutPicture (DISPID dispidID, CComPtr<IPictureDisp>& mpPicture, IPictureDisp* pPicture)
	{
		T* pT = static_cast<T*>(this);
		if (pT->FireOnRequestEdit(dispidID) == S_FALSE)
			return S_FALSE;
	
		mpPicture = 0;
		if (pPicture)
		{
			CComQIPtr<IPersistStream, &IID_IPersistStream> p(pPicture);
			if (p)
			{
				ULARGE_INTEGER l;
				p->GetSizeMax(&l);
				HGLOBAL hGlob = GlobalAlloc(GHND, l.LowPart);
				if (hGlob)
				{
					CComPtr<IStream> spStream;
					CreateStreamOnHGlobal(hGlob, TRUE, &spStream);
					if (spStream)
					{
						if (SUCCEEDED(p->Save(spStream, FALSE)))
						{
							LARGE_INTEGER l;
							l.QuadPart = 0;
							spStream->Seek(l, STREAM_SEEK_SET, NULL);
							OleLoadPicture(spStream, l.LowPart, FALSE, IID_IPictureDisp, (void**)&mpPicture);
						}
						spStream.Release();
					}
					GlobalFree(hGlob);
				}
			}
		}
		HelperEnd(dispidID);
		return S_OK;
	}
	HRESULT PutRefPicture(DISPID dispidID, CComPtr<IPictureDisp>& mpPicture, IPictureDisp* pPicture)
	{	
		T* pT = static_cast<T*>(this);
		if (pT->FireOnRequestEdit(dispidID) == S_FALSE)
			return S_FALSE;

		mpPicture = pPicture;
		HelperEnd(dispidID);	
		return S_OK;
	}
	HRESULT GetPicture (CComPtr<IPictureDisp>& mpPicture, IPictureDisp** ppPicture)
	{
		*ppPicture = mpPicture;
		if (*ppPicture != NULL)
			(*ppPicture)->AddRef();
		return S_OK;
	}

private:
	void HelperEnd (DISPID dispid)
	{
		T* pT = static_cast<T*>(this);
		pT->m_bRequiresSave = TRUE;
		pT->FireOnChanged(dispid);
		pT->FireViewChange();
		pT->SendOnDataChange(NULL);
	}
};

#endif //_HelperPicture_3f18f2a2_6f76_11d3_9285_0080adb811c5

⌨️ 快捷键说明

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