コード例 #1
0
ファイル: InputManager.cpp プロジェクト: brock7/TianLong
VOID CInputManager::Initial(VOID*)
{
	HRESULT hr;

	m_hWnd = g_hMainWnd;

    // Create a DInput object
    if( FAILED( hr = DirectInput8Create( GetModuleHandle(NULL), DIRECTINPUT_VERSION, 
                                         IID_IDirectInput8, (VOID**)&m_pDI, NULL ) ) )
	{
		TDThrow(_T("Create a DInput object error:%08X"), hr);
        return;
	}

	// Create the keyboard device
	hr = m_pDI->CreateDevice(GUID_SysKeyboard, &m_lpDIDKeyboard, NULL);
	if(hr == DI_OK)
	{
		m_lpDIDKeyboard->SetDataFormat(&c_dfDIKeyboard);
		m_lpDIDKeyboard->SetCooperativeLevel(g_hMainWnd, DISCL_NONEXCLUSIVE | DISCL_FOREGROUND);

		AcquireKeyboard();
	}

}
コード例 #2
0
/////////////////////////////////////////////////////////////////////
//							           CInputSystem::InitializeSystem
/////////////////////////////////////////////////////////////////////
bool CInputSystem::InitializeSystem(void *initStructure) {

	// --------------------------------------------------------------
	//					            Get the initialization parameters
	if (initStructure == NULL) {
		return false;
	}

	SInputSystemInfoStructure *initParams = (SInputSystemInfoStructure*)initStructure;

	if (initParams->windowHandle == NULL) {
		return false;
	}

	if (initParams->instance == NULL) {
		return false;
	}

	// --------------------------------------------------------------
	//										   Initialize DirectInput
	HRESULT hr = DirectInput8Create(initParams->instance, 
									DIRECTINPUT_VERSION, 
									IID_IDirectInput8, 
									(void**)&diObject, 
									NULL);

	if (FAILED(hr)) {
		return false;
	}

	inputSystemInfo.instance = initParams->instance;
	inputSystemInfo.windowHandle = initParams->windowHandle;
	
	// --------------------------------------------------------------
	//										     Create input devices
	if (!CreateMouseDevice()) {
		return false;
	}

	if (!CreateKeyboardDevice()) {
		return false;
	}

	// --------------------------------------------------------------
	//												  Acquire Devices
	if (!AcquireMouse()) {
		return false;
	}

	if (!AcquireKeyboard()) {
		return false;
	}

	return true;
}
コード例 #3
0
/////////////////////////////////////////////////////////////////////
//							          CInputSystem::ReadKeyboardState
/////////////////////////////////////////////////////////////////////
bool CInputSystem::ReadKeyboardState()
{
    HRESULT  hr; 

	if (!keyboardDevice) {
		return false;
	}

	//---------------------------------------------------------------
	//											   Get Keyboard State 
	hr = keyboardDevice->GetDeviceState(
							sizeof(keyBoardStateBuffer),
							(LPVOID)&keyBoardStateBuffer
							);

	if (SUCCEEDED(hr)) {
		return true;
	}

	//	If Keyboard focus lost then reacquire
	if (hr==DIERR_INPUTLOST) {

		// Try again
		if (AcquireKeyboard()) {

			//-------------------------------------------------------
			//						     Get Keyboard State
			hr = keyboardDevice->GetDeviceState(
								sizeof(keyBoardStateBuffer),
								(LPVOID)&keyBoardStateBuffer
								);

			if (SUCCEEDED(hr)) {
				return true;
			}
		}
	}
	
	// TODO: Temp Debug Text
	std::cout << "Keyboard Input Error: " << hr << std::endl;
	return false;
	

}
コード例 #4
0
VOID CInputSystem::KeybordTick(VOID)
{
	if(!m_lpDIDKeyboard) return;

	//保留旧状态
	memcpy(m_byOldKeys, m_byCurKeys, NUMDIKEYS);

	HRESULT hRet = m_lpDIDKeyboard->GetDeviceState(NUMDIKEYS, m_byCurKeys);
	if(hRet != DI_OK) 
		AcquireKeyboard();
	else
	{
		for(INT i=0; i<NUMDIKEYS; i++)
		{
			m_bKeyPresses[i]  = (!(m_byOldKeys[i]&0x80) && (m_byCurKeys[i]&0x80)); //该键刚被按下
			m_bKeyPresseds[i] = ((m_byOldKeys[i]&0x80) && !(m_byCurKeys[i]&0x80)); //该键刚被释放

			//保存键盘输入事件
			if(m_bKeyPresses[i])
			{
				AddEvent(EVENT_KEY_DOWN, i);
			}
			if(m_bKeyPresseds[i])
			{
				AddEvent(EVENT_KEY_UP, i);
			}
		}
	}

	//检查是否有自动发送的RepeatKeyDown
	if(m_bCatchKeyDown && !IsEventExist(EVENT_KEY_DOWN))
	{
		switch (m_Buf_WM_KEYDOWN.first) 
		{
		case VK_LEFT:	AddEvent(EVENT_KEY_DOWN, KC_LEFT);	break;
		case VK_UP:		AddEvent(EVENT_KEY_DOWN, KC_UP);	break;
		case VK_RIGHT:	AddEvent(EVENT_KEY_DOWN, KC_RIGHT); break;
		case VK_DOWN:	AddEvent(EVENT_KEY_DOWN, KC_DOWN);	break;
		case VK_BACK:	AddEvent(EVENT_KEY_DOWN, KC_BACK);	break;
		}
	}
	m_bCatchKeyDown = FALSE;
}