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常数的值没错吧?网上查了下,都是这个值呀,为什么鼠标单击能截获,键盘按键就不能截获呢? 展开
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常数的值没错吧?网上查了下,都是这个值呀,为什么鼠标单击能截获,键盘按键就不能截获呢? 展开
1个回答
展开全部
不是常数对不对的问题,我试了试,如果窗体上什么也没有就可以获取该事件,添加了按钮,文本框什么的就没用了,就算用Focus() 设置窗体为焦点也没反映。
它本身就提供了KeyDown事件,不是更好用吗?(注意设置keyPreview为true)
它本身就提供了KeyDown事件,不是更好用吗?(注意设置keyPreview为true)
追问
谢谢回复!
奇怪了,为什么会这样子?
keyPreview已经设为true了,KeyDown事件满足不了要求才这样处理的。
追答
不知道咋整,窗体没法获得输入焦点,Focus() 没用。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询