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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? diutil.cpp

?? VC游戲編程基礎(chǔ)
?? CPP
字號(hào):
//-----------------------------------------------------------------------------
// File: DIUtil.cpp
//
// Desc: DirectInput framework class using semantic mapping.  Feel free to use 
//       this class as a starting point for adding extra functionality.
//
// Copyright (C) Microsoft Corporation. All Rights Reserved.
//-----------------------------------------------------------------------------
#define STRICT

#include <basetsd.h>
#include <tchar.h>
#include <stdio.h>
#include "DIUtil.h"
#include "DXUtil.h"



 

//-----------------------------------------------------------------------------
// Name: CInputDeviceManager()
// Desc: Constructor 
//-----------------------------------------------------------------------------
CInputDeviceManager::CInputDeviceManager()
{
    HRESULT hr = CoInitialize(NULL);
    m_bCleanupCOM = SUCCEEDED(hr);

    m_dwNumDevices = 0;
    m_dwMaxDevices = 10;
    m_pDI          = NULL;

    // Allocate DeviceInfo structs
    m_pDevices = (DeviceInfo*) malloc( m_dwMaxDevices*sizeof(DeviceInfo) );
    if( m_pDevices )
        ZeroMemory( m_pDevices, m_dwMaxDevices*sizeof(DeviceInfo) );
}




//-----------------------------------------------------------------------------
// Name: ~CInputDeviceManager()
// Desc: Destructor
//-----------------------------------------------------------------------------
CInputDeviceManager::~CInputDeviceManager()
{
    if( m_pDevices )
    {
        // Release() all devices
        for( DWORD i=0; i<m_dwNumDevices; i++ )
        {
            if( m_pDevices[i].pdidDevice )
                m_pDevices[i].pdidDevice->Unacquire();

            SAFE_RELEASE( m_pDevices[i].pdidDevice );
        }

        free( m_pDevices );
    }

    // Release() base object
    SAFE_RELEASE( m_pDI );

    if( m_bCleanupCOM )
        CoUninitialize();
}




//-----------------------------------------------------------------------------
// Name: GetDevices()
// Desc: Get the DeviceInfo array and number of devices
//-----------------------------------------------------------------------------
HRESULT CInputDeviceManager::GetDevices( DeviceInfo** ppDeviceInfo, 
                                         DWORD* pdwCount )
{
    if( NULL==ppDeviceInfo || NULL==pdwCount )
        return E_INVALIDARG;

    (*ppDeviceInfo) = m_pDevices;
    (*pdwCount) = m_dwNumDevices;

    return S_OK;
}




//-----------------------------------------------------------------------------
// Name: AddDevice()
// Desc: Add the provided device to the list and perform initialization
//-----------------------------------------------------------------------------
HRESULT CInputDeviceManager::AddDevice( const DIDEVICEINSTANCE* pdidi, 
                                        const LPDIRECTINPUTDEVICE8 pdidDevice )
{
    HRESULT hr;

    // Sanity check
    if( NULL == pdidDevice )
        return E_INVALIDARG;

    pdidDevice->Unacquire();

    // Set the device's coop level
    hr = pdidDevice->SetCooperativeLevel( m_hWnd, DISCL_NONEXCLUSIVE|DISCL_FOREGROUND );
    if( FAILED(hr) )
        return hr;

    // Enlarge the array if needed
    if( m_dwNumDevices >= m_dwMaxDevices )
    {
        // Attempt to reallocate memory
        DWORD dwNewMax = m_dwMaxDevices + 10;
        DeviceInfo* pNewDevices = (DeviceInfo*) realloc( m_pDevices, sizeof(DeviceInfo) * dwNewMax );
        
        // Check for out of memory condition
        if( NULL == pNewDevices )
            return E_OUTOFMEMORY;

        // Initialize the new memory block
        ZeroMemory( pNewDevices + m_dwMaxDevices, sizeof(DeviceInfo) * (dwNewMax - m_dwMaxDevices) );

        // Copy the new pointer and update the max device count
        m_pDevices = pNewDevices;
        m_dwMaxDevices = dwNewMax;
    }

    // Add new device to the end of the list, but don't finalize addition until
    // the end of the function. If the remaining initialization calls fail, this
    // spot will be used by the next valid device.
    m_pDevices[m_dwNumDevices].pdidDevice = pdidDevice;

    // Build the action map
    hr = m_pDevices[m_dwNumDevices].pdidDevice->BuildActionMap( &m_diaf, m_strUserName, 0 );
    if( FAILED(hr) )
        return hr;

    // Set the action map for the current device
    hr = m_pDevices[m_dwNumDevices].pdidDevice->SetActionMap( &m_diaf, m_strUserName, 0 );
    if( FAILED(hr) )
        return hr;

    // Callback into the app so it can adjust the device and set
    // the m_pDevices[dwCurrentDevice].pParam field with a device state struct
    if( m_AddDeviceCallback )
    {
        hr = m_AddDeviceCallback( &m_pDevices[m_dwNumDevices], pdidi, m_AddDeviceCallbackParam ); 
        if( FAILED(hr) )    
            return hr;
    }

    // Device addition succeeded. Increment reference and index.
    m_pDevices[m_dwNumDevices].pdidDevice->AddRef();
    m_dwNumDevices++;

    // Continue enumerating suitable devices
    return S_OK;
}




//-----------------------------------------------------------------------------
// Name: EnumSuitableDevicesCB()
// Desc: Callback function for device enumeration. Adds all devices which
//       met the search criteria
//-----------------------------------------------------------------------------
BOOL CALLBACK EnumSuitableDevicesCB( LPCDIDEVICEINSTANCE pdidi, 
                                     LPDIRECTINPUTDEVICE8 pdidDevice, 
                                     DWORD dwFlags, DWORD dwDeviceRemaining,
                                     VOID* pContext )
{
    UNREFERENCED_PARAMETER( dwFlags );
    UNREFERENCED_PARAMETER( dwDeviceRemaining );
    
    // Add the device to the device manager's internal list
    ((CInputDeviceManager*)pContext)->AddDevice( pdidi, pdidDevice );

    // Continue enumerating suitable devices
    return DIENUM_CONTINUE;
}




//-----------------------------------------------------------------------------
// Name: SetActionFormat()
// Desc: Set the action format to the provided DIACTIONFORMAT structure, and
//       destroy and recreate device list if flagged
//-----------------------------------------------------------------------------
HRESULT CInputDeviceManager::SetActionFormat( DIACTIONFORMAT& diaf, BOOL bReenumerate )
{
    HRESULT hr = S_OK;

    // Store the new action format
    m_diaf = diaf;

    // Only destroy and re-enumerate devices if the caller explicitly wants to. The 
    // device list may be used within a loop, and kicking off an enumeration while 
    // the device array is in use would cause problems.
    if( bReenumerate )
    {
        // Cleanup any previously enumerated devices
        for( DWORD i=0; i<m_dwNumDevices; i++ )
        {
            if( m_pDevices[i].pdidDevice )
                m_pDevices[i].pdidDevice->Unacquire();

            SAFE_RELEASE( m_pDevices[i].pdidDevice );
        }
        m_dwNumDevices = 0;

        // Enumerate suitable DirectInput devices
        hr = m_pDI->EnumDevicesBySemantics( m_strUserName, &m_diaf, 
                                            EnumSuitableDevicesCB, this, 0L );
        if( FAILED(hr) )
            return hr;
    }
    else // Just apply the new maps.
    {
        // Devices must be unacquired to have a new action map set.
        UnacquireDevices();

        // Apply the new action map to the current devices.
        for( DWORD i=0; i<m_dwNumDevices; i++ )
        {
            hr = m_pDevices[i].pdidDevice->BuildActionMap( &m_diaf, m_strUserName, 0 );
            if( FAILED(hr) )
                return hr;

            hr = m_pDevices[i].pdidDevice->SetActionMap( &m_diaf, m_strUserName, 0 );
            if( FAILED(hr) )
                return hr;
        }
    }

    return S_OK;
}




//-----------------------------------------------------------------------------
// Name: Create()
// Desc: Create DirectInput object and perform initialization
//-----------------------------------------------------------------------------
HRESULT CInputDeviceManager::Create( HWND hWnd, TCHAR* strUserName, 
                                     DIACTIONFORMAT& diaf,
                                     LPDIMANAGERCALLBACK AddDeviceCallback, 
                                     LPVOID pCallbackParam )
{
    HRESULT hr;

    // Store data
    m_hWnd        = hWnd;
    m_strUserName = strUserName;
    m_AddDeviceCallback = AddDeviceCallback;
    m_AddDeviceCallbackParam = pCallbackParam;
    
    // Create the base DirectInput object
    hr = DirectInput8Create( GetModuleHandle(NULL), DIRECTINPUT_VERSION, 
                              IID_IDirectInput8, (VOID**)&m_pDI, NULL );
    if( FAILED(hr) )
        return hr;

    hr = SetActionFormat( diaf, TRUE );
    if( FAILED(hr) )
        return hr;

    return S_OK;
}




//-----------------------------------------------------------------------------
// Name: ConfigureDevices()
// Desc: Pause input and display the device configuration UI
//-----------------------------------------------------------------------------
HRESULT CInputDeviceManager::ConfigureDevices( HWND hWnd, IUnknown* pSurface,
                                               VOID* ConfigureDevicesCB,
                                               DWORD dwFlags, LPVOID pvCBParam )
{
    HRESULT hr;

    // Initialize all the colors here
    DICOLORSET dics;
    ZeroMemory(&dics, sizeof(DICOLORSET));
    dics.dwSize = sizeof(DICOLORSET);

    // Fill in all the params
    DICONFIGUREDEVICESPARAMS dicdp;
    ZeroMemory(&dicdp, sizeof(dicdp));
    dicdp.dwSize = sizeof(dicdp);
    dicdp.dwcFormats     = 1;
    dicdp.lprgFormats    = &m_diaf;
    dicdp.hwnd           = hWnd;
    dicdp.lpUnkDDSTarget = pSurface;

    if( m_strUserName )
    {
        dicdp.dwcUsers       = 1;
        dicdp.lptszUserNames = m_strUserName;
    }

    // Unacquire the devices so that mouse doesn't control the game while in control panel
    UnacquireDevices();

    hr = m_pDI->ConfigureDevices( (LPDICONFIGUREDEVICESCALLBACK)ConfigureDevicesCB, 
                                  &dicdp, dwFlags, pvCBParam );
    if( FAILED(hr) )
        return hr;

    if( dwFlags & DICD_EDIT )
    {
        // Re-set up the devices
        hr = SetActionFormat( m_diaf, TRUE );
        if( FAILED(hr) )
            return hr;
    }

    return S_OK;
}



//-----------------------------------------------------------------------------
// Name: UnacquireDevices()
// Desc: Unacquire all devices in the member list
//-----------------------------------------------------------------------------
VOID CInputDeviceManager::UnacquireDevices()
{
    for( DWORD i=0; i<m_dwNumDevices; i++ )
        m_pDevices[i].pdidDevice->Unacquire();
}




//-----------------------------------------------------------------------------
// Name: SetFocus()
// Desc: Sets the DirectInput focus to a new HWND
//-----------------------------------------------------------------------------
VOID CInputDeviceManager::SetFocus( HWND hWnd ) 
{
    m_hWnd = hWnd;

    UnacquireDevices();

    for( DWORD i=0; i<m_dwNumDevices; i++ )
    {
        // Set the device's coop level
        m_pDevices[i].pdidDevice->SetCooperativeLevel( m_hWnd, 
                                        DISCL_NONEXCLUSIVE|DISCL_FOREGROUND );
    }
}


?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色婷婷综合久色| 亚洲综合在线视频| 五月天婷婷综合| 国产高清在线精品| 777亚洲妇女| 综合激情网...| 国产麻豆精品一区二区| 在线播放日韩导航| 亚洲另类在线一区| 国产98色在线|日韩| 欧美一卡2卡三卡4卡5免费| 亚洲另类在线一区| aaa亚洲精品| 久久久久综合网| 日韩av电影免费观看高清完整版 | 久久久国产精华| 亚洲婷婷综合色高清在线| 九九九久久久精品| 欧美精品一卡二卡| 亚洲男人的天堂av| 波多野结衣在线一区| 精品电影一区二区三区| 天天做天天摸天天爽国产一区 | 国产精品亚洲视频| 宅男噜噜噜66一区二区66| 亚洲国产精品久久人人爱| 91丨porny丨首页| 国产精品全国免费观看高清 | 丝袜诱惑亚洲看片| 在线观看www91| 日韩毛片高清在线播放| 成人av电影在线网| 蜜臀av在线播放一区二区三区 | 美国欧美日韩国产在线播放| 欧美日韩午夜在线视频| 亚洲综合区在线| 91麻豆福利精品推荐| 成人免费在线播放视频| 成人黄色在线看| 日韩一区日韩二区| 99re在线视频这里只有精品| 亚洲欧洲日韩一区二区三区| 懂色av一区二区三区免费看| 中文av一区特黄| 不卡的av在线| 亚洲欧美aⅴ...| 在线观看网站黄不卡| 亚洲国产欧美日韩另类综合| 欧美日韩视频不卡| 日韩精品久久理论片| 678五月天丁香亚洲综合网| 香蕉成人伊视频在线观看| 欧美日韩黄视频| 免费看精品久久片| 久久久久久日产精品| 国产1区2区3区精品美女| 中文字幕一区在线观看视频| 色综合一区二区| 亚洲国产视频一区| 9191久久久久久久久久久| 免费久久99精品国产| 久久久久国产精品麻豆| 高清视频一区二区| 椎名由奈av一区二区三区| 欧洲一区在线观看| 麻豆91精品91久久久的内涵| 精品久久国产字幕高潮| 国产黄色精品网站| 亚洲欧美欧美一区二区三区| 精品国产乱码久久久久久图片| 久久久精品欧美丰满| 大尺度一区二区| 亚洲黄色在线视频| 正在播放一区二区| 国产精品18久久久久久久久| 最新热久久免费视频| 欧美久久高跟鞋激| 国产在线国偷精品产拍免费yy| 国产精品成人一区二区三区夜夜夜 | 国产欧美一区二区精品久导航 | 99r精品视频| 天天综合色天天| 2017欧美狠狠色| 99精品视频中文字幕| 三级亚洲高清视频| 国产女人18水真多18精品一级做 | 国产一区二区毛片| 亚洲素人一区二区| 欧美一级欧美三级在线观看| 丰满亚洲少妇av| 亚洲高清免费视频| 久久婷婷成人综合色| 一本色道综合亚洲| 精品综合久久久久久8888| 国产精品福利一区| 日韩欧美电影在线| 一本久久a久久精品亚洲| 狠狠色综合日日| 亚洲激情在线激情| 日韩久久免费av| 在线观看一区不卡| 国产成人午夜99999| 天天综合色天天| 亚洲三级在线免费观看| 日韩欧美中文一区二区| 一本到不卡免费一区二区| 国内精品视频666| 亚洲综合色在线| 中文在线一区二区| 日韩久久精品一区| 欧美日韩免费不卡视频一区二区三区| 国产一区二区三区免费播放| 亚洲午夜视频在线| 中文欧美字幕免费| 日韩欧美www| 欧美三级日韩三级| 成人动漫av在线| 国产在线观看一区二区| 五月婷婷欧美视频| 亚洲精品久久嫩草网站秘色| 久久精品免费在线观看| 欧美一区二区三区在线视频| 色先锋久久av资源部| 国产精品99久久久久久有的能看| 偷窥国产亚洲免费视频 | 精品乱码亚洲一区二区不卡| 在线观看一区不卡| 99精品欧美一区| 国产999精品久久久久久| 精品一区二区三区在线视频| 五月激情综合色| 亚洲黄一区二区三区| 国产精品久久久久久亚洲伦| xvideos.蜜桃一区二区| 日韩一区二区三区免费看 | 成人毛片视频在线观看| 激情综合网激情| 青娱乐精品视频在线| 亚洲1区2区3区4区| 亚洲一区二区三区爽爽爽爽爽| 国产精品国产三级国产aⅴ中文| 久久你懂得1024| 久久亚洲二区三区| www久久精品| 精品日韩成人av| 日韩欧美亚洲国产另类| 91精品在线麻豆| 欧美一卡二卡三卡| 日韩一区二区麻豆国产| 91精品久久久久久久久99蜜臂| 美女视频网站黄色亚洲| 美女久久久精品| 九九九精品视频| 国产精品888| 国产盗摄女厕一区二区三区 | 午夜欧美在线一二页| 亚洲成av人片| 天天综合天天综合色| 日韩精品电影在线| 免费精品99久久国产综合精品| 美腿丝袜亚洲三区| 韩国女主播成人在线| 国产一区二区三区免费| 东方欧美亚洲色图在线| 成人黄色在线视频| 91热门视频在线观看| 欧美性色aⅴ视频一区日韩精品| 91国产免费看| 欧美久久久久久蜜桃| 欧美一区在线视频| 久久一区二区三区国产精品| 久久精品夜色噜噜亚洲a∨| 国产欧美日韩在线视频| 国产精品毛片久久久久久| 综合av第一页| 亚洲va欧美va国产va天堂影院| 三级精品在线观看| 精品中文字幕一区二区| 国产精品一区二区久久精品爱涩| 成人app网站| 一本到不卡免费一区二区| 欧美另类高清zo欧美| 日韩欧美高清一区| 国产欧美日韩在线看| 亚洲免费观看视频| 亚洲成av人片一区二区三区| 麻豆精品新av中文字幕| 成人小视频免费观看| 一本到不卡免费一区二区| 欧美人牲a欧美精品| 26uuu精品一区二区三区四区在线| 亚洲国产精品成人综合| 伊人婷婷欧美激情| 蜜桃一区二区三区在线观看| 国产成人免费xxxxxxxx| 欧美性猛交xxxx乱大交退制版| 日韩午夜电影在线观看| 亚洲国产成人午夜在线一区 | 国产校园另类小说区| 亚洲精品ww久久久久久p站 |