我有以下功能:
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.
有人可以告诉我这可能意味着什么吗?
答案 0 :(得分:1)
WM_CLOSE
是已发送消息,而非已发布消息。 已发布消息无法向海报返回值。
PostMessage()
的返回值是BOOL
,它只是指示消息是否已成功添加到窗口的消息队列中,而不是消息是否实际处理过。
如果您需要处理LRESULT
返回的WM_CLOSE
值,以指示是否接受了关闭,则需要使用SendMessage()
(或相关函数)而不是{{ 1}}。
如果窗口归发送PostMessage()
的线程所有,您可以使用WM_CLOSE
实际关闭它(除非其窗口过程将DestroyWindow()
消息传递给WM_CLOSE
},在这种情况下,它将为您调用DefWindowProc()
。但是如果窗口由另一个线程拥有,那么你所能做的就是发送DestroyWindow()
让它自己关闭。