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

📄 dsofcontrol.cpp

📁 用于在线office文档编辑的控件。可以在线新建文档、修改文档
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		*ppv = (IObjectSafety*)&(pThis->m_xObjectSafety);
	}
	else 
	{
		*ppv = NULL;
		hr = E_NOINTERFACE;
	}

	if (NULL != *ppv) // AddRef those interfaces we will return...
        ((IUnknown*)(*ppv))->AddRef();

	return hr;
}

STDMETHODIMP_(ULONG) CDsoFramerControl::XInternalUnknown::AddRef(void)
{
	METHOD_PROLOGUE(CDsoFramerControl, InternalUnknown);
	//TRACE1("CDsoFramerControl::InternalAddRef - %d\n", (pThis->m_cRef + 1));
    return ++(pThis->m_cRef);
}

STDMETHODIMP_(ULONG) CDsoFramerControl::XInternalUnknown::Release(void)
{
	METHOD_PROLOGUE(CDsoFramerControl, InternalUnknown);
	//TRACE1("CDsoFramerControl::InternalRelease - %d\n", (pThis->m_cRef - 1));
    if (0 != --(pThis->m_cRef)) return (pThis->m_cRef);
	ODS("CDsoFramerControl delete\n");
	InterlockedDecrement((LPLONG)&v_cLocks);
	delete pThis; return 0;
}


////////////////////////////////////////////////////////////////////////
//
// CDsoFramerControl::XPersistStreamInit -- IPersistStreamInit Implementation
//
//	 STDMETHODIMP GetClassID(CLSID *pClassID);
//	 STDMETHODIMP IsDirty(void);
//	 STDMETHODIMP Load(LPSTREAM pStm);
//	 STDMETHODIMP Save(LPSTREAM pStm, BOOL fClearDirty);
//	 STDMETHODIMP GetSizeMax(ULARGE_INTEGER* pcbSize);
//	 STDMETHODIMP InitNew(void);
//
IMPLEMENT_INTERFACE_UNKNOWN(CDsoFramerControl, PersistStreamInit)

STDMETHODIMP CDsoFramerControl::XPersistStreamInit::GetClassID(CLSID *pClassID)
{
	ODS("CDsoFramerControl::XPersistStreamInit::GetClassID\n");
	if (pClassID) *pClassID = CLSID_FramerControl;
	return S_OK;
}

STDMETHODIMP CDsoFramerControl::XPersistStreamInit::IsDirty(void)
{
	METHOD_PROLOGUE(CDsoFramerControl, PersistStreamInit);
    ODS("CDsoFramerControl::XPersistStreamInit::IsDirty\n");
    return (pThis->m_fDirty) ? S_OK : S_FALSE;
}


#define STREAMHDR_SIGNATURE 0x1234ABCD  // Signature to identify our format (avoid crashes!)

STDMETHODIMP CDsoFramerControl::XPersistStreamInit::Load(LPSTREAM pStm)
{
    HRESULT hr;
	DWORD dwSig, dwT;

	METHOD_PROLOGUE(CDsoFramerControl, PersistStreamInit);
    ODS("CDsoFramerControl::XPersistStreamInit::Load\n");

 // look for our header structure, so we can verify stream validity.
    hr = pStm->Read(&dwSig, sizeof(DWORD), NULL);
    RETURN_ON_FAILURE(hr);

    if (dwSig != STREAMHDR_SIGNATURE)
        return E_UNEXPECTED;

 // we like the stream.  let's go load in our two properties.
    hr = pStm->Read(&(pThis->m_Size), sizeof(SIZEL), NULL);
    RETURN_ON_FAILURE(hr);

	DsoHimetricToPixels(&(pThis->m_Size.cx), &(pThis->m_Size.cy));

    hr = pStm->Read(&(pThis->m_clrBorderColor), sizeof(OLE_COLOR), NULL);
    RETURN_ON_FAILURE(hr);

    hr = pStm->Read(&(pThis->m_clrBackColor), sizeof(OLE_COLOR), NULL);
    RETURN_ON_FAILURE(hr);

    hr = pStm->Read(&(pThis->m_clrForeColor), sizeof(OLE_COLOR), NULL);
    RETURN_ON_FAILURE(hr);

    hr = pStm->Read(&(pThis->m_clrTBarColor), sizeof(OLE_COLOR), NULL);
    RETURN_ON_FAILURE(hr);

    hr = pStm->Read(&(pThis->m_clrTBarTextColor), sizeof(OLE_COLOR), NULL);
    RETURN_ON_FAILURE(hr);

    hr = pStm->Read(&dwT, sizeof(DWORD), NULL);
    RETURN_ON_FAILURE(hr);

	pThis->m_fBorderStyle  = LOBYTE(LOWORD(dwT));
    pThis->m_fShowMenuBar  = HIBYTE(LOWORD(dwT));
	pThis->m_fShowToolbars = LOBYTE(HIWORD(dwT));
	pThis->m_fShowTitlebar = HIBYTE(HIWORD(dwT));

    hr = pStm->Read(&dwT, sizeof(DWORD), NULL);
    RETURN_ON_FAILURE(hr);

	if (dwT)
	{
		LPWSTR pwsz = (LPWSTR)DsoMemAlloc(dwT+2);
		if (pwsz)
		{
			hr = pStm->Read(pwsz, dwT, NULL);
			if (SUCCEEDED(hr))
				pThis->m_bstrCustomCaption = SysAllocString(pwsz);
		}
		DsoMemFree(pwsz);
	}

    return S_OK;
}

STDMETHODIMP CDsoFramerControl::XPersistStreamInit::Save(LPSTREAM pStm, BOOL fClearDirty)
{
    HRESULT hr;
	DWORD   dwT, dwSig = STREAMHDR_SIGNATURE;
	SIZEL   slSize;

	METHOD_PROLOGUE(CDsoFramerControl, PersistStreamInit);
    ODS("CDsoFramerControl::XPersistStreamInit::Save\n");

 // first thing to do is write out our stream sig...
    hr = pStm->Write(&dwSig, sizeof(DWORD), NULL);
    RETURN_ON_FAILURE(hr);

 // the only properties we're currently persisting here are the size
 // properties for this control.  make sure we do that in HiMetric
	slSize = pThis->m_Size;
	DsoPixelsToHimetric(&(slSize.cx), &(slSize.cy));

    hr = pStm->Write(&slSize, sizeof(SIZEL), NULL);
    RETURN_ON_FAILURE(hr);

    hr = pStm->Write(&(pThis->m_clrBorderColor), sizeof(OLE_COLOR), NULL);
    RETURN_ON_FAILURE(hr);

    hr = pStm->Write(&(pThis->m_clrBackColor), sizeof(OLE_COLOR), NULL);
    RETURN_ON_FAILURE(hr);

    hr = pStm->Write(&(pThis->m_clrForeColor), sizeof(OLE_COLOR), NULL);
    RETURN_ON_FAILURE(hr);

    hr = pStm->Write(&(pThis->m_clrTBarColor), sizeof(OLE_COLOR), NULL);
    RETURN_ON_FAILURE(hr);

    hr = pStm->Write(&(pThis->m_clrTBarTextColor), sizeof(OLE_COLOR), NULL);
    RETURN_ON_FAILURE(hr);

	dwT = (DWORD)MAKELONG(
        MAKEWORD((BYTE)(pThis->m_fBorderStyle), (BYTE)(pThis->m_fShowMenuBar)),
		MAKEWORD((BYTE)(pThis->m_fShowToolbars), (BYTE)(pThis->m_fShowTitlebar)));

    hr = pStm->Write(&dwT, sizeof(DWORD), NULL);
    RETURN_ON_FAILURE(hr);

	dwT = 0;
	if (pThis->m_bstrCustomCaption)
		dwT = SysStringByteLen(pThis->m_bstrCustomCaption);

	hr = pStm->Write(&dwT, sizeof(DWORD), NULL);
	RETURN_ON_FAILURE(hr);

	if (dwT)
	{
		hr = pStm->Write(pThis->m_bstrCustomCaption, dwT, NULL);
		RETURN_ON_FAILURE(hr);
	}

 // clear out dirty flag and notify that we're done with save.
    if (fClearDirty)
        pThis->m_fDirty = FALSE;

    if (pThis->m_pOleAdviseHolder)
        pThis->m_pOleAdviseHolder->SendOnSave();

    return S_OK;
}

STDMETHODIMP CDsoFramerControl::XPersistStreamInit::GetSizeMax(ULARGE_INTEGER *pcbSize)
{
    ODS("CDsoFramerControl::XPersistStreamInit::GetSizeMax\n");
    return E_NOTIMPL;
}

STDMETHODIMP CDsoFramerControl::XPersistStreamInit::InitNew(void)
{
    METHOD_PROLOGUE(CDsoFramerControl, PersistStreamInit);
    ODS("CDsoFramerControl::XPersistStreamInit::InitNew\n");
 // If we are new control, we are dirty by default...
	pThis->m_fDirty	= TRUE;  
    return S_OK;
}

////////////////////////////////////////////////////////////////////////
//
// CDsoFramerControl::XPersistPropertyBag -- IPersistPropertyBag Implementation
//
//	 STDMETHODIMP GetClassID(CLSID *pClassID);
//	 STDMETHODIMP InitNew();
//	 STDMETHODIMP Load(IPropertyBag* pPropBag, IErrorLog* pErrorLog);
//	 STDMETHODIMP Save(IPropertyBag* pPropBag, BOOL fClearDirty, BOOL fSaveAllProperties);
//
IMPLEMENT_INTERFACE_UNKNOWN(CDsoFramerControl, PersistPropertyBag)

STDMETHODIMP CDsoFramerControl::XPersistPropertyBag::GetClassID(CLSID *pClassID)
{
    ODS("CDsoFramerControl::XPersistPropertyBag::GetClassID\n");
	if (pClassID) *pClassID = CLSID_FramerControl;
	return S_OK;
}

STDMETHODIMP CDsoFramerControl::XPersistPropertyBag::InitNew()
{
	METHOD_PROLOGUE(CDsoFramerControl, PersistPropertyBag);
    ODS("CDsoFramerControl::XPersistPropertyBag::InitNew\n");
	return pThis->m_xPersistStreamInit.InitNew();
}

STDMETHODIMP CDsoFramerControl::XPersistPropertyBag::Load(IPropertyBag* pPropBag, IErrorLog* pErrorLog)
{
    VARIANT v;
    HRESULT hr;
	SIZEL sl = {5000, 3000};

	METHOD_PROLOGUE(CDsoFramerControl, PersistPropertyBag);
    ODS("CDsoFramerControl::XPersistPropertyBag::Load\n");

    v.vt = VT_I4;
	v.lVal = 0;

    hr = pPropBag->Read(L"_ExtentX", &v, pErrorLog);
    if (SUCCEEDED(hr)){sl.cx = v.lVal;}
    
    v.lVal = 0;
    hr = pPropBag->Read(L"_ExtentY", &v, pErrorLog);
    if (SUCCEEDED(hr)){sl.cy = v.lVal;}

	DsoHimetricToPixels(&(sl.cx), &(sl.cy));
	pThis->m_Size = sl;

    hr = pPropBag->Read(L"Titlebar", &v, pErrorLog);
	if (SUCCEEDED(hr)){pThis->m_fShowTitlebar = v.boolVal;}

    hr = pPropBag->Read(L"Toolbars", &v, pErrorLog);
	if (SUCCEEDED(hr)){pThis->m_fShowToolbars = v.boolVal;}

    hr = pPropBag->Read(L"BorderStyle", &v, pErrorLog);
	if (SUCCEEDED(hr)){pThis->m_fBorderStyle = v.lVal;}

    hr = pPropBag->Read(L"BorderColor", &v, pErrorLog);
	if (SUCCEEDED(hr)){pThis->m_clrBorderColor = v.lVal;}

    hr = pPropBag->Read(L"BackColor", &v, pErrorLog);
	if (SUCCEEDED(hr)){pThis->m_clrBackColor = v.lVal;}

    hr = pPropBag->Read(L"ForeColor", &v, pErrorLog);
	if (SUCCEEDED(hr)){pThis->m_clrForeColor = v.lVal;}

    hr = pPropBag->Read(L"TitlebarColor", &v, pErrorLog);
	if (SUCCEEDED(hr)){pThis->m_clrTBarColor = v.lVal;}

    hr = pPropBag->Read(L"TitlebarTextColor", &v, pErrorLog);
	if (SUCCEEDED(hr)){pThis->m_clrTBarTextColor = v.lVal;}

    hr = pPropBag->Read(L"Caption", &v, pErrorLog);
	if (SUCCEEDED(hr))
	{
		LPWSTR pwsz = LPWSTR_FROM_VARIANT(v);
		if (pwsz) pThis->m_bstrCustomCaption = SysAllocString(pwsz);
		VariantClear(&v);
	}

    pThis->m_fShowMenuBar = FALSE;
    hr = pPropBag->Read(L"Menubar", &v, pErrorLog);
	if (SUCCEEDED(hr)){pThis->m_fShowMenuBar = v.boolVal;}

    return S_OK;
}

STDMETHODIMP CDsoFramerControl::XPersistPropertyBag::Save(IPropertyBag* pPropBag, BOOL fClearDirty, BOOL fSaveAllProperties)
{
    HRESULT hr;
    VARIANT v;
    SIZEL   sl;

	METHOD_PROLOGUE(CDsoFramerControl, PersistPropertyBag);
    ODS("CDsoFramerControl::XPersistPropertyBag::Save\n");

	sl = pThis->m_Size;
    DsoPixelsToHimetric(&(sl.cx), &(sl.cy));

    v.vt = VT_I4; v.lVal = sl.cx;
    hr = pPropBag->Write(L"_ExtentX", &v);
    RETURN_ON_FAILURE(hr);

    v.lVal = sl.cy;
    hr = pPropBag->Write(L"_ExtentY", &v);
    RETURN_ON_FAILURE(hr);

    v.lVal = pThis->m_clrBorderColor;
    hr = pPropBag->Write(L"BorderColor", &v);
    RETURN_ON_FAILURE(hr);

    v.lVal = pThis->m_clrBackColor;
    hr = pPropBag->Write(L"BackColor", &v);
    RETURN_ON_FAILURE(hr);

    v.lVal = pThis->m_clrForeColor;
    hr = pPropBag->Write(L"ForeColor", &v);
    RETURN_ON_FAILURE(hr);

    v.lVal = pThis->m_clrTBarColor;
    hr = pPropBag->Write(L"TitlebarColor", &v);
    RETURN_ON_FAILURE(hr);

    v.lVal = pThis->m_clrTBarTextColor;
    hr = pPropBag->Write(L"TitlebarTextColor", &v);
    RETURN_ON_FAILURE(hr);

    v.lVal = pThis->m_fBorderStyle;
    hr = pPropBag->Write(L"BorderStyle", &v);
    RETURN_ON_FAILURE(hr);

    v.vt = VT_BOOL;
	v.boolVal = pThis->m_fShowTitlebar;
    hr = pPropBag->Write(L"Titlebar", &v);
    RETURN_ON_FAILURE(hr);

	v.boolVal = pThis->m_fShowToolbars;
    hr = pPropBag->Write(L"Toolbars", &v);
    RETURN_ON_FAILURE(hr);

	if (pThis->m_bstrCustomCaption)
	{
		v.vt = VT_BSTR;
		v.bstrVal = pThis->m_bstrCustomCaption;
		hr = pPropBag->Write(L"Caption", &v);
		RETURN_ON_FAILURE(hr);
	}

	v.boolVal = pThis->m_fShowMenuBar;
    hr = pPropBag->Write(L"Menubar", &v);
    RETURN_ON_FAILURE(hr);
	
 // now clear the dirty flag and send out notification 
 // that we're done.  
    if (fClearDirty)
        pThis->m_fDirty = FALSE;

    if (pThis->m_pOleAdviseHolder)
        pThis->m_pOleAdviseHolder->SendOnSave();

    return S_OK;
}

////////////////////////////////////////////////////////////////////////
//
// CDsoFramerControl::XPersistStorage -- IPersistStorage Implementation
//
//	 STDMETHODIMP GetClassID(CLSID *pClassID);
//	 STDMETHODIMP IsDirty(void);
//	 STDMETHODIMP InitNew(LPSTORAGE pStg);
//	 STDMETHODIMP Load(LPSTORAGE pStg);
//	 STDMETHODIMP Save(LPSTORAGE pStg, BOOL fSameAsLoad);
//	 STDMETHODIMP SaveCompleted(LPSTORAGE pStg);
//	 STDMETHODIMP HandsOffStorage(void);
//	 
IMPLEMENT_INTERFACE_UNKNOWN(CDsoFramerControl, PersistStorage)

STDMETHODIMP CDsoFramerControl::XPersistStorage::GetClassID(CLSID *pClassID)
{
    ODS("CDsoFramerControl::XPer

⌨️ 快捷键说明

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