PostMessage WM_CLOSE返回1

时间:2016-09-06 19:54:59

标签: vb.net winapi

我有以下功能:

Public Function CloseWindow(ByVal uHandle As Int32) As Boolean

    Dim iRet As Integer = PostMessage(uHandle, WM_CLOSE, 0, 0)

    Return CBool(iRet = 0)

End Function

运行时的功能如下:

    Dim iRet As Integer = PostMessage(uHandle, WM_CLOSE, 0, 0)

    If (iRet <> 0) Then
        Dim iLastErr As Integer = Err.LastDllError()
        'This always returns 0, so I don't know what to make up of it
        Stop
    End If

在某些情况下,iRet会返回1.

有人可以告诉我这可能意味着什么吗?

1 个答案:

答案 0 :(得分:1)

WM_CLOSE已发送消息,而非已发布消息。 已发布消息无法向海报返回值。

PostMessage()的返回值是BOOL,它只是指示消息是否已成功添加到窗口的消息队列中,而不是消息是否实际处理过。

如果您需要处理LRESULT返回的WM_CLOSE值,以指示是否接受了关闭,则需要使用SendMessage()(或相关函数)而不是{{ 1}}。

如果窗口归发送PostMessage()的线程所有,您可以使用WM_CLOSE实际关闭它(除非其窗口过程将DestroyWindow()消息传递给WM_CLOSE },在这种情况下,它将为您调用DefWindowProc()。但是如果窗口由另一个线程拥有,那么你所能做的就是发送DestroyWindow()让它自己关闭。