⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dxutil.cpp

📁 mpeg4 video codec mpeg4 video codec
💻 CPP
📖 第 1 页 / 共 3 页
字号:
        strLastSlash = _tcsrchr( strExeName, TEXT('.') );        if( strLastSlash )            *strLastSlash = 0;    }    if( !bFound )    {        // Search in "%EXE_DIR%\..\%EXE_NAME%".  This matchs the DirectX SDK layout        _tcscpy( strReadmePath, strExePath );        strLastSlash = _tcsrchr( strReadmePath, TEXT('\\') );        if( strLastSlash )            *strLastSlash = 0;        lstrcat( strReadmePath, TEXT("\\") );        lstrcat( strReadmePath, strExeName );        lstrcat( strReadmePath, TEXT("\\readme.txt") );        if( GetFileAttributes( strReadmePath ) != 0xFFFFFFFF )            bFound = TRUE;    }    if( !bFound )    {        // Search in "%EXE_DIR%\"        _tcscpy( strReadmePath, strExePath );        lstrcat( strReadmePath, TEXT("\\readme.txt") );        if( GetFileAttributes( strReadmePath ) != 0xFFFFFFFF )            bFound = TRUE;    }    if( !bFound )    {        // Search in "%EXE_DIR%\.."        _tcscpy( strReadmePath, strExePath );        strLastSlash = _tcsrchr( strReadmePath, TEXT('\\') );        if( strLastSlash )            *strLastSlash = 0;        lstrcat( strReadmePath, TEXT("\\readme.txt") );        if( GetFileAttributes( strReadmePath ) != 0xFFFFFFFF )            bFound = TRUE;    }    if( !bFound )    {        // Search in "%EXE_DIR%\..\.."        _tcscpy( strReadmePath, strExePath );        strLastSlash = _tcsrchr( strReadmePath, TEXT('\\') );        if( strLastSlash )            *strLastSlash = 0;        strLastSlash = _tcsrchr( strReadmePath, TEXT('\\') );        if( strLastSlash )            *strLastSlash = 0;        lstrcat( strReadmePath, TEXT("\\readme.txt") );        if( GetFileAttributes( strReadmePath ) != 0xFFFFFFFF )            bFound = TRUE;    }    if( bFound )    {        // GetProcAddress for ShellExecute, so we don't have to include shell32.lib         // in every project that uses dxutil.cpp        LPShellExecute pShellExecute = NULL;        HINSTANCE hInstShell32 = LoadLibrary(TEXT("shell32.dll"));        if (hInstShell32 != NULL)        {#ifdef UNICODE            pShellExecute = (LPShellExecute)GetProcAddress(hInstShell32, _TWINCE("ShellExecuteW"));#else            pShellExecute = (LPShellExecute)GetProcAddress(hInstShell32, _TWINCE("ShellExecuteA"));#endif            if( pShellExecute != NULL )            {                if( pShellExecute( hWnd, TEXT("open"), strReadmePath, NULL, NULL, SW_SHOW ) > (HINSTANCE) 32 )                    bSuccess = true;            }            FreeLibrary(hInstShell32);        }    }    if( !bSuccess )    {        // Tell the user that the readme couldn't be opened        MessageBox( hWnd, TEXT("Could not find readme.txt"),                     TEXT("DirectX SDK Sample"), MB_ICONWARNING | MB_OK );    }#endif // UNDER_CE}//-----------------------------------------------------------------------------// Name: DXUtil_Trace()// Desc: Outputs to the debug stream a formatted string with a variable-//       argument list.//-----------------------------------------------------------------------------VOID DXUtil_Trace( TCHAR* strMsg, ... ){#if defined(DEBUG) | defined(_DEBUG)    TCHAR strBuffer[512];        va_list args;    va_start(args, strMsg);    _vsntprintf( strBuffer, 512, strMsg, args );    va_end(args);    OutputDebugString( strBuffer );#else    UNREFERENCED_PARAMETER(strMsg);#endif}//-----------------------------------------------------------------------------// Name: DXUtil_ConvertStringToGUID()// Desc: Converts a string to a GUID//-----------------------------------------------------------------------------HRESULT DXUtil_ConvertStringToGUID( const TCHAR* strSrc, GUID* pGuidDest ){    UINT aiTmp[10];    if( _stscanf( strSrc, TEXT("{%8X-%4X-%4X-%2X%2X-%2X%2X%2X%2X%2X%2X}"),                    &pGuidDest->Data1,                     &aiTmp[0], &aiTmp[1],                     &aiTmp[2], &aiTmp[3],                    &aiTmp[4], &aiTmp[5],                    &aiTmp[6], &aiTmp[7],                    &aiTmp[8], &aiTmp[9] ) != 11 )    {        ZeroMemory( pGuidDest, sizeof(GUID) );        return E_FAIL;    }    else    {        pGuidDest->Data2       = (USHORT) aiTmp[0];        pGuidDest->Data3       = (USHORT) aiTmp[1];        pGuidDest->Data4[0]    = (BYTE) aiTmp[2];        pGuidDest->Data4[1]    = (BYTE) aiTmp[3];        pGuidDest->Data4[2]    = (BYTE) aiTmp[4];        pGuidDest->Data4[3]    = (BYTE) aiTmp[5];        pGuidDest->Data4[4]    = (BYTE) aiTmp[6];        pGuidDest->Data4[5]    = (BYTE) aiTmp[7];        pGuidDest->Data4[6]    = (BYTE) aiTmp[8];        pGuidDest->Data4[7]    = (BYTE) aiTmp[9];        return S_OK;    }}//-----------------------------------------------------------------------------// Name: DXUtil_ConvertGUIDToStringCch()// Desc: Converts a GUID to a string //       cchDestChar is the size in TCHARs of strDest.  Be careful not to //       pass in sizeof(strDest) on UNICODE builds//-----------------------------------------------------------------------------HRESULT DXUtil_ConvertGUIDToStringCch( const GUID* pGuidSrc, TCHAR* strDest, int cchDestChar ){    int nResult = _sntprintf( strDest, cchDestChar, TEXT("{%0.8X-%0.4X-%0.4X-%0.2X%0.2X-%0.2X%0.2X%0.2X%0.2X%0.2X%0.2X}"),               pGuidSrc->Data1, pGuidSrc->Data2, pGuidSrc->Data3,               pGuidSrc->Data4[0], pGuidSrc->Data4[1],               pGuidSrc->Data4[2], pGuidSrc->Data4[3],               pGuidSrc->Data4[4], pGuidSrc->Data4[5],               pGuidSrc->Data4[6], pGuidSrc->Data4[7] );    if( nResult < 0 )        return E_FAIL;    return S_OK;}//-----------------------------------------------------------------------------// Name: CArrayList constructor// Desc: //-----------------------------------------------------------------------------CArrayList::CArrayList( ArrayListType Type, UINT BytesPerEntry ){    if( Type == AL_REFERENCE )        BytesPerEntry = sizeof(void*);    m_ArrayListType = Type;    m_pData = NULL;    m_BytesPerEntry = BytesPerEntry;    m_NumEntries = 0;    m_NumEntriesAllocated = 0;}//-----------------------------------------------------------------------------// Name: CArrayList destructor// Desc: //-----------------------------------------------------------------------------CArrayList::~CArrayList( void ){    if( m_pData != NULL )        delete[] m_pData;}//-----------------------------------------------------------------------------// Name: CArrayList::Add// Desc: Adds pEntry to the list.//-----------------------------------------------------------------------------HRESULT CArrayList::Add( void* pEntry ){    if( m_BytesPerEntry == 0 )        return E_FAIL;    if( m_pData == NULL || m_NumEntries + 1 > m_NumEntriesAllocated )    {        void* pDataNew;        UINT NumEntriesAllocatedNew;        if( m_NumEntriesAllocated == 0 )            NumEntriesAllocatedNew = 16;        else            NumEntriesAllocatedNew = m_NumEntriesAllocated * 2;        pDataNew = new BYTE[NumEntriesAllocatedNew * m_BytesPerEntry];        if( pDataNew == NULL )            return E_OUTOFMEMORY;        if( m_pData != NULL )        {            CopyMemory( pDataNew, m_pData, m_NumEntries * m_BytesPerEntry );            delete[] m_pData;        }        m_pData = pDataNew;        m_NumEntriesAllocated = NumEntriesAllocatedNew;    }    if( m_ArrayListType == AL_VALUE )        CopyMemory( (BYTE*)m_pData + (m_NumEntries * m_BytesPerEntry), pEntry, m_BytesPerEntry );    else        *(((void**)m_pData) + m_NumEntries) = pEntry;    m_NumEntries++;    return S_OK;}//-----------------------------------------------------------------------------// Name: CArrayList::Remove// Desc: Remove the item at Entry in the list, and collapse the array. //-----------------------------------------------------------------------------void CArrayList::Remove( UINT Entry ){    // Decrement count    m_NumEntries--;    // Find the entry address    BYTE* pData = (BYTE*)m_pData + (Entry * m_BytesPerEntry);    // Collapse the array    MoveMemory( pData, pData + m_BytesPerEntry, ( m_NumEntries - Entry ) * m_BytesPerEntry );}//-----------------------------------------------------------------------------// Name: CArrayList::GetPtr// Desc: Returns a pointer to the Entry'th entry in the list.//-----------------------------------------------------------------------------void* CArrayList::GetPtr( UINT Entry ){    if( m_ArrayListType == AL_VALUE )        return (BYTE*)m_pData + (Entry * m_BytesPerEntry);    else        return *(((void**)m_pData) + Entry);}//-----------------------------------------------------------------------------// Name: CArrayList::Contains// Desc: Returns whether the list contains an entry identical to the //       specified entry data.//-----------------------------------------------------------------------------bool CArrayList::Contains( void* pEntryData ){    for( UINT iEntry = 0; iEntry < m_NumEntries; iEntry++ )    {        if( m_ArrayListType == AL_VALUE )        {            if( memcmp( GetPtr(iEntry), pEntryData, m_BytesPerEntry ) == 0 )                return true;        }        else        {            if( GetPtr(iEntry) == pEntryData )                return true;        }    }    return false;}//-----------------------------------------------------------------------------// Name: BYTE helper functions// Desc: cchDestChar is the size in BYTEs of strDest.  Be careful not to //       pass use sizeof() if the strDest is a string pointer.  //       eg.//       TCHAR* sz = new TCHAR[100]; // sizeof(sz)  == 4//       TCHAR sz2[100];             // sizeof(sz2) == 200//-----------------------------------------------------------------------------HRESULT DXUtil_ConvertAnsiStringToWideCb( WCHAR* wstrDestination, const CHAR* strSource, int cbDestChar ){    return DXUtil_ConvertAnsiStringToWideCch( wstrDestination, strSource, cbDestChar / sizeof(WCHAR) );}HRESULT DXUtil_ConvertWideStringToAnsiCb( CHAR* strDestination, const WCHAR* wstrSource, int cbDestChar ){    return DXUtil_ConvertWideStringToAnsiCch( strDestination, wstrSource, cbDestChar / sizeof(CHAR) );}HRESULT DXUtil_ConvertGenericStringToAnsiCb( CHAR* strDestination, const TCHAR* tstrSource, int cbDestChar ){    return DXUtil_ConvertGenericStringToAnsiCch( strDestination, tstrSource, cbDestChar / sizeof(CHAR) );}HRESULT DXUtil_ConvertGenericStringToWideCb( WCHAR* wstrDestination, const TCHAR* tstrSource, int cbDestChar ){    return DXUtil_ConvertGenericStringToWideCch( wstrDestination, tstrSource, cbDestChar / sizeof(WCHAR) );}HRESULT DXUtil_ConvertAnsiStringToGenericCb( TCHAR* tstrDestination, const CHAR* strSource, int cbDestChar ){    return DXUtil_ConvertAnsiStringToGenericCch( tstrDestination, strSource, cbDestChar / sizeof(TCHAR) );}HRESULT DXUtil_ConvertWideStringToGenericCb( TCHAR* tstrDestination, const WCHAR* wstrSource, int cbDestChar ){    return DXUtil_ConvertWideStringToGenericCch( tstrDestination, wstrSource, cbDestChar / sizeof(TCHAR) );}HRESULT DXUtil_ReadStringRegKeyCb( HKEY hKey, TCHAR* strRegName, TCHAR* strDest, DWORD cbDest, TCHAR* strDefault ){    return DXUtil_ReadStringRegKeyCch( hKey, strRegName, strDest, cbDest / sizeof(TCHAR), strDefault );}HRESULT DXUtil_ConvertGUIDToStringCb( const GUID* pGuidSrc, TCHAR* strDest, int cbDestChar ){    return DXUtil_ConvertGUIDToStringCch( pGuidSrc, strDest, cbDestChar / sizeof(TCHAR) );}#ifndef UNDER_CEHRESULT DXUtil_GetDXSDKMediaPathCb( TCHAR* szDest, int cbDest ){    return DXUtil_GetDXSDKMediaPathCch( szDest, cbDest / sizeof(TCHAR) );}HRESULT DXUtil_FindMediaFileCb( TCHAR* szDestPath, int cbDest, TCHAR* strFilename ){    return DXUtil_FindMediaFileCch( szDestPath, cbDest / sizeof(TCHAR), strFilename );}#endif // !UNDER_CE

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -