关于IMessageFilter,控件或窗体消息

水如烟 2008-04-21 10:08:52
加精
控件或窗体消息

有关IMessageFilter的文档说明:

IMessageFilter 接口
定义消息筛选器接口。

命名空间: System.Windows.Forms
程序集: System.Windows.Forms(在 System.Windows.Forms.dll 中)

此接口允许应用程序在消息被调度到控件或窗体之前捕获它。

IMessageFilter.PreFilterMessage 方法
使用 PreFilterMessage 在消息被调度到控件或窗体之前将其筛选出来
如果筛选消息并禁止消息被调度,则为 true;如果允许消息继续到达下一个筛选器或控件,则为 false。


可以将实现 IMessageFilter 接口的类添加到应用程序的消息泵中,以在消息被调度到控件或窗体之前将它筛选出来或执行其他操作。若要将消息筛选器添加到应用程序的消息泵中,请使用 Application 类中的 AddMessageFilter 方法;当您不再需要在调度 Windows 消息之前捕获这些消息时,可以使用RemoveMessageFilter方法移除消息筛选器。

代码下载:RAR文件,2005
...全文
1626 43 打赏 收藏 转发到动态 举报
写回复
用AI写文章
43 条回复
切换为时间正序
请发表友善的回复…
发表回复
lmhcs 2012-09-09
  • 打赏
  • 举报
回复
lzmtw 兄,我遇到一个问题,就是不能筛选到窗体失效或者激活的消息。不知道是不是我的代码有误?请你帮我看一下。
Public Class Class1

Implements IMessageFilter
Private Const WM_MOVE As Long = &H3
'窗体失效
Private Const WM_ACTIVATE As Int32 = &H6
Private Const WA_INACTIVE As Int32 = 0
Private Const WM_ACTIVATEAPP As Int32 = &H1C
Private Const WM_NCACTIVATE As Int32 = &H86
Private Const WM_KILLFOCUS As Int32 = &H8
Private Const WM_SETFOCUS As Int32 = &H7
Private Const WM_LBUTTONDOWN As Integer = &H201
Private Const WM_KEYDOWN As Long = &H100
Private Const WM_KEYUP As Long = &H101
Public Function PreFilterMessage(ByRef m As System.Windows.Forms.Message) As Boolean Implements System.Windows.Forms.IMessageFilter.PreFilterMessage
Select Case m.Msg
Case WM_LBUTTONDOWN

Case WM_KEYDOWN

Case WM_ACTIVATE '激活
Console.WriteLine(m.ToString & "_________________________________")
Case WM_NCACTIVATE
Console.WriteLine(m.ToString & "_________________________________")
Case WM_KILLFOCUS
Console.WriteLine(m.ToString & "_________________________________")
Case WM_SETFOCUS

Console.WriteLine(m.ToString & "_________________________________")
End Select
Return False
End Function
End Class


这是窗体测试代码
Public Class Form1

Dim c As New Class1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Application.AddMessageFilter(c)
End Sub
End Class
tuoluofo2 2011-07-28
  • 打赏
  • 举报
回复
我是知道了用ImessageFilter之后才看到这个帖子的。

可惜我在c#,你在vb.net

是不是.net搞的语言太多了,高手集中不起来。所以很多时候问不到答案?
aassdd 2009-12-05
  • 打赏
  • 举报
回复
虽然时间有点跨度,但知识没有变。
zhy97031 2009-11-18
  • 打赏
  • 举报
回复
test
zhy97031 2009-11-18
  • 打赏
  • 举报
回复
test
knowledge_Is_Life 2008-04-30
  • 打赏
  • 举报
回复
我也想知道,正在找這方面的資料~~~~~
Xzoth 2008-04-24
  • 打赏
  • 举报
回复
弱弱的mark一下
jikun6666 2008-04-24
  • 打赏
  • 举报
回复
很厉害!佩服了
水如烟 2008-04-23
  • 打赏
  • 举报
回复
寄存:

192.168.1.242:8086

“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------

由于目标机器积极拒绝,无法连接。 192.168.1.242:8086
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.Net.Sockets.SocketException: 由于目标机器积极拒绝,无法连接。 192.168.1.242:8086

源错误:

执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。

堆栈跟踪:


[SocketException (0x274d): 由于目标机器积极拒绝,无法连接。 192.168.1.242:8086]
System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) +2668969
System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) +717
CSDN.Community.TopicFileDataCenter.TopicFileComponent.Reply(ReplyGenerateData rgd) +0
CSDN.Community.TopicFileDataCenter.TopicFileDataCenterEntry.Reply(Guid topicId, DateTime createDate, ReplyInfo reply, CommunityUser user, UserSectionProfile usp) +73
CSDN.Community.PointForum.Services.ReplyTopicManager.ReplyTopic(ReplyInfo reply, DateTime topicPostDate, String& errorInfo, CommunityUser user, UserSectionProfile usp) +747
CSDN.Community.PointForum.WebControls.ReplyTopicPage.bt_Submit_Click(Object sender, EventArgs e) +604
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +105
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +107
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1746
水如烟 2008-04-23
  • 打赏
  • 举报
回复
将里头的代码看懂摸透会用,WinForm开发的相当部分知识也就掌握了.
我也意识的加了一些"不相关"的东西在里头.

希望对你们有所启发.仅供参考.
vlsm 2008-04-23
  • 打赏
  • 举报
回复
太棒了,大餐!!!!!!
herol 2008-04-23
  • 打赏
  • 举报
回复
学习
水如烟 2008-04-23
  • 打赏
  • 举报
回复
别的类比如CatchMessage你用不用无所谓

不过如果你曾经看过或用过IMessageFilter的话,应该看得明白是怎么回事.

那些API你不用管它,我只是试用试用的,类中并没有用它们.
水如烟 2008-04-23
  • 打赏
  • 举报
回复
哈,现在很少写注释了.
我只是变量和函数名称上尽量的写清楚.
兔子-顾问 2008-04-23
  • 打赏
  • 举报
回复
下载了。没有一行注释……
firein 2008-04-22
  • 打赏
  • 举报
回复
水如烟 2008-04-22
  • 打赏
  • 举报
回复
水如烟 2008-04-22
  • 打赏
  • 举报
回复
凡是加NameSpace的,就是项目文件,不加的,是示例文件.

后面会打包上传.放在这也算寄存吧,很多代码我是写了就丢.
_NET2004 2008-04-22
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 wuyazhe 的回复:]
比较凌乱。你肯定会整理一次放到自己的blog里的。我回头看你blog.
[/Quote]


我也这样想哦
兔子-顾问 2008-04-22
  • 打赏
  • 举报
回复
比较凌乱。你肯定会整理一次放到自己的blog里的。我回头看你blog.
加载更多回复(23)

16,549

社区成员

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

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