Language.cpp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. // Language.cpp: implementation of the CLanguage class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "DataManager.h"
  6. #include "Language.h"
  7. #ifdef _DEBUG
  8. #undef THIS_FILE
  9. static char THIS_FILE[]=__FILE__;
  10. #define new DEBUG_NEW
  11. #endif
  12. CLanguage CLanguage::m_self;
  13. //////////////////////////////////////////////////////////////////////
  14. // Construction/Destruction
  15. //////////////////////////////////////////////////////////////////////
  16. CLanguage::CLanguage()
  17. {
  18. m_mapWords.SetAt("Upper Alarm", "过高报警");
  19. m_mapWords.SetAt("Normal", "恢复正常");
  20. m_mapWords.SetAt("Low Alarm", "过低报警");
  21. m_hDll = NULL;
  22. m_pfTranslate = NULL;
  23. m_pfInit = NULL;
  24. }
  25. CLanguage::~CLanguage()
  26. {
  27. FreeDll();
  28. }
  29. CString CLanguage::GetCurLanguage(CString strOrigTxt)
  30. {
  31. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  32. CString strRtn = strOrigTxt;
  33. if(m_self.m_pfTranslate)
  34. {
  35. int nSize = 1024;
  36. char* pBuf = new char[nSize];
  37. try
  38. {
  39. int nSizeT = m_self.m_pfTranslate(strOrigTxt, pBuf, nSize-1);
  40. if(nSizeT >= nSize)
  41. {
  42. delete []pBuf;
  43. nSize = nSizeT + 1;
  44. pBuf = new char[nSize];
  45. nSizeT = m_self.m_pfTranslate(strOrigTxt, pBuf, nSize-1);
  46. }
  47. }
  48. catch (...)
  49. {
  50. }
  51. strRtn = pBuf;
  52. delete []pBuf;
  53. }
  54. return strRtn;
  55. }
  56. int CLanguage::ShowMessageBox(LPCTSTR lpszText, UINT nType /* = MB_OK */, UINT nIDHelp /* = 0 */)
  57. {
  58. // AFX_MANAGE_STATE(AfxGetStaticModuleState());
  59. return AfxMessageBox(GetCurLanguage(lpszText), nType, nIDHelp);
  60. }
  61. UINT MessageBoxProc(LPVOID lParam)
  62. {
  63. CString *pstr = (CString*)lParam;
  64. AfxMessageBox(*pstr);
  65. delete pstr;
  66. return 23;
  67. }
  68. int CLanguage::ShowMessageBoxEx(LPCTSTR lpszText, UINT nType /* = MB_OK */, UINT nIDHelp /* = 0 */)
  69. {
  70. // AFX_MANAGE_STATE(AfxGetStaticModuleState());
  71. CString *pstr = new CString(GetCurLanguage(lpszText));
  72. AfxBeginThread(MessageBoxProc, pstr);
  73. return MB_OK;
  74. }
  75. int CLanguage::ShowMessageBox(UINT nIDPrompt, UINT nType, UINT nIDHelp)
  76. {
  77. // AFX_MANAGE_STATE(AfxGetStaticModuleState());
  78. return AfxMessageBox(nIDPrompt, nType, nIDHelp);
  79. }
  80. BOOL CLanguage::LoadDll()
  81. {
  82. if(m_self.m_hDll == NULL)
  83. {
  84. m_self.m_hDll = LoadLibrary("TransInterface.dll");
  85. if(m_self.m_hDll)
  86. {
  87. m_self.m_pfTranslate = (Def_Translate*)GetProcAddress(m_self.m_hDll, "Translate");
  88. m_self.m_pfInit = (Def_Init*)GetProcAddress(m_self.m_hDll, "Init");
  89. m_self.m_pfFree = (Def_Free*)GetProcAddress(m_self.m_hDll, "Free");
  90. }
  91. else
  92. {
  93. }
  94. }
  95. return (m_self.m_hDll != NULL);
  96. }
  97. void CLanguage::FreeDll()
  98. {
  99. if(m_self.m_hDll)
  100. {
  101. FreeLibrary(m_self.m_hDll);
  102. m_self.m_hDll = NULL;
  103. m_self.m_pfInit = NULL;
  104. m_self.m_pfFree = NULL;
  105. }
  106. }
  107. void CLanguage::InitLanguage(HWND hWnd)
  108. {
  109. if(m_self.m_pfInit)
  110. {
  111. try
  112. {
  113. m_self.m_pfInit(hWnd);
  114. }
  115. catch (...)
  116. {
  117. }
  118. }
  119. }
  120. void CLanguage::FreeLanguage()
  121. {
  122. if(m_self.m_pfFree)
  123. {
  124. try
  125. {
  126. m_self.m_pfFree();
  127. }
  128. catch (...)
  129. {
  130. }
  131. }
  132. }