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

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

?? dxutil.cpp

?? 3d 游戲 入門教程之例子源碼-圖像渲染
?? 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一区二区三区免费野_久草精品视频
日韩欧美高清一区| 国产精品少妇自拍| 不卡av在线免费观看| 亚洲 欧美综合在线网络| 亚洲精品一区二区三区福利 | 久久人人爽爽爽人久久久| 一本色道亚洲精品aⅴ| 国内精品嫩模私拍在线| 亚洲chinese男男1069| 国产精品久久久久影院亚瑟| 精品粉嫩超白一线天av| 91精品国产美女浴室洗澡无遮挡| 91视频观看视频| 国产成人精品综合在线观看| 麻豆精品久久久| 五月婷婷综合网| 一区二区三区丝袜| 国产精品久久三| 国产日韩欧美精品电影三级在线 | 宅男在线国产精品| 色女孩综合影院| www.亚洲激情.com| 成人激情免费视频| 国产成人免费高清| 国产精品77777| 韩日av一区二区| 麻豆高清免费国产一区| 日韩电影免费在线看| 日韩一区精品视频| 亚洲一区在线电影| 亚洲在线一区二区三区| 亚洲三级理论片| 亚洲日本中文字幕区| 1024国产精品| 亚洲欧洲国产日本综合| 中文字幕亚洲一区二区va在线| 久久精品一区蜜桃臀影院| 久久久久久黄色| 久久品道一品道久久精品| 日韩不卡一区二区三区 | 麻豆精品视频在线观看| 蜜臀av一区二区三区| 欧美aaaaaa午夜精品| 亚洲va国产va欧美va观看| 性欧美疯狂xxxxbbbb| 日韩专区中文字幕一区二区| 日韩精品三区四区| 日本v片在线高清不卡在线观看| 日韩激情视频网站| 久久aⅴ国产欧美74aaa| 国产精品99久久久久久似苏梦涵 | 美女被吸乳得到大胸91| 毛片不卡一区二区| 国产一区二区在线观看视频| 国产xxx精品视频大全| av一二三不卡影片| 色香色香欲天天天影视综合网| 在线观看国产一区二区| 91精品国产综合久久精品图片| 日韩亚洲欧美在线观看| 久久色在线观看| 欧美国产日韩a欧美在线观看| 亚洲男人天堂一区| 亚洲成av人片一区二区| 久久66热re国产| 成人小视频免费在线观看| 色综合久久综合网97色综合| 337p亚洲精品色噜噜| 久久久久亚洲蜜桃| 国产精品成人免费精品自在线观看| 亚洲女同女同女同女同女同69| 亚洲成人激情自拍| 国产精品一区二区久久不卡 | 亚洲精品一区二区三区精华液| 国产精品美日韩| 天堂va蜜桃一区二区三区漫画版| 久久精品国产999大香线蕉| 国产91丝袜在线18| 欧美日韩国产另类不卡| 欧美国产日本韩| 亚洲大片免费看| 国产91在线观看| 欧美色图在线观看| 国产欧美一区二区三区网站| 亚洲国产日韩综合久久精品| 国产毛片精品国产一区二区三区| 91国内精品野花午夜精品| 欧美大片国产精品| 一区二区三区日韩欧美精品| 精品一区二区三区免费视频| 91蜜桃网址入口| 久久久久久日产精品| 亚洲国产裸拍裸体视频在线观看乱了 | 亚洲国产一区二区三区| 国产精品亚洲一区二区三区在线| 欧美三级视频在线播放| 欧美国产精品专区| 秋霞av亚洲一区二区三| 在线中文字幕一区二区| 国产精品人妖ts系列视频| 免费观看日韩av| 91官网在线免费观看| 日本一区二区视频在线观看| 91黄色小视频| 欧美国产一区在线| 狠狠色综合日日| 91麻豆精品久久久久蜜臀| 亚洲激情一二三区| 国产成人精品亚洲777人妖 | 99精品视频在线免费观看| 精品国产百合女同互慰| 五月天激情小说综合| 91麻豆123| 欧美激情一区二区在线| 蜜桃av一区二区在线观看| 欧美午夜宅男影院| 亚洲人吸女人奶水| 不卡一区二区在线| 国产香蕉久久精品综合网| 韩国三级电影一区二区| 欧美一级二级在线观看| 日韩成人av影视| 欧美电影在线免费观看| 亚洲二区视频在线| 91福利小视频| 亚洲一区二区在线免费看| 色婷婷综合久久久中文字幕| 中文字幕亚洲区| a亚洲天堂av| 国产精品成人免费精品自在线观看| 成人午夜av电影| 国产日韩亚洲欧美综合| 粉嫩嫩av羞羞动漫久久久 | 欧美tk丨vk视频| 日本va欧美va瓶| 欧美变态口味重另类| 丝袜亚洲精品中文字幕一区| 欧美乱妇20p| 日本不卡视频一二三区| 欧美成人官网二区| 国产揄拍国内精品对白| 国产日本欧美一区二区| 成人美女在线视频| 亚洲图片激情小说| 在线免费观看日韩欧美| 午夜久久久影院| 日韩视频国产视频| 国产一区二区三区四区在线观看| 麻豆久久一区二区| ww久久中文字幕| www.66久久| 亚洲图片欧美一区| 欧美成人综合网站| 国产成人免费高清| 一区二区三区欧美视频| 欧美三电影在线| 久久99九九99精品| 国产精品嫩草影院com| 91毛片在线观看| 日本欧美肥老太交大片| 国产日韩欧美麻豆| 在线免费亚洲电影| 裸体健美xxxx欧美裸体表演| 久久色在线观看| 9久草视频在线视频精品| 天天亚洲美女在线视频| 26uuu亚洲综合色| 99久久精品国产毛片| 亚洲成人7777| 久久伊99综合婷婷久久伊| 99re这里只有精品6| 午夜国产精品影院在线观看| 久久亚洲捆绑美女| 色视频欧美一区二区三区| 久久99精品国产麻豆不卡| 亚洲欧洲www| 91精品国产手机| 波多野结衣中文字幕一区 | 91偷拍与自偷拍精品| 午夜精品视频一区| 国产亚洲欧美色| 欧美日韩国产中文| 国产精品1区2区| 亚洲国产欧美一区二区三区丁香婷| 欧美tickling网站挠脚心| 国产婷婷色一区二区三区| 日本精品免费观看高清观看| 韩国欧美国产1区| 亚洲午夜私人影院| 国产清纯在线一区二区www| 欧美久久久久久蜜桃| a4yy欧美一区二区三区| 精品一区二区久久| 亚洲综合网站在线观看| 久久久久国产成人精品亚洲午夜 | 精品国产制服丝袜高跟| 日本久久精品电影| 成人性生交大片| 激情久久久久久久久久久久久久久久| 亚洲激情图片小说视频|