将 wParam 转换为虚拟键代码

本文关键字:代码 虚拟 wParam 转换 | 更新日期: 2023-09-27 18:35:24

我正在自己学习C#和.NET。我正在尝试学习如何根据这篇MSDN文章对文本框进行子类化。我没有使用文章中确切的子类过程,但自己尝试了一些东西。

我遇到的问题是正确转换wParam以便我可以将其与虚拟键代码进行比较。

下面是子类过程的代码,有问题的部分在注释中指出:

using System.Windows.Forms;
namespace BtnEdit
{
    public class SubclassEdit : TextBox
    {
        private const int WM_CHAR = 0x102;
        protected override void WndProc(ref Message m)
        {
            switch (m.Msg)
            {
                case WM_CHAR:
                    {
                        // how to convert m.WParam ???
                        switch (m.WParam.ToInt32)
                        {
                            case 0x50: // this gives error
                                this.Text = "Pressed key P";
                                break;
                            default:
                                base.WndProc(ref m);
                                break;
                        }
                    }
                    break;
                default:
                    //pass other messages to default procedure
                    base.WndProc(ref m);
                    break;
            }
        }
    }
}

我试过switch ( (Keys)m.WParam )然后我能够做一些像case Keys.A这样的事情,它奏效了。这种方法的问题在于,在这种情况下,我无法测试小写字母a。此外,像case Keys.Left这样的事情也不起作用。

问题:

我应该如何修改我的代码,以便我可以正确地将wParam与虚拟键代码进行比较?

将 wParam 转换为虚拟键代码

还需要检查WM_KEYDOWN,请参阅:http://msdn.microsoft.com/en-us/library/windows/desktop/ms646268%28v=vs.85%29.aspx

至于你的错误,你忘记了.ToInt32()!还要检查0x70(小写 p),