如何将虚拟键码转换为字符码?
Posted
技术标签:
【中文标题】如何将虚拟键码转换为字符码?【英文标题】:How to convert virtual key code to character code? 【发布时间】:2010-02-22 06:09:56 【问题描述】:在onkeydown()
处理程序中,我将219
作为“[”的键码;但是,“[”的实际字符值是91
。有没有办法映射这两个?
【问题讨论】:
【参考方案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)阅读更多内容
【讨论】:
以上是关于如何将虚拟键码转换为字符码?的主要内容,如果未能解决你的问题,请参考以下文章