mirror of
https://github.com/dashr9230/SA-MP.git
synced 2025-01-04 00:23:22 +08:00
182 lines
8.1 KiB
C++
182 lines
8.1 KiB
C++
//-----------------------------------------------------------------------------
|
|
// File: DXUtil.h
|
|
//
|
|
// Desc: Helper functions and typing shortcuts for DirectX programming.
|
|
//
|
|
// Copyright (c) Microsoft Corporation. All rights reserved
|
|
//-----------------------------------------------------------------------------
|
|
#ifndef DXUTIL_H
|
|
#define DXUTIL_H
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Miscellaneous helper functions
|
|
//-----------------------------------------------------------------------------
|
|
#define SAFE_DELETE(p) { if(p) { delete (p); (p)=NULL; } }
|
|
#define SAFE_DELETE_ARRAY(p) { if(p) { delete[] (p); (p)=NULL; } }
|
|
#define SAFE_RELEASE(p) { if(p) { (p)->Release(); (p)=NULL; } }
|
|
|
|
|
|
#ifndef UNDER_CE
|
|
//-----------------------------------------------------------------------------
|
|
// Name: DXUtil_GetDXSDKMediaPath() and DXUtil_FindMediaFile()
|
|
// Desc: Returns the DirectX SDK path, as stored in the system registry
|
|
// during the SDK install.
|
|
//-----------------------------------------------------------------------------
|
|
HRESULT DXUtil_GetDXSDKMediaPathCch( TCHAR* strDest, int cchDest );
|
|
HRESULT DXUtil_GetDXSDKMediaPathCb( TCHAR* szDest, int cbDest );
|
|
HRESULT DXUtil_FindMediaFileCch( TCHAR* strDestPath, int cchDest, LPCTSTR strFilename );
|
|
HRESULT DXUtil_FindMediaFileCb( TCHAR* szDestPath, int cbDest, LPCTSTR strFilename );
|
|
#endif // !UNDER_CE
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Name: DXUtil_Read*RegKey() and DXUtil_Write*RegKey()
|
|
// Desc: Helper functions to read/write a string registry key
|
|
//-----------------------------------------------------------------------------
|
|
HRESULT DXUtil_WriteStringRegKey( HKEY hKey, LPCTSTR strRegName, LPCTSTR strValue );
|
|
HRESULT DXUtil_WriteFloatRegKey( HKEY hKey, LPCTSTR strRegName, FLOAT fValue );
|
|
HRESULT DXUtil_WriteIntRegKey( HKEY hKey, LPCTSTR strRegName, DWORD dwValue );
|
|
HRESULT DXUtil_WriteGuidRegKey( HKEY hKey, LPCTSTR strRegName, GUID guidValue );
|
|
HRESULT DXUtil_WriteBoolRegKey( HKEY hKey, LPCTSTR strRegName, BOOL bValue );
|
|
|
|
HRESULT DXUtil_ReadStringRegKeyCch( HKEY hKey, LPCTSTR strRegName, TCHAR* strDest, DWORD cchDest, LPCTSTR strDefault );
|
|
HRESULT DXUtil_ReadStringRegKeyCb( HKEY hKey, LPCTSTR strRegName, TCHAR* strDest, DWORD cbDest, LPCTSTR strDefault );
|
|
HRESULT DXUtil_ReadFloatRegKey( HKEY hKey, LPCTSTR strRegName, FLOAT* fDest, FLOAT fDefault );
|
|
HRESULT DXUtil_ReadIntRegKey( HKEY hKey, LPCTSTR strRegName, DWORD* pdwValue, DWORD dwDefault );
|
|
HRESULT DXUtil_ReadGuidRegKey( HKEY hKey, LPCTSTR strRegName, GUID* pGuidValue, GUID& guidDefault );
|
|
HRESULT DXUtil_ReadBoolRegKey( HKEY hKey, LPCTSTR strRegName, BOOL* pbValue, BOOL bDefault );
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Name: DXUtil_Timer()
|
|
// Desc: Performs timer opertations. Use the following commands:
|
|
// TIMER_RESET - to reset the timer
|
|
// TIMER_START - to start the timer
|
|
// TIMER_STOP - to stop (or pause) the timer
|
|
// TIMER_ADVANCE - to advance the timer by 0.1 seconds
|
|
// TIMER_GETABSOLUTETIME - to get the absolute system time
|
|
// TIMER_GETAPPTIME - to get the current time
|
|
// TIMER_GETELAPSEDTIME - to get the time that elapsed between
|
|
// TIMER_GETELAPSEDTIME calls
|
|
//-----------------------------------------------------------------------------
|
|
enum TIMER_COMMAND { TIMER_RESET, TIMER_START, TIMER_STOP, TIMER_ADVANCE,
|
|
TIMER_GETABSOLUTETIME, TIMER_GETAPPTIME, TIMER_GETELAPSEDTIME };
|
|
FLOAT __stdcall DXUtil_Timer( TIMER_COMMAND command );
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// UNICODE support for converting between CHAR, TCHAR, and WCHAR strings
|
|
//-----------------------------------------------------------------------------
|
|
HRESULT DXUtil_ConvertAnsiStringToWideCch( WCHAR* wstrDestination, const CHAR* strSource, int cchDestChar );
|
|
HRESULT DXUtil_ConvertWideStringToAnsiCch( CHAR* strDestination, const WCHAR* wstrSource, int cchDestChar );
|
|
HRESULT DXUtil_ConvertGenericStringToAnsiCch( CHAR* strDestination, const TCHAR* tstrSource, int cchDestChar );
|
|
HRESULT DXUtil_ConvertGenericStringToWideCch( WCHAR* wstrDestination, const TCHAR* tstrSource, int cchDestChar );
|
|
HRESULT DXUtil_ConvertAnsiStringToGenericCch( TCHAR* tstrDestination, const CHAR* strSource, int cchDestChar );
|
|
HRESULT DXUtil_ConvertWideStringToGenericCch( TCHAR* tstrDestination, const WCHAR* wstrSource, int cchDestChar );
|
|
HRESULT DXUtil_ConvertAnsiStringToWideCb( WCHAR* wstrDestination, const CHAR* strSource, int cbDestChar );
|
|
HRESULT DXUtil_ConvertWideStringToAnsiCb( CHAR* strDestination, const WCHAR* wstrSource, int cbDestChar );
|
|
HRESULT DXUtil_ConvertGenericStringToAnsiCb( CHAR* strDestination, const TCHAR* tstrSource, int cbDestChar );
|
|
HRESULT DXUtil_ConvertGenericStringToWideCb( WCHAR* wstrDestination, const TCHAR* tstrSource, int cbDestChar );
|
|
HRESULT DXUtil_ConvertAnsiStringToGenericCb( TCHAR* tstrDestination, const CHAR* strSource, int cbDestChar );
|
|
HRESULT DXUtil_ConvertWideStringToGenericCb( TCHAR* tstrDestination, const WCHAR* wstrSource, int cbDestChar );
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Readme functions
|
|
//-----------------------------------------------------------------------------
|
|
VOID DXUtil_LaunchReadme( HWND hWnd, LPCTSTR strLoc = NULL );
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// GUID to String converting
|
|
//-----------------------------------------------------------------------------
|
|
HRESULT DXUtil_ConvertGUIDToStringCch( const GUID* pGuidSrc, TCHAR* strDest, int cchDestChar );
|
|
HRESULT DXUtil_ConvertGUIDToStringCb( const GUID* pGuidSrc, TCHAR* strDest, int cbDestChar );
|
|
HRESULT DXUtil_ConvertStringToGUID( const TCHAR* strIn, GUID* pGuidOut );
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Debug printing support
|
|
// See dxerr9.h for more debug printing support
|
|
//-----------------------------------------------------------------------------
|
|
VOID DXUtil_Trace( LPCTSTR strMsg, ... );
|
|
|
|
#if defined(DEBUG) | defined(_DEBUG)
|
|
#define DXTRACE DXUtil_Trace
|
|
#else
|
|
#define DXTRACE sizeof
|
|
#endif
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Name: ArrayListType
|
|
// Desc: Indicates how data should be stored in a CArrayList
|
|
//-----------------------------------------------------------------------------
|
|
enum ArrayListType
|
|
{
|
|
AL_VALUE, // entry data is copied into the list
|
|
AL_REFERENCE, // entry pointers are copied into the list
|
|
};
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Name: CArrayList
|
|
// Desc: A growable array
|
|
//-----------------------------------------------------------------------------
|
|
class CArrayList
|
|
{
|
|
protected:
|
|
ArrayListType m_ArrayListType;
|
|
void* m_pData;
|
|
UINT m_BytesPerEntry;
|
|
UINT m_NumEntries;
|
|
UINT m_NumEntriesAllocated;
|
|
|
|
public:
|
|
CArrayList( ArrayListType Type, UINT BytesPerEntry = 0 );
|
|
~CArrayList( void );
|
|
HRESULT Add( void* pEntry );
|
|
void Remove( UINT Entry );
|
|
void* GetPtr( UINT Entry );
|
|
UINT Count( void ) { return m_NumEntries; }
|
|
bool Contains( void* pEntryData );
|
|
void Clear( void ) { m_NumEntries = 0; }
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// WinCE build support
|
|
//-----------------------------------------------------------------------------
|
|
|
|
#ifdef UNDER_CE
|
|
|
|
#define CheckDlgButton(hdialog, id, state) ::SendMessage(::GetDlgItem(hdialog, id), BM_SETCHECK, state, 0)
|
|
#define IsDlgButtonChecked(hdialog, id) ::SendMessage(::GetDlgItem(hdialog, id), BM_GETCHECK, 0L, 0L)
|
|
#define GETTIMESTAMP GetTickCount
|
|
#define _TWINCE(x) _T(x)
|
|
|
|
__inline int GetScrollPos(HWND hWnd, int nBar)
|
|
{
|
|
SCROLLINFO si;
|
|
memset(&si, 0, sizeof(si));
|
|
si.cbSize = sizeof(si);
|
|
si.fMask = SIF_POS;
|
|
if (!GetScrollInfo(hWnd, nBar, &si))
|
|
{
|
|
return 0;
|
|
}
|
|
else
|
|
{
|
|
return si.nPos;
|
|
}
|
|
}
|
|
|
|
#else // !UNDER_CE
|
|
|
|
#define GETTIMESTAMP timeGetTime
|
|
#define _TWINCE(x) x
|
|
|
|
#endif // UNDER_CE
|
|
|
|
|
|
#endif // DXUTIL_H
|