0

如何获取有关特定方法的特定消息?

我看过一些例子,人们使用“ref”,但我不明白。

例如,在 delphi 中,我的函数(方法)必须在 Main Form 类中声明,并且在声明旁边我必须放置消息

type
  TForm1 = class(TForm)
    ...
  protected
    procedure MessageHandler(var Msg:Tmessage);Message WM_WINSOCK_ASYNC_MSG;
end;

我在 C# 中需要这个,所以我可以在我的应用程序中使用 WSAAsyncSelect

用赏金 550 声望检查>我的其他问题<以了解我的意思

4

2 回答 2

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);
}
于 2009-04-19T09:06:20.317 回答
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);
        }
    }

如果我误解了,请说 - 但我认为你最好避免这种低级方法,并描述你想要实现的目标- 即它可能.Invoke/.BeginInvoke更合适。

于 2009-04-19T09:10:41.417 回答