134 lines
4.8 KiB
C++
134 lines
4.8 KiB
C++
|
//+-------------------------------------------------------------------------
|
||
|
//
|
||
|
// Microsoft Windows
|
||
|
//
|
||
|
// Copyright (C) Microsoft Corporation, 1999 - 1999
|
||
|
//
|
||
|
// File: dispobj.cpp
|
||
|
//
|
||
|
//--------------------------------------------------------------------------
|
||
|
|
||
|
// DispObj.cpp : Implementation of CMMCDisplayObject
|
||
|
#include "stdafx.h"
|
||
|
#include "cic.h"
|
||
|
#include "DispObj.h"
|
||
|
#include "mmc.h"
|
||
|
#include <wtypes.h>
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CMMCDisplayObject
|
||
|
CMMCDisplayObject::CMMCDisplayObject()
|
||
|
{
|
||
|
m_type = MMC_TASK_DISPLAY_UNINITIALIZED;
|
||
|
|
||
|
m_bstrFontFamilyName =
|
||
|
m_bstrURLtoEOT =
|
||
|
m_bstrSymbolString =
|
||
|
m_bstrMouseOffBitmap =
|
||
|
m_bstrMouseOverBitmap = NULL;
|
||
|
}
|
||
|
CMMCDisplayObject::~CMMCDisplayObject()
|
||
|
{
|
||
|
if (m_bstrFontFamilyName) SysFreeString(m_bstrFontFamilyName);
|
||
|
if (m_bstrURLtoEOT) SysFreeString(m_bstrURLtoEOT);
|
||
|
if (m_bstrSymbolString) SysFreeString(m_bstrSymbolString);
|
||
|
if (m_bstrMouseOffBitmap) SysFreeString(m_bstrMouseOffBitmap);
|
||
|
if (m_bstrMouseOverBitmap) SysFreeString(m_bstrMouseOverBitmap);
|
||
|
}
|
||
|
|
||
|
STDMETHODIMP CMMCDisplayObject::get_DisplayObjectType(long* pVal)
|
||
|
{
|
||
|
*pVal = m_type;
|
||
|
return S_OK;
|
||
|
}
|
||
|
|
||
|
STDMETHODIMP CMMCDisplayObject::get_FontFamilyName (BSTR* pVal)
|
||
|
{
|
||
|
if (m_bstrFontFamilyName)
|
||
|
*pVal = SysAllocString ((const OLECHAR *)m_bstrFontFamilyName);
|
||
|
return S_OK;
|
||
|
}
|
||
|
|
||
|
STDMETHODIMP CMMCDisplayObject::get_URLtoEOT (BSTR* pVal)
|
||
|
{
|
||
|
if (m_bstrURLtoEOT)
|
||
|
*pVal = SysAllocString ((const OLECHAR *)m_bstrURLtoEOT);
|
||
|
return S_OK;
|
||
|
}
|
||
|
|
||
|
STDMETHODIMP CMMCDisplayObject::get_SymbolString (BSTR* pVal)
|
||
|
{
|
||
|
if (m_bstrSymbolString)
|
||
|
*pVal = SysAllocString ((const OLECHAR *)m_bstrSymbolString);
|
||
|
return S_OK;
|
||
|
}
|
||
|
|
||
|
STDMETHODIMP CMMCDisplayObject::get_MouseOffBitmap (BSTR* pVal)
|
||
|
{
|
||
|
if (m_bstrMouseOffBitmap)
|
||
|
*pVal = SysAllocString ((const OLECHAR *)m_bstrMouseOffBitmap);
|
||
|
return S_OK;
|
||
|
}
|
||
|
|
||
|
STDMETHODIMP CMMCDisplayObject::get_MouseOverBitmap (BSTR* pVal)
|
||
|
{
|
||
|
if (m_bstrMouseOverBitmap)
|
||
|
*pVal = SysAllocString ((const OLECHAR *)m_bstrMouseOverBitmap);
|
||
|
return S_OK;
|
||
|
}
|
||
|
|
||
|
HRESULT CMMCDisplayObject::Init(MMC_TASK_DISPLAY_OBJECT* pdo)
|
||
|
{
|
||
|
_ASSERT (m_type == MMC_TASK_DISPLAY_UNINITIALIZED);
|
||
|
if (m_type != MMC_TASK_DISPLAY_UNINITIALIZED)
|
||
|
return E_UNEXPECTED; // only allowed in here once
|
||
|
|
||
|
switch (m_type = pdo->eDisplayType) {
|
||
|
default:
|
||
|
case MMC_TASK_DISPLAY_UNINITIALIZED:
|
||
|
// _ASSERT (0 && "uninitialized MMC_TASK_DISPLAY_OBJECT struct");
|
||
|
return E_INVALIDARG;
|
||
|
case MMC_TASK_DISPLAY_TYPE_SYMBOL: // fontname, EOT, symbols
|
||
|
// all three fields MUST be filled out
|
||
|
_ASSERT (pdo->uSymbol.szFontFamilyName && pdo->uSymbol.szURLtoEOT && pdo->uSymbol.szSymbolString);
|
||
|
if (!(pdo->uSymbol.szFontFamilyName && pdo->uSymbol.szURLtoEOT && pdo->uSymbol.szSymbolString))
|
||
|
return E_INVALIDARG;
|
||
|
|
||
|
m_bstrFontFamilyName = SysAllocString (pdo->uSymbol.szFontFamilyName);
|
||
|
m_bstrURLtoEOT = SysAllocString (pdo->uSymbol.szURLtoEOT);
|
||
|
m_bstrSymbolString = SysAllocString (pdo->uSymbol.szSymbolString);
|
||
|
if (m_bstrFontFamilyName && m_bstrURLtoEOT && m_bstrSymbolString)
|
||
|
return S_OK;
|
||
|
return E_OUTOFMEMORY;
|
||
|
break;
|
||
|
case MMC_TASK_DISPLAY_TYPE_VANILLA_GIF: // (GIF) index 0 is transparent
|
||
|
case MMC_TASK_DISPLAY_TYPE_CHOCOLATE_GIF: // (GIF) index 1 is transparent
|
||
|
case MMC_TASK_DISPLAY_TYPE_BITMAP: // non-transparent raster
|
||
|
if ( pdo->uBitmap.szMouseOffBitmap &&
|
||
|
pdo->uBitmap.szMouseOverBitmap ){
|
||
|
// if they both exist, like they're supposed to
|
||
|
m_bstrMouseOffBitmap = SysAllocString (pdo->uBitmap.szMouseOffBitmap);
|
||
|
m_bstrMouseOverBitmap = SysAllocString (pdo->uBitmap.szMouseOverBitmap);
|
||
|
} else if (pdo->uBitmap.szMouseOverBitmap) {
|
||
|
// if only MouseOver image exists:
|
||
|
// not too bad since it's probably color
|
||
|
m_bstrMouseOffBitmap = SysAllocString (pdo->uBitmap.szMouseOverBitmap);
|
||
|
m_bstrMouseOverBitmap = SysAllocString (pdo->uBitmap.szMouseOverBitmap);
|
||
|
} else if (pdo->uBitmap.szMouseOffBitmap) {
|
||
|
// if only MouseOff image exists:
|
||
|
// they're being bad, but not too bad
|
||
|
m_bstrMouseOffBitmap = SysAllocString (pdo->uBitmap.szMouseOffBitmap);
|
||
|
m_bstrMouseOverBitmap = SysAllocString (pdo->uBitmap.szMouseOffBitmap);
|
||
|
} else {
|
||
|
// else they're really bad
|
||
|
_ASSERT (0 && "MMC_TASK_DISPLAY_BITMAP uninitialized");
|
||
|
return E_INVALIDARG;
|
||
|
}
|
||
|
if (m_bstrMouseOffBitmap && m_bstrMouseOverBitmap)
|
||
|
return S_OK;
|
||
|
return E_OUTOFMEMORY;
|
||
|
break;
|
||
|
}
|
||
|
return E_UNEXPECTED; // can't get here
|
||
|
}
|