📄 helperpicture.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 + -