亚洲欧美第一页_禁久久精品乱码_粉嫩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;
    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合欧美在线视频区| 久久69国产一区二区蜜臀| 91视频www| 一区二区三区在线观看国产| 91碰在线视频| 午夜欧美大尺度福利影院在线看 | 亚洲视频在线一区| 91国在线观看| 日本欧美在线看| 国产亚洲综合色| 色综合天天做天天爱| 午夜精品免费在线| 日韩欧美国产综合在线一区二区三区| 久久99国产精品久久99 | 成人免费观看av| 亚洲欧洲av色图| 欧美性xxxxx极品少妇| 男男成人高潮片免费网站| 久久久美女艺术照精彩视频福利播放 | 欧美另类videos死尸| 久久国产婷婷国产香蕉| 国产精品久久久久久久久免费樱桃| 在线视频国内自拍亚洲视频| 国产91丝袜在线18| 亚洲欧洲日韩一区二区三区| 欧美蜜桃一区二区三区| 国产成人综合在线观看| 亚洲电影一级黄| 欧美精彩视频一区二区三区| 欧美日韩一区在线观看| 国产一区二区三区| 午夜精品久久久| 国产欧美精品区一区二区三区| 欧美日韩中文字幕一区| 国产盗摄一区二区| 日日夜夜一区二区| 国产精品久久久久天堂| 日韩一区二区三| 91视视频在线观看入口直接观看www | 久久综合九色欧美综合狠狠| 色综合中文字幕| 国产一区91精品张津瑜| 亚洲国产一区视频| 国产精品欧美久久久久无广告| 欧美电影在线免费观看| 91视频一区二区| 国产综合久久久久久久久久久久| 亚洲一卡二卡三卡四卡| 日本一区免费视频| 精品毛片乱码1区2区3区| 欧美性大战xxxxx久久久| www.日韩精品| 国产精品白丝av| 蜜桃视频在线观看一区二区| 亚洲最大成人网4388xx| 国产精品狼人久久影院观看方式| 日韩欧美一区在线观看| 欧美日韩国产影片| 91国产福利在线| av一二三不卡影片| 成人免费观看av| 成人小视频在线观看| 国产在线精品一区二区三区不卡 | 国产精品传媒在线| 国产女主播视频一区二区| 欧美成人高清电影在线| 91精品国产入口| 日韩天堂在线观看| 日韩一级精品视频在线观看| 91精品免费在线| 日韩亚洲欧美高清| 欧美成va人片在线观看| 日韩欧美高清在线| 久久综合五月天婷婷伊人| 日韩欧美成人激情| 欧美刺激午夜性久久久久久久| 56国语精品自产拍在线观看| 欧美精品乱码久久久久久按摩| 欧美三级资源在线| 9191国产精品| 欧美大片一区二区| 精品乱人伦小说| 国产午夜精品久久久久久久| 日本一区二区高清| 国产精品久久三区| 亚洲伦理在线免费看| 亚洲成人久久影院| 蜜臀a∨国产成人精品| 玖玖九九国产精品| 国产一区二区伦理| av资源网一区| 欧美亚州韩日在线看免费版国语版| 91久久精品日日躁夜夜躁欧美| 欧美一区二区三区电影| 欧美一区二区啪啪| 欧美精品一区二区精品网| 2017欧美狠狠色| 中文字幕一区二区5566日韩| 中文字幕在线不卡视频| 一区二区三区美女视频| 人人狠狠综合久久亚洲| 国产精品系列在线播放| 91免费国产在线观看| 欧美日韩另类一区| 26uuuu精品一区二区| 亚洲欧洲精品成人久久奇米网| 亚洲成人1区2区| 欧美日韩国产不卡| 久久久精品免费免费| 亚洲精品视频一区二区| 蜜臀av一区二区在线免费观看| 国产99久久久国产精品潘金| 欧美少妇bbb| 国产亚洲精品aa| 午夜精品久久久久久久久| 国产一区二区h| 欧美日韩精品久久久| 久久精品一区二区三区不卡牛牛| 亚洲美女免费视频| 久久成人免费电影| 日本久久电影网| 久久综合一区二区| 亚洲国产精品久久不卡毛片| 国产精品综合二区| 欧美日韩一区不卡| 国产精品久久三| 另类小说综合欧美亚洲| 色综合久久99| 欧美激情在线看| 麻豆精品在线视频| 欧美日韩在线亚洲一区蜜芽| 国产欧美精品一区| 美女国产一区二区| 欧美日韩在线免费视频| 亚洲欧洲成人精品av97| 国内精品写真在线观看| 欧美精品乱人伦久久久久久| 亚洲女性喷水在线观看一区| 国产不卡视频一区| 精品奇米国产一区二区三区| 亚洲一区视频在线观看视频| 99久久婷婷国产| 久久男人中文字幕资源站| 日本vs亚洲vs韩国一区三区二区| 在线免费不卡视频| 中文字幕中文乱码欧美一区二区| 九一九一国产精品| 欧美一级理论性理论a| 亚洲一区免费视频| 色婷婷av一区二区三区大白胸| 国产精品伦一区| 国产a级毛片一区| 国产日韩视频一区二区三区| 美女久久久精品| 欧美一区二区久久久| 亚洲线精品一区二区三区| 91视视频在线观看入口直接观看www| 国产人妖乱国产精品人妖| 韩国三级在线一区| 久久久久久影视| 国产成人精品在线看| 久久亚洲精精品中文字幕早川悠里 | 亚洲视频一区在线观看| av中文字幕一区| 国产精品国产三级国产普通话三级| 国产一区美女在线| 久久理论电影网| 国产一区二区三区四| 久久这里只有精品首页| 国产在线精品一区二区夜色| 久久久夜色精品亚洲| 国产成人免费xxxxxxxx| 日本一区二区三区电影| av爱爱亚洲一区| 亚洲色图视频网| 欧美性生交片4| 日韩不卡免费视频| 337p日本欧洲亚洲大胆色噜噜| 国产乱国产乱300精品| 国产亚洲婷婷免费| 成人国产在线观看| 亚洲小说春色综合另类电影| 91精品国产一区二区三区蜜臀 | 色婷婷久久综合| 亚洲成人av一区二区三区| 91麻豆精品国产自产在线观看一区| 日韩二区在线观看| 久久女同互慰一区二区三区| 成人av电影在线| 亚洲国产中文字幕| 精品国产一区二区精华| 国产凹凸在线观看一区二区| 亚洲日本丝袜连裤袜办公室| 欧美日韩高清在线播放| 国产综合久久久久影院| 亚洲人午夜精品天堂一二香蕉| 欧美日韩午夜在线视频| 久久国产麻豆精品| 中文字幕中文在线不卡住| 欧美人妖巨大在线|