C#窗体中重写WndProc方法为什么可以截获鼠标单击消息,却不能截获键盘按键消息?

如下,可以截获到鼠标单击消息:protectedoverridevoidWndProc(refMessagem){constintWM_MOUSEDOWN=0x0210;... 如下,可以截获到鼠标单击消息:
protected override void WndProc(ref Message m)
{
const int WM_MOUSEDOWN = 0x0210;
if (m.Msg == WM_MOUSEDOWN)
{
MessageBox.Show(m.Msg.ToString());
return;
}
base.WndProc(ref m);
}

但如下,却不可以截获到键盘按键消息:
protected override void WndProc(ref Message m)
{
const int WM_KEYDOWN = 0x0100;
if (m.Msg == WM_KEYDOWN)
{
MessageBox.Show(m.Msg.ToString());
return;
}
base.WndProc(ref m);
}

WM_KEYDOWN常数的值没错吧?网上查了下,都是这个值呀,为什么鼠标单击能截获,键盘按键就不能截获呢?
展开
 我来答
szqaly
推荐于2017-09-03 · TA获得超过1745个赞
知道大有可为答主
回答量:2107
采纳率:77%
帮助的人:1529万
展开全部
不是常数对不对的问题,我试了试,如果窗体上什么也没有就可以获取该事件,添加了按钮,文本框什么的就没用了,就算用Focus() 设置窗体为焦点也没反映。
它本身就提供了KeyDown事件,不是更好用吗?(注意设置keyPreview为true)
追问
谢谢回复!

奇怪了,为什么会这样子?

keyPreview已经设为true了,KeyDown事件满足不了要求才这样处理的。
追答
不知道咋整,窗体没法获得输入焦点,Focus() 没用。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式