English 中文(简体)
如何将虚拟键码转换为字符代码?
原标题:How to convert virtual key code to character code?

onkeydown() 处理程序中,我可以获得 [ 的键值为 219;然而,[ 的实际字符值是 91。有没有办法将这两者映射起来呢?

最佳回答

如果您正在使用 Windows,您应该研究 ToUnicodeEx 函数。

问题回答

step 1: Open VC++ 6.0
Step 2: File --> New --> Projects --> Win32 Application
Give your project name
Step 3: File --> New --> Files --> C++ Source File
Give your file name
step 4: In your CPP file

/* 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;

step 5: Project --> settings --> Choose MFC as shared DLL
Step 6: Bulid --> Compile
step 7: Build --> Build
Step 8: Build --> Execute

MapVirtualKey() 也非常有用。

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

一个例子就是:

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

OR (或者)

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

您可以在MapVirtualKeyA函数(winuser.h)中阅读更多。





相关问题
Undefined reference

I m getting this linker error. I know a way around it, but it s bugging me because another part of the project s linking fine and it s designed almost identically. First, I have namespace LCD. Then I ...

C++ Equivalent of Tidy

Is there an equivalent to tidy for HTML code for C++? I have searched on the internet, but I find nothing but C++ wrappers for tidy, etc... I think the keyword tidy is what has me hung up. I am ...

Template Classes in C++ ... a required skill set?

I m new to C++ and am wondering how much time I should invest in learning how to implement template classes. Are they widely used in industry, or is this something I should move through quickly?

Print possible strings created from a Number

Given a 10 digit Telephone Number, we have to print all possible strings created from that. The mapping of the numbers is the one as exactly on a phone s keypad. i.e. for 1,0-> No Letter for 2->...

typedef ing STL wstring

Why is it when i do the following i get errors when relating to with wchar_t? namespace Foo { typedef std::wstring String; } Now i declare all my strings as Foo::String through out the program, ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

Window iconification status via Xlib

Is it possible to check with the means of pure X11/Xlib only whether the given window is iconified/minimized, and, if it is, how?

热门标签