110 lines
3 KiB
C++
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;
|
||
|
}
|