KeyHelper.cpp
上传用户:lejushen
上传日期:2007-01-10
资源大小:183k
文件大小:3k
源码类别:

菜单

开发平台:

Visual C++

  1. //*******************************************************************************
  2. // COPYRIGHT NOTES
  3. // ---------------
  4. // This is a part of the BCGControlBar Library
  5. // Copyright (C) 1998-2000 BCGSoft Ltd.
  6. // All rights reserved.
  7. //
  8. // This source code can be used, distributed or modified
  9. // only under terms and conditions 
  10. // of the accompanying license agreement.
  11. //*******************************************************************************
  12. // KeyHelper.cpp: implementation of the CBCGKeyHelper class.
  13. //
  14. //////////////////////////////////////////////////////////////////////
  15. #include "stdafx.h"
  16. #include "KeyHelper.h"
  17. #ifdef _DEBUG
  18. #undef THIS_FILE
  19. static char THIS_FILE[]=__FILE__;
  20. #define new DEBUG_NEW
  21. #endif
  22. //////////////////////////////////////////////////////////////////////
  23. // Construction/Destruction
  24. //////////////////////////////////////////////////////////////////////
  25. CBCGKeyHelper::CBCGKeyHelper(LPACCEL lpAccel) :
  26. m_lpAccel (lpAccel)
  27. {
  28. }
  29. //*******************************************************************
  30. CBCGKeyHelper::CBCGKeyHelper() :
  31. m_lpAccel (NULL)
  32. {
  33. }
  34. //*******************************************************************
  35. CBCGKeyHelper::~CBCGKeyHelper()
  36. {
  37. }
  38. //*******************************************************************
  39. void CBCGKeyHelper::Format (CString& str) const
  40. {
  41. str.Empty ();
  42. if (m_lpAccel == NULL)
  43. {
  44. ASSERT (FALSE);
  45. return;
  46. }
  47. if (m_lpAccel->fVirt & FCONTROL)
  48. {
  49. //AddVirtKeyStr (str, VK_CONTROL);
  50. str += _T("Ctrl+");
  51. }
  52. if (m_lpAccel->fVirt & FSHIFT)
  53. {
  54. //AddVirtKeyStr (str, VK_SHIFT);
  55. str += _T("Shift+");
  56. }
  57. if (m_lpAccel->fVirt & FALT)
  58. {
  59. //AddVirtKeyStr (str, VK_MENU);
  60. str += _T("Alt+");
  61. }
  62. if (m_lpAccel->fVirt & FVIRTKEY)
  63. {
  64. TCHAR keyname[64];
  65. UINT vkey = MapVirtualKey(m_lpAccel->key, 0)<<16;
  66. GetKeyNameText(vkey, keyname, sizeof(keyname));
  67. str += keyname;
  68. }
  69. else if (m_lpAccel->key != 27) // Don't print esc
  70. {
  71. str += (char) m_lpAccel->key;
  72. }
  73. }
  74. //******************************************************************
  75. void CBCGKeyHelper::AddVirtKeyStr (CString& str, UINT uiVirtKey, BOOL bLast) const
  76. {
  77. //
  78. // This file was modified by Sven Ritter
  79. //
  80. #define BUFFER_LEN 50
  81. TCHAR szBuffer [BUFFER_LEN + 1];
  82. TRACE("KeyboardLayout: 0x%xn", ::GetKeyboardLayout (0));
  83. UINT nScanCode = ::MapVirtualKeyEx (uiVirtKey, 0, 
  84. ::GetKeyboardLayout (0)) <<16 | 0x1;
  85. if (uiVirtKey >= VK_PRIOR && uiVirtKey <= VK_HELP)
  86. {
  87. nScanCode |= 0x01000000;
  88. }
  89. ::GetKeyNameText (nScanCode, szBuffer, BUFFER_LEN);
  90. CString strKey(szBuffer);
  91. strKey.MakeLower();
  92. //--------------------------------------
  93. // The first letter should be uppercase:
  94. //--------------------------------------
  95. for (int nCount = 0; nCount < strKey.GetLength(); nCount++)
  96. {
  97. TCHAR c = strKey[nCount];
  98. if (IsCharLower (c))
  99. {
  100. c = (TCHAR) toupper (c); // Convert single character JY 4-Dec-99
  101. strKey.SetAt (nCount, c);
  102. break;
  103. }
  104. }
  105. str += strKey;
  106. if (!bLast)
  107. {
  108. str += '+';
  109. }
  110. }