Windows消息的Result属性是什么意思,何时以及如何使用它?

时间:2013-11-13 18:35:43

标签: c# .net vb.net wndproc windows-messages

Result属性含义:

  

指定响应处理返回到窗口的值   消息

MSDN不再说了: http://msdn.microsoft.com/en-us/library/system.windows.forms.message.result%28v=vs.110%29.aspx

我将在此问题Trying to write a better WndProc Handling中注明用户@ Idle_Mind 中的引用词:

  

您可以设置Result()属性以更改邮件的方式   处理。

它就像一个winapi函数返回成功值?零=真,非零=假,或者是什么?

有人可以解释我的真正意义是什么意味着该属性的价值,我需要使用这个值,并向我展示一个代码示例,说明我如何使用它处理来自wndproc子的消息?

  

更新:

我正在尝试处理WM_CREATE消息的示例...

Protected Overrides Sub WndProc(ByRef m As Message)

    Select Case m.Msg

        Case &H1 ' WM_CREATE
             m.Result = -1

    End Select

    MyBase.WndProc(m)

End Sub

3 个答案:

答案 0 :(得分:4)

我取决于消息。根据API参考,它与特定消息绑定。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms644950%28v=vs.85%29.aspx

E.g:

  

返回值

     

如果应用程序处理此消息,则返回零。

http://msdn.microsoft.com/en-us/library/windows/desktop/dd145213%28v=vs.85%29.aspx

它可以用作标志,表示该消息不需要进一步出席。

如果您的应用程序处理,即处理消息,则结果为0。

答案 1 :(得分:4)

每个窗口消息(WM_CREATE,WM_DESTROY,WM_PAINT,WM_USER等等)都由某事发送。大多数消息都是由Windows发送的,以响应某些用户交互或某些API调用。其他的由第三方代码发送(例如,当您调用Win32 API SendMessage时,它是直接发送消息的SendMessage的调用者)。在任何情况下,消息的发送者可能都希望得到回应。预期的响应取决于消息的发送者和消息类型。

在大多数情况下,您可能希望遵循Microsoft为窗口消息定义的规则。例如,在WM_CREATE的文档中,它说:

  

如果应用程序处理此消息,则应返回零以继续创建窗口。如果应用程序返回-1,则窗口将被销毁,CreateWindowEx或CreateWindow函数将返回NULL句柄。

处理WM_CREATE消息时,应返回上面定义的适当值。处理其他消息时,您应该返回文档中有关该消息的任何内容。在处理第三方消息(如WM_USER)时,第三方应明确指出其期望的内容。

答案 2 :(得分:2)

一个典型的例子是WM_NCHITTEST消息,当系统想要知道鼠标在您的表单上的位置时,它会传递给您的应用程序,以便它可以适当地更改光标并知道如何对用户点击做出反应拖再拖。例如,通过更改m.Result,您可以通过告诉系统鼠标实际上没有超过该特定边缘来阻止窗体在特定方向上调整大小,从而防止拖动并且不会将光标更改为调整大小。