cKeyboard.cpp
上传用户:sycq158
上传日期:2008-10-22
资源大小:15361k
文件大小:2k
源码类别:

游戏

开发平台:

Visual C++

  1. // CMAIN LIB - APPLICATION AND DIRECT WRAPPER
  2. //
  3. // Written by Mauricio Teichmann Ritter
  4. //
  5. // Copyright (C) 2002, Brazil. All rights reserved.
  6. // 
  7. //
  8. // cKeyboard.cpp: implementation of the cKeyboard class.
  9. //
  10. //////////////////////////////////////////////////////////////////////
  11. #include "cApplication.h"
  12. #include "cKeyboard.h"
  13. //////////////////////////////////////////////////////////////////////
  14. // Construction/Destruction
  15. //////////////////////////////////////////////////////////////////////
  16. cKeyboard::cKeyboard()
  17. {
  18. }
  19. cKeyboard::~cKeyboard()
  20. {
  21. }
  22. BOOL cKeyboard::Create()
  23. {
  24. cInputDevice::Create();
  25. HRESULT hRet;
  26. hRet = m_lpDI->CreateDevice(GUID_SysKeyboard, &m_lpDIKeyboard, NULL); 
  27. if FAILED(hRet) { 
  28. Destroy();
  29. return FALSE; 
  30. hRet = m_lpDIKeyboard->SetDataFormat(&c_dfDIKeyboard); 
  31. if FAILED(hRet) { 
  32. Destroy();
  33. return FALSE; 
  34.     hRet = m_lpDIKeyboard->SetCooperativeLevel(GetMainApp()->GetMainWnd(), 
  35.                              DISCL_FOREGROUND | DISCL_NONEXCLUSIVE); 
  36.     if FAILED(hRet) 
  37.     { 
  38.         Destroy();
  39.         return FALSE; 
  40.     } 
  41.  
  42.     // Get access to the input device. 
  43.     hRet = m_lpDIKeyboard->Acquire(); 
  44.     if FAILED(hRet) 
  45.     { 
  46.         Destroy(); 
  47.         return FALSE; 
  48.     }
  49. m_KbdBuffer = (char*) malloc(256);
  50. return TRUE;
  51. }
  52. void cKeyboard::Destroy()
  53. {
  54. if(m_lpDIKeyboard != NULL){
  55. m_lpDIKeyboard->Unacquire();
  56. m_lpDIKeyboard->Release();
  57. m_lpDIKeyboard = NULL;
  58. }
  59. cInputDevice::Destroy();
  60. free(m_KbdBuffer);
  61. }
  62. void cKeyboard::Process()
  63. {
  64.     HRESULT  hRet; 
  65. // Clear upo the buffer
  66. memset((LPVOID)m_KbdBuffer,0, 256);
  67. hRet = m_lpDIKeyboard->GetDeviceState(256,(LPVOID)m_KbdBuffer); 
  68.     if FAILED(hRet) 
  69.     { 
  70.         if(hRet == DIERR_INPUTLOST)
  71. {
  72. // Try to Reaquire;
  73. hRet = m_lpDIKeyboard->Acquire(); 
  74. if FAILED(hRet) 
  75. Destroy(); 
  76. return; 
  77. }
  78. // Process Keyboard input again
  79. Process();
  80. }
  81. DXTRACE_MSG("FAILED TO RETRIEVE KEYBOARD INPUT!");
  82.         return; 
  83.     } 
  84. }
  85. BOOL cKeyboard::CheckKey(const int cKey)
  86. {
  87. //#define KEYDOWN(name, key) (name[key] & 0x80) 
  88. char* pKbdBuffer = NULL;
  89. pKbdBuffer = m_KbdBuffer;
  90. pKbdBuffer+=cKey;
  91. return (*pKbdBuffer & 0x80);
  92. }
  93. LPDIRECTINPUTDEVICE8 cKeyboard::m_lpDIKeyboard = NULL;
  94. char* cKeyboard::m_KbdBuffer = NULL;