亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dxutil.cpp

?? 3d 游戲 入門教程之例子源碼-圖像渲染
?? 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_CE
HRESULT 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 + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本一区二区视频在线观看| 成人污视频在线观看| 国产成人综合网站| 国产亚洲精品精华液| 久久精品免费观看| 久久综合久久久久88| 国产精品一二三四区| 国产欧美日韩在线视频| 成人福利电影精品一区二区在线观看| 国产精品午夜在线观看| 日本丶国产丶欧美色综合| 香港成人在线视频| 日韩欧美一二三四区| 丰满少妇久久久久久久| 亚洲欧美怡红院| 欧美日韩中文另类| 国产在线精品视频| 亚洲天堂av一区| 91精品国产手机| 福利视频网站一区二区三区| 成人免费在线播放视频| 欧美日韩三级视频| 国产在线国偷精品产拍免费yy| 国产精品久久三| 欧美区在线观看| 国产高清一区日本| 亚洲综合免费观看高清在线观看| 日韩亚洲欧美在线观看| 国产精品羞羞答答xxdd| 亚洲精品国产一区二区精华液| 欧美嫩在线观看| 国产成人免费在线观看不卡| 亚洲无线码一区二区三区| 久久只精品国产| 欧美在线免费观看亚洲| 极品少妇xxxx偷拍精品少妇| 中文字幕人成不卡一区| 69av一区二区三区| 9久草视频在线视频精品| 美女视频黄 久久| 亚洲欧美日韩在线| www激情久久| 欧美三级蜜桃2在线观看| 国产精品99久久久久久久vr| 亚洲专区一二三| 中文字幕av一区二区三区高 | 激情五月婷婷综合网| 亚洲欧美中日韩| 精品成人一区二区三区四区| 欧美系列在线观看| 成人激情图片网| 极品少妇xxxx精品少妇偷拍| 亚洲va韩国va欧美va精品| 欧美高清在线视频| 337p日本欧洲亚洲大胆色噜噜| 欧美吻胸吃奶大尺度电影| 成人午夜碰碰视频| 国产一区二区免费在线| 天天色综合天天| 日韩美女视频19| 中文字幕精品一区二区三区精品 | 麻豆精品视频在线观看| 亚洲国产美女搞黄色| 亚洲欧美色一区| 国产精品初高中害羞小美女文| 久久久精品天堂| 欧美精品一区在线观看| 精品人伦一区二区色婷婷| 这里只有精品视频在线观看| 欧美午夜不卡视频| 在线观看日韩毛片| 欧美亚洲国产一区二区三区va| 一本色道a无线码一区v| 91网上在线视频| 99视频精品全部免费在线| 国产91综合一区在线观看| 国产麻豆视频一区| 国产激情一区二区三区桃花岛亚洲| 久久激情五月激情| 国产美女在线精品| 国产.欧美.日韩| 成人av在线一区二区| av一区二区三区四区| 91亚洲大成网污www| 色综合天天综合网国产成人综合天 | 欧美日韩中文字幕一区二区| 欧美日韩午夜影院| 欧美福利视频导航| 日韩美一区二区三区| 久久―日本道色综合久久| 国产喂奶挤奶一区二区三区| 日本一区二区三级电影在线观看 | 欧美日韩精品三区| 7777精品伊人久久久大香线蕉完整版 | 欧美日韩在线播放一区| 欧美久久久久久蜜桃| 51精品视频一区二区三区| 日韩欧美高清一区| 亚洲国产成人午夜在线一区| 亚洲天堂久久久久久久| 亚洲国产日韩精品| 精品无人码麻豆乱码1区2区| 国产不卡在线播放| 91麻豆swag| 777奇米四色成人影色区| 精品福利一二区| 亚洲天堂中文字幕| 日本午夜一本久久久综合| 韩国成人精品a∨在线观看| kk眼镜猥琐国模调教系列一区二区| 91麻豆精品在线观看| 欧美大胆人体bbbb| 国产精品动漫网站| 日产精品久久久久久久性色| 极品少妇一区二区| 在线免费观看日韩欧美| 欧美一卡二卡在线观看| 国产精品久久久久久户外露出| 亚洲国产美女搞黄色| 国产成人免费xxxxxxxx| 欧美午夜在线观看| 久久久久久久综合日本| 亚洲高清在线视频| 国产不卡免费视频| 欧美挠脚心视频网站| 中文字幕一区二区三区不卡| 日韩中文字幕亚洲一区二区va在线 | 一区二区三区四区激情| 激情五月播播久久久精品| 91精品福利在线| 久久精品一区二区三区不卡牛牛| 亚洲永久免费av| 国产成人精品aa毛片| 91精品一区二区三区在线观看| 国产精品全国免费观看高清 | 美女视频第一区二区三区免费观看网站| 懂色av中文字幕一区二区三区| 91麻豆精品国产91久久久久久久久 | 国产成人av网站| 制服丝袜av成人在线看| 最好看的中文字幕久久| 国产激情视频一区二区三区欧美| 欧美福利电影网| 一区二区三区精品久久久| 国产sm精品调教视频网站| 日韩西西人体444www| 亚洲一区二区三区小说| 99久久99久久综合| 久久九九久久九九| 蜜桃精品在线观看| 欧美精品粉嫩高潮一区二区| 一区二区三区在线播放| 91在线观看污| 国产欧美精品国产国产专区| 精品一区二区影视| 日韩欧美电影在线| 日韩av电影天堂| 欧美日韩高清影院| 午夜欧美视频在线观看| 91成人在线精品| 亚洲人成电影网站色mp4| 成人久久久精品乱码一区二区三区| 欧美mv日韩mv| 九色porny丨国产精品| 91精品国产免费| 蜜臀久久99精品久久久画质超高清| 欧美日韩精品是欧美日韩精品| 亚洲午夜免费福利视频| 欧美在线一区二区三区| 亚洲国产aⅴ成人精品无吗| 欧日韩精品视频| 亚洲不卡在线观看| 51精品秘密在线观看| 秋霞成人午夜伦在线观看| 91精品欧美一区二区三区综合在| 天天色 色综合| 欧美一区二区三区不卡| 久久成人综合网| 久久婷婷一区二区三区| 国产成人免费xxxxxxxx| 国产精品私人影院| 91首页免费视频| 亚洲一区二区综合| 3atv在线一区二区三区| 国产一区二区网址| 久久九九国产精品| 色综合中文字幕国产 | 99re8在线精品视频免费播放| 国产精品欧美极品| 色婷婷久久一区二区三区麻豆| 亚洲人成亚洲人成在线观看图片| 欧美色网一区二区| 九色|91porny| 国产精品你懂的在线| 91在线国产观看| 亚洲成a人片综合在线| 日韩精品自拍偷拍| 99热在这里有精品免费| 婷婷综合在线观看| 2023国产精品视频|