MouseManager.cpp
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:3k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // MouseManager.cpp: implementation of the CMouseManager class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "MouseManager.h"
  6. #ifdef _DEBUG
  7. #undef THIS_FILE
  8. static char THIS_FILE[]=__FILE__;
  9. #define new DEBUG_NEW
  10. #endif
  11. CMap<DWORD, DWORD, CString, CString> CMouseManager::m_mapStrings;
  12. CArray<MOUSECLICKS, MOUSECLICKS&> CMouseManager::m_arrMouse;
  13. BOOL CMouseManager::Load()
  14. {
  15. BOOL bSucess = FALSE;
  16. BYTE* pData = NULL;
  17. UINT uDataSize;
  18. if (!AfxGetApp()->GetProfileBinary(_T("MouseManager"), _T("State"), (LPBYTE*) &pData, &uDataSize))
  19. {
  20. ASSERT (pData == NULL);
  21. return FALSE;
  22. }
  23. ASSERT (pData != NULL);
  24. try
  25. {
  26. CMemFile file (pData, uDataSize);
  27. CArchive ar (&file, CArchive::load);
  28. m_arrMouse.Serialize (ar);
  29. bSucess = TRUE;
  30. }
  31. catch (CMemoryException* pEx)
  32. {
  33. pEx->Delete ();
  34. TRACE(_T("Memory exception in CRegistry::Read ()!n"));
  35. }
  36. catch (CArchiveException* pEx)
  37. {
  38. pEx->Delete ();
  39. TRACE(_T("CArchiveException exception in CRegistry::Read ()!n"));
  40. }
  41. delete pData;
  42. return bSucess;
  43. }
  44. void CMouseManager::Save()
  45. {
  46. BOOL bRes = FALSE;
  47. try
  48. {
  49. CMemFile file;
  50. {
  51. CArchive ar (&file, CArchive::store);
  52. m_arrMouse.Serialize (ar);
  53. ar.Flush ();
  54. }
  55. DWORD dwDataSize = (DWORD)file.GetLength ();
  56. LPBYTE lpbData = file.Detach ();
  57. if (lpbData == NULL)
  58. {
  59. return ;
  60. }
  61. bRes = AfxGetApp()->WriteProfileBinary(_T("MouseManager"), _T("State"), lpbData, (UINT) dwDataSize);
  62. free (lpbData);
  63. }
  64. catch (CMemoryException* pEx)
  65. {
  66. pEx->Delete ();
  67. TRACE(_T("Memory exception in CRegistry::Write ()!n"));
  68. }
  69. }
  70. int CMouseManager::FindMouseCommand(int nArea, DWORD dwMouse)
  71. {
  72. for (int i = 0; i < m_arrMouse.GetSize(); i++)
  73. {
  74. MOUSECLICKS& mc = m_arrMouse[i];
  75. if (mc.nArea == nArea && mc.dwMouse == dwMouse)
  76. {
  77. int nVirt = (GetKeyState(VK_CONTROL) < 0 ? FCONTROL : 0) |
  78. (GetKeyState(VK_SHIFT) < 0 ? FSHIFT : 0) |
  79. (GetKeyState(VK_MENU) < 0 ? FALT : 0);
  80. if (nVirt == mc.accel.fVirt)
  81. return mc.accel.cmd;
  82. }
  83. }
  84. return -1;
  85. }
  86. CString CMouseManager::GetMouseString(DWORD dwMouse)
  87. {
  88. CString strMouse;
  89. if (!m_mapStrings.Lookup(dwMouse, strMouse))
  90. {
  91. VERIFY(strMouse.LoadString(dwMouse));
  92. m_mapStrings.SetAt(dwMouse, strMouse);
  93. }
  94. return strMouse;
  95. }
  96. void CMouseManager::AddCommand(DWORD dwMouse, ACCEL accel, int nArea)
  97. {
  98. MOUSECLICKS mc = {dwMouse, nArea};
  99. mc.accel = accel;
  100. m_arrMouse.Add(mc);
  101. }