如何获取特定方法的特定消息?
我见过一些例子,人们使用“ref”,但我不明白。
例如,在delphi中,我的函数(方法)必须在Main Form类中声明,并且在我必须放置消息的声明旁边
type
TForm1 = class(TForm)
...
protected
procedure MessageHandler(var Msg:Tmessage);Message WM_WINSOCK_ASYNC_MSG;
end;
我需要在C#中使用它,所以我可以在我的应用程序中使用WSAAsyncSelect
使用赏金550的声望检查>my other Question<以了解我的意思
答案 0 :(得分:7)
您可以覆盖控件(例如表单)上的WndProc方法。
WndProc接受对消息对象的引用。 C#中的ref参数类似于Delphi中的var参数。消息对象具有包含消息类型的Msg属性,例如(来自MSDN):
protected override void WndProc(ref Message m)
{
// Listen for operating system messages.
switch (m.Msg)
{
// The WM_ACTIVATEAPP message occurs when the application
// becomes the active application or becomes inactive.
case WM_ACTIVATEAPP:
// The WParam value identifies what is occurring.
appActive = (((int)m.WParam != 0));
// Invalidate to get new text painted.
this.Invalidate();
break;
}
base.WndProc(ref m);
}
答案 1 :(得分:5)
在.NET winforms中,所有消息都转到WndProc
,因此您可以覆盖:
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_WINSOCK_ASYNC_MSG)
{
// invoke your method
}
else
{
base.WndProc(ref m);
}
}
如果我误解了,请说 - 但我认为你最好避免使用这种低级方法,并描述你想要实现的内容 - 即它可能是{{1} } / .Invoke
更合适。