windows-nt/Source/XPSP1/NT/multimedia/directx/dxvb/dx7vb/ddpaletteobj.cpp
2020-09-26 16:20:57 +08:00

110 lines
3 KiB
C++

//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1998 - 1998
//
// File: ddpaletteobj.cpp
//
//--------------------------------------------------------------------------
// ddPaletteObj.cpp : Implementation of CDirectApp and DLL registration.
#include "stdafx.h"
#include "Direct.h"
#include "dms.h"
#include "ddPaletteObj.h"
CONSTRUCTOR(_dxj_DirectDrawPalette, {m_dd=NULL;});
DESTRUCTOR(_dxj_DirectDrawPalette, {m_dd=NULL;});
GETSET_OBJECT(_dxj_DirectDrawPalette);
PASS_THROUGH_CAST_1_R(_dxj_DirectDrawPalette, getCaps, GetCaps, long*,(DWORD *))
/////////////////////////////////////////////////////////////////////////////
STDMETHODIMP C_dxj_DirectDrawPaletteObject::getEntries( //long flags,
long base, long numEntries, SAFEARRAY **ppEntries){
HRESULT hr;
if (!ISSAFEARRAY1D(ppEntries,(DWORD)numEntries)) return E_INVALIDARG;
LPPALETTEENTRY pe=(LPPALETTEENTRY)((SAFEARRAY*)*ppEntries)->pvData;
hr=m__dxj_DirectDrawPalette->GetEntries((DWORD) 0,(DWORD) base, (DWORD) numEntries, pe);
return hr;
}
STDMETHODIMP C_dxj_DirectDrawPaletteObject::setEntries(// long flags,
long base, long numEntries, SAFEARRAY **ppEntries){
HRESULT hr;
if (!ISSAFEARRAY1D(ppEntries,(DWORD)numEntries)) return E_INVALIDARG;
LPPALETTEENTRY pe=(LPPALETTEENTRY)((SAFEARRAY*)*ppEntries)->pvData;
hr=m__dxj_DirectDrawPalette->SetEntries((DWORD) 0,(DWORD) base, (DWORD) numEntries, pe);
return hr;
}
/////////////////////////////////////////////////////////////////////////////
//
#if 0
STDMETHODIMP C_dxj_DirectDrawPaletteObject::initialize( I_dxj_DirectDraw2 *val)
{
DO_GETOBJECT_NOTNULL( LPDIRECTDRAW2, lpdd, val)
return m__dxj_DirectDrawPalette->Initialize((LPDIRECTDRAW)lpdd, 0, NULL);
}
/////////////////////////////////////////////////////////////////////////////
//
STDMETHODIMP C_dxj_DirectDrawPaletteObject::internalAttachDD(I_dxj_DirectDraw2 *dd)
{
m_dd = dd;
return S_OK;
}
#endif
/////////////////////////////////////////////////////////////////////////////
//
STDMETHODIMP C_dxj_DirectDrawPaletteObject::setEntriesHalftone(long start, long count)
{
PALETTEENTRY pe[256];
HDC hdc = GetDC(NULL);
if (!hdc) return E_OUTOFMEMORY;
HPALETTE hpal = CreateHalftonePalette(hdc);
if (!hpal) return E_OUTOFMEMORY;
GetPaletteEntries(hpal, 0, 256, pe );
for ( long i = start; i < start+count; i++ )
pe[i].peFlags |= PC_NOCOLLAPSE | D3DPAL_READONLY;
m__dxj_DirectDrawPalette->SetEntries(0,(DWORD)start,(DWORD)count,pe);
ReleaseDC(NULL,hdc);
return S_OK;
}
STDMETHODIMP C_dxj_DirectDrawPaletteObject::setEntriesSystemPalette(long start, long count)
{
PALETTEENTRY pe[256];
UINT uiRet;
HRESULT hr;
HDC hdc = GetDC(NULL);
if (!hdc) return E_OUTOFMEMORY;
uiRet=GetSystemPaletteEntries(hdc,start,count,pe);
if (uiRet<=0) return E_FAIL;
for ( long i = start; i < start+count; i++ )
pe[i].peFlags |= /*PC_NOCOLLAPSE |*/ D3DPAL_READONLY;
hr=m__dxj_DirectDrawPalette->SetEntries(0,(DWORD)start,(DWORD)count,pe);
ReleaseDC(NULL,hdc);
return S_OK;
}