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

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

?? dxutil.cpp

?? 3D俄羅斯方塊源碼.rar
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
//-----------------------------------------------------------------------------
// File: DXUtil.cpp
//
// Desc: Shortcut macros and functions for using DX objects
//
//
// Copyright (c) 1997-2001 Microsoft Corporation. All rights reserved
//-----------------------------------------------------------------------------
#define STRICT
#include <windows.h>
#include <mmsystem.h>
#include <tchar.h>
#include <stdio.h> 
#include <stdarg.h>
#include "DXUtil.h"




//-----------------------------------------------------------------------------
// Name: DXUtil_GetDXSDKMediaPath()
// Desc: Returns the DirectX SDK media path
//-----------------------------------------------------------------------------
const TCHAR* DXUtil_GetDXSDKMediaPath()
{
    static TCHAR strNull[2] = _T("");
    static TCHAR strPath[MAX_PATH];
    DWORD dwType;
    DWORD dwSize = MAX_PATH;
    HKEY  hKey;

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

    lResult = RegQueryValueEx( hKey, _T("DX81SDK Samples Path"), NULL,
                              &dwType, (BYTE*)strPath, &dwSize );
    RegCloseKey( hKey );

    if( ERROR_SUCCESS != lResult )
        return strNull;

    _tcscat( strPath, _T("\\Media\\") );

    return strPath;
}




//-----------------------------------------------------------------------------
// Name: DXUtil_FindMediaFile()
// Desc: Returns a valid path to a DXSDK media file
//-----------------------------------------------------------------------------
HRESULT DXUtil_FindMediaFile( TCHAR* strPath, TCHAR* strFilename )
{
    HANDLE file;
    TCHAR strFullPath[1024];
    TCHAR *strShortName;
    DWORD cchPath;

    if( NULL==strFilename || NULL==strPath )
        return E_INVALIDARG;

    // Build full path name from strFileName (strShortName will be just the leaf filename)
    cchPath = GetFullPathName(strFilename, sizeof(strFullPath)/sizeof(TCHAR), strFullPath, &strShortName);
    if ((cchPath == 0) || (sizeof(strFullPath)/sizeof(TCHAR) <= cchPath))
        return E_FAIL;

    // first try to find the filename given a full path
    file = CreateFile( strFullPath, GENERIC_READ, FILE_SHARE_READ, NULL, 
                       OPEN_EXISTING, 0, NULL );
    if( INVALID_HANDLE_VALUE != file )
    {
        _tcscpy( strPath, strFullPath );
        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 )
    {
        _tcscpy( strPath, strShortName );
        CloseHandle( file );
        return S_OK;
    }
    
    // last, check if the file exists in the media directory
    _stprintf( strPath, _T("%s%s"), DXUtil_GetDXSDKMediaPath(), strShortName );

    file = CreateFile( strPath, 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
    _tcscpy( strPath, strFilename );
    return E_FAIL;
}




//-----------------------------------------------------------------------------
// Name: DXUtil_ReadStringRegKey()
// Desc: Helper function to read a registry key string
//-----------------------------------------------------------------------------
HRESULT DXUtil_ReadStringRegKey( HKEY hKey, TCHAR* strRegName, TCHAR* strValue, 
                                 DWORD dwLength, TCHAR* strDefault )
{
    DWORD dwType;

    if( ERROR_SUCCESS != RegQueryValueEx( hKey, strRegName, 0, &dwType, 
                                          (BYTE*)strValue, &dwLength ) )
    {
        _tcscpy( strValue, strDefault );
    }

    return S_OK;
}




//-----------------------------------------------------------------------------
// Name: DXUtil_WriteStringRegKey()
// Desc: Helper function to write a registry key string
//-----------------------------------------------------------------------------
HRESULT DXUtil_WriteStringRegKey( HKEY hKey, TCHAR* strRegName,
                                  TCHAR* strValue )
{
    if( ERROR_SUCCESS != RegSetValueEx( hKey, strRegName, 0, REG_SZ, 
                                        (BYTE*)strValue, 
                                        (_tcslen(strValue)+1)*sizeof(TCHAR) ) )
        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* pdwValue, 
                              DWORD dwDefault )
{
    DWORD dwType;
    DWORD dwLength = sizeof(DWORD);

    if( ERROR_SUCCESS != RegQueryValueEx( hKey, strRegName, 0, &dwType, 
                                          (BYTE*)pdwValue, &dwLength ) )
    {
        *pdwValue = dwDefault;
    }

    return S_OK;
}




//-----------------------------------------------------------------------------
// 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* pbValue, 
                              BOOL bDefault )
{
    DWORD dwType;
    DWORD dwLength = sizeof(BOOL);

    if( ERROR_SUCCESS != RegQueryValueEx( hKey, strRegName, 0, &dwType, 
                                          (BYTE*)pbValue, &dwLength ) )
    {
        *pbValue = bDefault;
    }

    return S_OK;
}




//-----------------------------------------------------------------------------
// 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* pGuidValue, 
                               GUID& guidDefault )
{
    DWORD dwType;
    DWORD dwLength = sizeof(GUID);

    if( ERROR_SUCCESS != RegQueryValueEx( hKey, strRegName, 0, &dwType, 
                                          (LPBYTE) pGuidValue, &dwLength ) )
    {
        *pGuidValue = guidDefault;
    }

    return S_OK;
}




//-----------------------------------------------------------------------------
// 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
            QueryPerformanceCounter( &qwTime );

        // Return the elapsed time
        if( command == TIMER_GETELAPSEDTIME )
        {
            fElapsedTime = (double) ( qwTime.QuadPart - m_llLastElapsedTime ) / (double) m_llQPFTicksPerSec;
            m_llLastElapsedTime = qwTime.QuadPart;
            return (FLOAT) fElapsedTime;
        }
    
        // Return the current time
        if( command == TIMER_GETAPPTIME )
        {
            double fAppTime = (double) ( qwTime.QuadPart - m_llBaseTime ) / (double) m_llQPFTicksPerSec;
            return (FLOAT) fAppTime;
        }
    
        // Reset the timer
        if( command == TIMER_RESET )
        {
            m_llBaseTime        = qwTime.QuadPart;
            m_llLastElapsedTime = qwTime.QuadPart;
            m_llStopTime        = 0;
            m_bTimerStopped     = FALSE;
            return 0.0f;
        }
    
        // Start the timer
        if( command == TIMER_START )
        {
            if( m_bTimerStopped )
                m_llBaseTime += qwTime.QuadPart - m_llStopTime;
            m_llStopTime = 0;
            m_llLastElapsedTime = qwTime.QuadPart;
            m_bTimerStopped = FALSE;
            return 0.0f;
        }
    
        // Stop the timer
        if( command == TIMER_STOP )
        {
            m_llStopTime = qwTime.QuadPart;
            m_llLastElapsedTime = qwTime.QuadPart;
            m_bTimerStopped = TRUE;
            return 0.0f;
        }
    
        // Advance the timer by 1/10th second
        if( command == TIMER_ADVANCE )
        {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一区二区电影在线| 一区二区三区高清不卡| 国产精品天干天干在线综合| 一区二区三区精品在线观看| 精品影视av免费| 欧美在线一二三四区| 久久久影视传媒| 蜜桃传媒麻豆第一区在线观看| 成人精品小蝌蚪| 精品国产网站在线观看| 天堂久久一区二区三区| 成人午夜激情影院| 亚洲精品一区二区三区福利| 亚洲激情图片小说视频| 丁香激情综合国产| 日韩欧美的一区| 日韩成人伦理电影在线观看| 91久久精品网| 中文字幕在线不卡一区二区三区| 激情六月婷婷综合| 欧美不卡在线视频| 香蕉乱码成人久久天堂爱免费| 色综合色综合色综合| 国产欧美1区2区3区| 激情五月婷婷综合| 日韩欧美成人午夜| 麻豆91在线播放免费| 欧美人妇做爰xxxⅹ性高电影| 综合中文字幕亚洲| 91麻豆精品91久久久久同性| ㊣最新国产の精品bt伙计久久| 国产乱色国产精品免费视频| 精品99999| 国产一区二区三区免费在线观看| 精品国产乱码久久久久久影片| 免费成人av在线播放| 日韩一区二区三区av| 另类小说视频一区二区| 精品免费一区二区三区| 激情文学综合网| 国产日韩欧美不卡| a4yy欧美一区二区三区| 综合分类小说区另类春色亚洲小说欧美 | 国产精品久久久久影视| 高清在线不卡av| 国产精品久久久久久久浪潮网站| 国产**成人网毛片九色 | 91精品午夜视频| 麻豆久久久久久| 久久久99久久精品欧美| 国产91精品一区二区麻豆网站 | 欧美日韩一卡二卡| 热久久国产精品| 久久久高清一区二区三区| 粉嫩绯色av一区二区在线观看| 中文字幕一区三区| 亚洲国产精品高清| 99久久精品免费看| 亚洲成人福利片| 久久亚区不卡日本| 99久久久久久| 免费成人美女在线观看.| 国产欧美日本一区视频| 91麻豆swag| 裸体一区二区三区| 亚洲国产精品激情在线观看| 欧美日韩精品一区二区| 国内外成人在线| 亚洲一区欧美一区| 欧美成人福利视频| 色综合久久综合| 老色鬼精品视频在线观看播放| 国产精品久久看| 69精品人人人人| 北岛玲一区二区三区四区| 亚洲va欧美va国产va天堂影院| 久久综合色婷婷| 欧美日韩国产另类一区| 国产99久久久国产精品潘金| 亚洲第一在线综合网站| 国产精品三级在线观看| 欧美久久免费观看| 91在线观看美女| 精品一区二区在线观看| 亚洲无人区一区| 欧美国产在线观看| 91精品国产综合久久久久久漫画| 99精品国产91久久久久久| 美女脱光内衣内裤视频久久网站| 亚洲欧美日韩久久| 久久久久国产精品厨房| 欧美区一区二区三区| 日韩女优视频免费观看| 风间由美一区二区av101| 中文字幕一区二区三区视频| 精品国产成人系列| 69堂成人精品免费视频| 91网址在线看| 成人的网站免费观看| 久久97超碰国产精品超碰| 日韩精品亚洲一区二区三区免费| 亚洲天堂免费在线观看视频| 国产精品午夜在线| 日韩欧美一区二区三区在线| 欧美日本一区二区三区四区| 波多野结衣中文字幕一区二区三区 | 色哟哟精品一区| 成人免费毛片嘿嘿连载视频| 国产美女精品在线| 激情国产一区二区| 日韩电影在线观看一区| 亚洲成人黄色小说| 亚洲第一主播视频| 亚洲va中文字幕| 亚洲一卡二卡三卡四卡 | 欧美亚洲综合另类| 色偷偷成人一区二区三区91 | 欧美午夜精品久久久久久超碰 | 欧美久久高跟鞋激| 欧美电影一区二区| 欧美一区二区播放| 亚洲第一综合色| 香蕉av福利精品导航| 天堂成人国产精品一区| 日日嗨av一区二区三区四区| 奇米一区二区三区| 奇米精品一区二区三区四区| 久久精品国产99国产| 九九热在线视频观看这里只有精品| 久久av资源站| 国产99久久久国产精品免费看 | 日韩黄色免费电影| 日韩高清中文字幕一区| 久久99精品久久久久久国产越南 | 日韩一级欧美一级| 精品少妇一区二区三区免费观看 | av在线综合网| 欧美专区日韩专区| 欧美日韩高清在线| 欧美一二三区精品| 国产性天天综合网| 亚洲日本在线看| 日韩福利电影在线| 欧美伦理影视网| 久久精品一区二区三区不卡| 国产精品网站在线观看| 亚洲一区二区三区四区在线免费观看| 亚洲国产另类精品专区| 美国毛片一区二区三区| 成人免费高清在线观看| 欧美日韩一区二区三区四区| 日韩精品一区二区三区蜜臀| 国产精品久线在线观看| 日韩中文欧美在线| 成人免费高清视频在线观看| 91久久香蕉国产日韩欧美9色| 日韩欧美在线网站| 中文字幕成人av| 秋霞国产午夜精品免费视频| 成人黄色在线视频| 日韩一卡二卡三卡| 亚洲精品中文在线观看| 极品尤物av久久免费看| 色综合久久66| 国产亚洲欧美一级| 爽好多水快深点欧美视频| 成年人网站91| 精品国产乱码久久久久久闺蜜| 一区二区三区在线不卡| 国产一本一道久久香蕉| 在线播放中文字幕一区| 中文字幕欧美一区| 国产精品一区2区| 51久久夜色精品国产麻豆| 国产精品的网站| 国产精品亚洲午夜一区二区三区 | 国产呦萝稀缺另类资源| 欧美日韩激情在线| 自拍偷在线精品自拍偷无码专区| 免费精品视频最新在线| 欧美午夜片在线观看| 综合自拍亚洲综合图不卡区| 国产精品一区二区视频| 欧美大片顶级少妇| 日韩国产欧美在线视频| 在线观看免费亚洲| 亚洲三级在线观看| av在线这里只有精品| 欧美激情中文不卡| 国产一区二区免费看| 精品三级av在线| 蜜桃一区二区三区在线| 5858s免费视频成人| 日韩av高清在线观看| 欧美精品久久一区二区三区 | 国产精品免费av| 国产成人精品影视| 国产日韩三级在线| 国产毛片精品视频| 国产午夜精品理论片a级大结局|