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

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

?? dxutil.cpp

?? Introduction to directx9 3d game programming 一書的源代碼
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
//-----------------------------------------------------------------------------
// File: DXUtil.cpp
//
// Desc: Shortcut macros and functions for using DX objects
//
// Copyright (c) Microsoft Corporation. All rights reserved
//-----------------------------------------------------------------------------
#ifndef STRICT
#define STRICT
#endif // !STRICT
#include <windows.h>
#include <mmsystem.h>
#include <tchar.h>
#include <stdio.h> 
#include <stdarg.h>
#include "DXUtil.h"


#ifdef UNICODE
    typedef HINSTANCE (WINAPI* LPShellExecute)(HWND hwnd, LPCWSTR lpOperation, LPCWSTR lpFile, LPCWSTR lpParameters, LPCWSTR lpDirectory, INT nShowCmd);
#else
    typedef HINSTANCE (WINAPI* LPShellExecute)(HWND hwnd, LPCSTR lpOperation, LPCSTR lpFile, LPCSTR lpParameters, LPCSTR lpDirectory, INT nShowCmd);
#endif


#ifndef UNDER_CE
//-----------------------------------------------------------------------------
// Name: DXUtil_GetDXSDKMediaPathCch()
// Desc: Returns the DirectX SDK media path
//       cchDest is the size in TCHARs of strDest.  Be careful not to 
//       pass in sizeof(strDest) on UNICODE builds.
//-----------------------------------------------------------------------------
HRESULT DXUtil_GetDXSDKMediaPathCch( TCHAR* strDest, int cchDest )
{
    if( strDest == NULL || cchDest < 1 )
        return E_INVALIDARG;

    lstrcpy( strDest, TEXT("") );

    // Open the appropriate registry key
    HKEY  hKey;
    LONG lResult = RegOpenKeyEx( HKEY_LOCAL_MACHINE,
                                _T("Software\\Microsoft\\DirectX SDK"),
                                0, KEY_READ, &hKey );
    if( ERROR_SUCCESS != lResult )
        return E_FAIL;

    DWORD dwType;
    DWORD dwSize = cchDest * sizeof(TCHAR);
    lResult = RegQueryValueEx( hKey, _T("DX9SDK Samples Path"), NULL,
                              &dwType, (BYTE*)strDest, &dwSize );
    strDest[cchDest-1] = 0; // RegQueryValueEx doesn't NULL term if buffer too small
    RegCloseKey( hKey );

    if( ERROR_SUCCESS != lResult )
        return E_FAIL;

    const TCHAR* strMedia = _T("\\Media\\");
    if( lstrlen(strDest) + lstrlen(strMedia) < cchDest )
        _tcscat( strDest, strMedia );
    else
        return E_INVALIDARG;

    return S_OK;
}
#endif // !UNDER_CE



#ifndef UNDER_CE
//-----------------------------------------------------------------------------
// Name: DXUtil_FindMediaFileCch()
// Desc: Returns a valid path to a DXSDK media file
//       cchDest is the size in TCHARs of strDestPath.  Be careful not to 
//       pass in sizeof(strDest) on UNICODE builds.
//-----------------------------------------------------------------------------
HRESULT DXUtil_FindMediaFileCch( TCHAR* strDestPath, int cchDest, TCHAR* strFilename )
{
    HRESULT hr;
    HANDLE file;
    TCHAR* strShortNameTmp = NULL;
    TCHAR strShortName[MAX_PATH];
    int cchPath;

    if( NULL==strFilename || NULL==strDestPath || cchDest < 1 )
        return E_INVALIDARG;

    lstrcpy( strDestPath, TEXT("") );
    lstrcpy( strShortName, TEXT("") );

    // Build full path name from strFileName (strShortName will be just the leaf filename)
    cchPath = GetFullPathName(strFilename, cchDest, strDestPath, &strShortNameTmp);
    if ((cchPath == 0) || (cchDest <= cchPath))
        return E_FAIL;
    if( strShortNameTmp )
        lstrcpyn( strShortName, strShortNameTmp, MAX_PATH );

    // first try to find the filename given a full path
    file = CreateFile( strDestPath, GENERIC_READ, FILE_SHARE_READ, NULL, 
                       OPEN_EXISTING, 0, NULL );
    if( INVALID_HANDLE_VALUE != file )
    {
        CloseHandle( file );
        return S_OK;
    }
    
    // next try to find the filename in the current working directory (path stripped)
    file = CreateFile( strShortName, GENERIC_READ, FILE_SHARE_READ, NULL, 
                       OPEN_EXISTING, 0, NULL );
    if( INVALID_HANDLE_VALUE != file )
    {
        _tcsncpy( strDestPath, strShortName, cchDest );
        strDestPath[cchDest-1] = 0; // _tcsncpy doesn't NULL term if it runs out of space
        CloseHandle( file );
        return S_OK;
    }
    
    // last, check if the file exists in the media directory
    if( FAILED( hr = DXUtil_GetDXSDKMediaPathCch( strDestPath, cchDest ) ) )
        return hr;

    if( lstrlen(strDestPath) + lstrlen(strShortName) < cchDest )
        lstrcat( strDestPath, strShortName );
    else
        return E_INVALIDARG;

    file = CreateFile( strDestPath, GENERIC_READ, FILE_SHARE_READ, NULL, 
                       OPEN_EXISTING, 0, NULL );
    if( INVALID_HANDLE_VALUE != file )
    {
        CloseHandle( file );
        return S_OK;
    }

    // On failure, just return the file as the path
    _tcsncpy( strDestPath, strFilename, cchDest );
    strDestPath[cchDest-1] = 0; // _tcsncpy doesn't NULL term if it runs out of space
    return HRESULT_FROM_WIN32( ERROR_FILE_NOT_FOUND );
}
#endif // !UNDER_CE




//-----------------------------------------------------------------------------
// Name: DXUtil_ReadStringRegKeyCch()
// Desc: Helper function to read a registry key string
//       cchDest is the size in TCHARs of strDest.  Be careful not to 
//       pass in sizeof(strDest) on UNICODE builds.
//-----------------------------------------------------------------------------
HRESULT DXUtil_ReadStringRegKeyCch( HKEY hKey, TCHAR* strRegName, TCHAR* strDest, 
                                    DWORD cchDest, TCHAR* strDefault )
{
    DWORD dwType;
    DWORD cbDest = cchDest * sizeof(TCHAR);

    if( ERROR_SUCCESS != RegQueryValueEx( hKey, strRegName, 0, &dwType, 
                                          (BYTE*)strDest, &cbDest ) )
    {
        _tcsncpy( strDest, strDefault, cchDest );
        strDest[cchDest-1] = 0;

        if( dwType != REG_SZ )
            return E_FAIL;

        return S_OK;
    }

    return E_FAIL;
}




//-----------------------------------------------------------------------------
// Name: DXUtil_WriteStringRegKey()
// Desc: Helper function to write a registry key string
//-----------------------------------------------------------------------------
HRESULT DXUtil_WriteStringRegKey( HKEY hKey, TCHAR* strRegName,
                                  TCHAR* strValue )
{
    if( NULL == strValue )
        return E_INVALIDARG;
        
    DWORD cbValue = ((DWORD)_tcslen(strValue)+1) * sizeof(TCHAR);

    if( ERROR_SUCCESS != RegSetValueEx( hKey, strRegName, 0, REG_SZ, 
                                        (BYTE*)strValue, cbValue ) )
        return E_FAIL;

    return S_OK;
}




//-----------------------------------------------------------------------------
// Name: DXUtil_ReadIntRegKey()
// Desc: Helper function to read a registry key int
//-----------------------------------------------------------------------------
HRESULT DXUtil_ReadIntRegKey( HKEY hKey, TCHAR* strRegName, DWORD* pdwDest, 
                              DWORD dwDefault )
{
    DWORD dwType;
    DWORD dwLength = sizeof(DWORD);

    if( ERROR_SUCCESS != RegQueryValueEx( hKey, strRegName, 0, &dwType, 
                                          (BYTE*)pdwDest, &dwLength ) )
    {
        *pdwDest = dwDefault;
        if( dwType != REG_DWORD )
            return E_FAIL;

        return S_OK;
    }

    return E_FAIL;
}




//-----------------------------------------------------------------------------
// Name: DXUtil_WriteIntRegKey()
// Desc: Helper function to write a registry key int
//-----------------------------------------------------------------------------
HRESULT DXUtil_WriteIntRegKey( HKEY hKey, TCHAR* strRegName, DWORD dwValue )
{
    if( ERROR_SUCCESS != RegSetValueEx( hKey, strRegName, 0, REG_DWORD, 
                                        (BYTE*)&dwValue, sizeof(DWORD) ) )
        return E_FAIL;

    return S_OK;
}




//-----------------------------------------------------------------------------
// Name: DXUtil_ReadBoolRegKey()
// Desc: Helper function to read a registry key BOOL
//-----------------------------------------------------------------------------
HRESULT DXUtil_ReadBoolRegKey( HKEY hKey, TCHAR* strRegName, BOOL* pbDest, 
                              BOOL bDefault )
{
    DWORD dwType;
    DWORD dwLength = sizeof(BOOL);

    if( ERROR_SUCCESS != RegQueryValueEx( hKey, strRegName, 0, &dwType, 
                                          (BYTE*)pbDest, &dwLength ) )
    {
        *pbDest = bDefault;
        if( dwType != REG_DWORD )
            return E_FAIL;

        return S_OK;
    }

    return E_FAIL;
}




//-----------------------------------------------------------------------------
// Name: DXUtil_WriteBoolRegKey()
// Desc: Helper function to write a registry key BOOL
//-----------------------------------------------------------------------------
HRESULT DXUtil_WriteBoolRegKey( HKEY hKey, TCHAR* strRegName, BOOL bValue )
{
    if( ERROR_SUCCESS != RegSetValueEx( hKey, strRegName, 0, REG_DWORD, 
                                        (BYTE*)&bValue, sizeof(BOOL) ) )
        return E_FAIL;

    return S_OK;
}




//-----------------------------------------------------------------------------
// Name: DXUtil_ReadGuidRegKey()
// Desc: Helper function to read a registry key guid
//-----------------------------------------------------------------------------
HRESULT DXUtil_ReadGuidRegKey( HKEY hKey, TCHAR* strRegName, GUID* pGuidDest, 
                               GUID& guidDefault )
{
    DWORD dwType;
    DWORD dwLength = sizeof(GUID);

    if( ERROR_SUCCESS != RegQueryValueEx( hKey, strRegName, 0, &dwType, 
                                          (LPBYTE) pGuidDest, &dwLength ) )
    {
        *pGuidDest = guidDefault;
        if( dwType != REG_BINARY )
            return E_FAIL;

        return S_OK;
    }

    return E_FAIL;
}




//-----------------------------------------------------------------------------
// Name: DXUtil_WriteGuidRegKey()
// Desc: Helper function to write a registry key guid
//-----------------------------------------------------------------------------
HRESULT DXUtil_WriteGuidRegKey( HKEY hKey, TCHAR* strRegName, GUID guidValue )
{
    if( ERROR_SUCCESS != RegSetValueEx( hKey, strRegName, 0, REG_BINARY, 
                                        (BYTE*)&guidValue, sizeof(GUID) ) )
        return E_FAIL;

    return S_OK;
}




//-----------------------------------------------------------------------------
// 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
//-----------------------------------------------------------------------------
FLOAT __stdcall DXUtil_Timer( TIMER_COMMAND command )
{
    static BOOL     m_bTimerInitialized = FALSE;
    static BOOL     m_bUsingQPF         = FALSE;
    static BOOL     m_bTimerStopped     = TRUE;
    static LONGLONG m_llQPFTicksPerSec  = 0;

    // Initialize the timer
    if( FALSE == m_bTimerInitialized )
    {
        m_bTimerInitialized = TRUE;

        // Use QueryPerformanceFrequency() to get frequency of timer.  If QPF is
        // not supported, we will timeGetTime() which returns milliseconds.
        LARGE_INTEGER qwTicksPerSec;
        m_bUsingQPF = QueryPerformanceFrequency( &qwTicksPerSec );
        if( m_bUsingQPF )
            m_llQPFTicksPerSec = qwTicksPerSec.QuadPart;
    }

    if( m_bUsingQPF )
    {
        static LONGLONG m_llStopTime        = 0;
        static LONGLONG m_llLastElapsedTime = 0;
        static LONGLONG m_llBaseTime        = 0;
        double fTime;
        double fElapsedTime;
        LARGE_INTEGER qwTime;
        
        // Get either the current time or the stop time, depending
        // on whether we're stopped and what command was sent
        if( m_llStopTime != 0 && command != TIMER_START && command != TIMER_GETABSOLUTETIME)
            qwTime.QuadPart = m_llStopTime;
        else

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品色在线观看| 亚洲欧美日韩国产另类专区| 99久久国产免费看| 日韩影院在线观看| 中文字幕国产一区| 日韩免费在线观看| 91国在线观看| 国产91在线观看丝袜| 美女任你摸久久| 亚洲人被黑人高潮完整版| 久久天堂av综合合色蜜桃网| 欧美日韩精品二区第二页| 99久久99久久免费精品蜜臀| 国产在线日韩欧美| 午夜久久久影院| 亚洲欧美日韩人成在线播放| 久久新电视剧免费观看| 欧美一区二区三区免费大片 | av中文字幕不卡| 免费成人美女在线观看.| 亚洲另类色综合网站| 国产精品麻豆网站| 久久噜噜亚洲综合| 91精品国产麻豆| 在线播放91灌醉迷j高跟美女| 91麻豆自制传媒国产之光| 国产精品1024| 国产乱色国产精品免费视频| 久久er99热精品一区二区| 午夜伦欧美伦电影理论片| 亚洲一区二区影院| 依依成人综合视频| 亚洲色图一区二区| 亚洲人精品午夜| 日韩理论片一区二区| 国产精品成人午夜| 国产精品女同互慰在线看| 欧美激情中文字幕一区二区| 久久精品人人做人人爽97| 精品国产123| 欧美精品一区二区三区蜜臀| 欧美草草影院在线视频| 欧美成人伊人久久综合网| 日韩三级伦理片妻子的秘密按摩| 欧美情侣在线播放| 91精品婷婷国产综合久久竹菊| 欧美日韩激情一区| 欧美顶级少妇做爰| 日韩一区二区三区四区五区六区 | 91在线观看一区二区| 99精品久久99久久久久| 91色乱码一区二区三区| 色婷婷av一区二区| 欧美天堂亚洲电影院在线播放| 在线亚洲高清视频| 欧美日韩一区二区三区四区五区 | 国产精品久久久久久户外露出| 欧美激情中文不卡| 亚洲欧美日韩久久| 亚洲国产综合91精品麻豆| 午夜激情一区二区三区| 麻豆精品久久久| 国产精品一线二线三线精华| 成人黄色在线看| 91麻豆自制传媒国产之光| 欧美日韩视频在线第一区| 日韩精品一区二区三区四区| 国产婷婷色一区二区三区四区| 中文字幕日韩精品一区| 亚洲综合色自拍一区| 美女精品一区二区| 成人av高清在线| 欧美日韩精品一区二区三区蜜桃| 91精品免费观看| 国产色产综合色产在线视频| 一区二区三区精密机械公司| 日本 国产 欧美色综合| 福利一区二区在线| 欧美午夜片在线观看| 久久夜色精品一区| 亚洲老司机在线| 久久精品国产一区二区三 | 亚洲黄色免费网站| 美女免费视频一区| 99精品一区二区三区| 7777精品伊人久久久大香线蕉超级流畅 | 成人开心网精品视频| 欧美在线不卡一区| 久久九九国产精品| 亚洲成av人片一区二区梦乃| 国产乱人伦偷精品视频不卡 | 日韩欧美区一区二| 中文字幕一区二区三| 亚洲国产精品影院| 国产不卡视频在线观看| 欧美日韩情趣电影| 中文字幕av在线一区二区三区| 午夜不卡av免费| av网站免费线看精品| 欧美一区二区三区日韩| 亚洲另类中文字| 国产69精品一区二区亚洲孕妇| 欧美日韩久久一区二区| 久久久影视传媒| 免费观看久久久4p| 在线观看亚洲一区| 亚洲国产成人一区二区三区| 久久精品国产精品亚洲综合| 欧洲视频一区二区| 国产精品灌醉下药二区| 精品一区二区三区香蕉蜜桃| 欧美三级乱人伦电影| 国产精品美女久久久久久久久| 蜜臀久久99精品久久久久宅男 | 日韩av一区二区在线影视| 99国产精品99久久久久久| 久久免费国产精品| 久久精品国产亚洲a| 在线成人小视频| 亚洲自拍偷拍av| 色久优优欧美色久优优| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 极品美女销魂一区二区三区| 欧美美女一区二区在线观看| 亚洲另类春色国产| 91女人视频在线观看| 国产精品美女久久久久久| 成人午夜在线视频| 国产日韩欧美电影| 国产激情视频一区二区三区欧美 | 成人av网站在线观看| 国产亚洲精品7777| 国产精品白丝av| 国产亚洲精品免费| 国产成人综合在线观看| 久久久久国产精品麻豆ai换脸| 国产综合一区二区| 久久久久久久久免费| 懂色av一区二区三区蜜臀| 欧美国产精品劲爆| 9i在线看片成人免费| 亚洲天堂a在线| 欧美午夜影院一区| 丝袜a∨在线一区二区三区不卡| 欧美美女直播网站| 日韩**一区毛片| 日韩一级高清毛片| 国产在线精品国自产拍免费| 久久九九99视频| 99视频精品免费视频| 一区二区三区在线免费视频| 欧美亚洲尤物久久| 日韩精品国产精品| 亚洲精品一区二区三区香蕉| 国产九色精品成人porny| 中文一区在线播放| 91视频91自| 日韩在线观看一区二区| 久久精品免费在线观看| av在线不卡电影| 亚洲国产一区二区在线播放| 欧美丰满少妇xxxxx高潮对白| 紧缚捆绑精品一区二区| 日本一区二区三区四区| 色综合久久久久综合体桃花网| 亚洲国产成人精品视频| 精品免费一区二区三区| 成人ar影院免费观看视频| 亚洲一区视频在线| 精品久久久久香蕉网| 99国产一区二区三精品乱码| 午夜精品久久久久久久蜜桃app| 日韩欧美在线网站| av不卡一区二区三区| 七七婷婷婷婷精品国产| 欧美极品aⅴ影院| 欧美日韩国产另类一区| 国产乱码精品一区二区三区忘忧草 | 欧美色图激情小说| 国产资源在线一区| 亚洲欧美福利一区二区| 日韩一级免费观看| 91亚洲精品久久久蜜桃网站 | 91精品国产丝袜白色高跟鞋| 国产成人aaa| 日韩中文字幕麻豆| 综合亚洲深深色噜噜狠狠网站| 宅男噜噜噜66一区二区66| 成人黄色a**站在线观看| 天天色图综合网| 国产精品久久久久久久久免费桃花 | 久久久精品综合| 欧美专区日韩专区| 国产成人av电影| 日韩电影一区二区三区四区| 亚洲欧洲国产专区| 久久综合资源网| 欧美精品成人一区二区三区四区| 国产v综合v亚洲欧| 麻豆精品在线视频|