Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//+-------------------------------------------------------------------------
//
// 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
}
|