【问题标题】:How to convert virtual key code to character code?如何将虚拟键码转换为字符码?
【发布时间】:2010-02-22 06:09:56
【问题描述】:

onkeydown() 处理程序中,我将219 作为“[”的键码;但是,“[”的实际字符值是91。有没有办法映射这两个?

【问题讨论】:

    标签: mfc visual-c++


    【解决方案1】:

    如果您使用的是 Windows,则应查看 ToUnicodeEx 函数。

    【讨论】:

      【解决方案2】:

      第 1 步:打开 VC++ 6.0
      第 2 步:文件 --> 新建 --> 项目 --> Win32 应用程序
      提供您的项目名称
      第 3 步:文件 --> 新建 --> 文件 --> C++ 源文件
      提供您的文件名
      第 4 步:在您的 CPP 文件中

      /* Mfc program to handle virtual key codes. */
      #include<afxwin.h>
      class myframe : public CFrameWnd
      {
      public: 
          myframe()
          {
              Create(0,"Menu Program");
          }
          void OnKeyDown(UINT n)
          {
              switch(n)
              {
              case VK_LEFT:
                  MessageBox("Left Arrow","Hellow");
                  break;
              case VK_RIGHT:
                  MessageBox("Right Arrow","Hellow");
                  break;
              case VK_UP:
                  MessageBox("Up Arrow","Hellow");
                  break;
              case VK_DOWN:
                  MessageBox("Down Arrow","Hellow");
                  break;
              case VK_NUMPAD0:
                  MessageBox("Number ZERO","Hellow");
                  break;
              case VK_NUMPAD9:
                  MessageBox("Number NINE","Hellow");
                  break;
              case VK_SPACE:
                  MessageBox("Space Bar","Hellow");
                  break;
              case VK_BACK:
                  MessageBox("BACK KEY","Hellow");
                  break;
              case VK_SHIFT:
                  MessageBox("SHIFT KEY","Hellow");
                  break;
              }
          }       
          DECLARE_MESSAGE_MAP()
      };
      BEGIN_MESSAGE_MAP(myframe,CFrameWnd)
      ON_WM_KEYDOWN()
      END_MESSAGE_MAP()
      class myapp : public CWinApp
      {
      public:
          int InitInstance()
          {
              m_pMainWnd=new myframe();
              m_pMainWnd->ShowWindow(3);      
              return 1;
          }
      };
      myapp app;
      

      步骤 5:项目 --> 设置 --> 选择 MFC 作为共享 DLL
      第 6 步:构建 --> 编译
      第 7 步:构建 --> 构建
      第 8 步:构建 --> 执行

      【讨论】:

        【解决方案3】:

        MapVirtualKey() 也很有用。

        【讨论】:

          【解决方案4】:

          您可以尝试使用 Windows.h 库中内置的 MapVirtualKey(UINT uCode,UINT uMapType) 函数。

          一个例子是:

          // Converts 0x1B (escape key) to the unshifted character value 27
          MapVirtualKey( 0x1B, MAPVK_VK_TO_CHAR); 
          

          if (GetAsyncKeyState(VK_SHIFT) & (1 << 16)) {
              std::cout << MapVirtualKey(VK_SHIFT,MAPVK_VK_TO_CHAR);
          }
          

          您可以在MapVirtualKeyA function (winuser.h)阅读更多内容

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2010-09-24
            • 2012-01-06
            • 2011-02-25
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多