紧急,请教下WndProc

ccccffff 2011-08-02 07:24:40
新建了一个Form,这个Form上先套上了一个Panel,然后Panel上有很多控件。现在需要禁止鼠标右键点击。
在Form上这样写:
Private Const WM_RBUTTONDOWN As Integer = &H204
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
If m.Msg = WM_RBUTTONDOWN Then
Return
End If
MyBase.WndProc(m)
End Sub

结果发现m.Msg一直等于70,始终没有进入到return里面,请问,应该怎么写才对?
...全文
159 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ccccffff 2011-08-03
  • 打赏
  • 举报
回复
????????????zenfeng人呢?
ccccffff 2011-08-03
  • 打赏
  • 举报
回复
请教下,能否写一下代码?怎么实现简单的hook?
足球中国 2011-08-03
  • 打赏
  • 举报
回复
简单的hook一下就好了。
ccccffff 2011-08-03
  • 打赏
  • 举报
回复
这样我也考虑过的,但是这样不行,因为还需要判断Form上其他控件的值是否合法,如果不合法才禁止右键的。而其他控件则是在另外一个Panel内。所以这样子行不通的
宝_爸 2011-08-03
  • 打赏
  • 举报
回复
参考下面的文章及代码吧

http://support.microsoft.com/default.aspx?scid=kb;en-us;318804
http://www.codeproject.com/csharp/GlobalSystemHook.asp
http://www.codeproject.com/csharp/globalhook.asp

ccccffff 2011-08-03
  • 打赏
  • 举报
回复
还有高手会吗?
宝_爸 2011-08-02
  • 打赏
  • 举报
回复
子控件的消息好像不进父控件的WndProc,例如
从Panel继承一个类,过滤右键,在form中使用这个类
public class MyPanel : Panel
{
private const int WM_RBUTTONDOWN = 0x204;

protected override void WndProc(ref Message m)
{
if (m.Msg == WM_RBUTTONDOWN)
{
return;
}
base.WndProc(ref m);
}
}

....
private MyPanel panel1;
....
this.panel1 = new MyPanel();
....

只有panel上点击右键才进标成红色的行,在Panel中的textbox等控件上点击右键不进。

如果你控件种类不是很多的话,可以为每个控件写个继承类。
足球中国 2011-08-02
  • 打赏
  • 举报
回复
肯定不会一直是70

直接运行不要单步跟踪。
ccccffff 2011-08-02
  • 打赏
  • 举报
回复
没有高手来指导下吗

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧