热情软件屋

 

如何在VB中截取Windows消息


编号:QA000634
建立日期: 1999年3月13日 最后修改日期:2000年2月1日
所属类别:

张彦:
    在用API编程时,常常要想拦截Windows的消息,交由自己的过程处理。我用的是vb5.0,比如在右击文本框时,弹出默认的一个菜单。看一本书写,此时会有一条WM_CONTEXTMENU消息发送给窗体函数,如果能拦截它,就可以使弹出菜单不再出现,而代之以自己定义的菜单。
    我看了一些书,都提到Windows消息,但很少深入的研究如何控制他们,我想问的是:如何控制这些消息,比如接收一条消息,判断,如果满足条件,用自定义过程处理,否则,不做处理,交给系统默认的处理程序处理。
    我用AddressOf试过,死了机,只好问问你。

回答:

    我不太喜欢使用AddressOf来截取消息,因为它比较容易导致VB的集成环境崩溃,运行时倒没有什么副作用。微软的Knowledge Base的文章:“Q224302 OWTO: Suppress a TextBox Control's Popup Menu”提供了一种利用子类技术截取WM_CONTEXTMENU的方法,这种方法比较正规,但是也比较麻烦。另外,在VB的光盘上你可以找到一个TrayIcon的例子,它展示了如何利用AddressOf截取消息,你可以参考。
    我平时喜欢使用Message Blaster或MsgHook来截取消息,你可以参考QA000580 "VB5中动态建立带子菜单的菜单",那里我展示了如何截取菜单消息。
    VB的编程有时于其它语言有所不同,比如你说的替换文本框右键菜单的问题可以不截取WM_CONTEXTMENU,你可以看看QA000601 "如何更改设置TEXTBOX的右键菜单"

此问题由李海回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio