【发布时间】:2010-02-22 06:09:56
【问题描述】:
在onkeydown() 处理程序中,我将219 作为“[”的键码;但是,“[”的实际字符值是91。有没有办法映射这两个?
【问题讨论】:
标签: mfc visual-c++
在onkeydown() 处理程序中,我将219 作为“[”的键码;但是,“[”的实际字符值是91。有没有办法映射这两个?
【问题讨论】:
标签: mfc visual-c++
如果您使用的是 Windows,则应查看 ToUnicodeEx 函数。
【讨论】:
第 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 步:构建 --> 执行
【讨论】:
MapVirtualKey() 也很有用。
【讨论】:
您可以尝试使用 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)阅读更多内容
【讨论】: