将wParam转换为虚拟键代码

时间:2014-12-28 17:02:40

标签: c# .net winforms

我自己学习C#和.NET。我正在尝试根据this 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与虚拟密钥代码进行正确比较?

1 个答案:

答案 0 :(得分:1)

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

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