仅消息窗口的生存期是多少?

时间:2019-08-04 19:11:30

标签: excel vba windows winapi message-queue

我正在创建一个消息窗口,以在与Excel应用程序主窗口不同的队列中接收计时器消息。然后,我可以对该窗口进行子类化,而无需大量无关的内容通过我的(缓慢的)VBA消息循环。


据我了解,我可以将hWndParent参数和WM_CHILD样式一起使用,以创建作为主窗口句柄子级的窗口。根据{{​​3}}:

  

如果指定的窗口是父窗口或所有者窗口,则DestroyWindow   自动销毁关联的子窗口或拥有的窗口   破坏父窗口或所有者窗口。

因此,我想提供Application.hWnd作为父级将意味着当我关闭Excel时,所有关联的窗口也将被删除。

但是DestroyWindow docs需要HWND_MESSAGE作为父项,因此我不确定何时/是否将其清除?


FWIW,这是我用来生成/查找窗口的代码(我的程序可能会丢失其状态,因此我不能依赖于将句柄存储在变量中)

Public Function getMessageWindow(ByVal windowName As String) As hWnd

    Const className As String = "Static"
    Dim result As hWnd
    result = ApiFindWindow(className, windowName)
    If result.value.address = 0 Then 'not found
        Const HWND_MESSAGE As Long = (-3&)
        result = APiCreateWindowEx(0, className, windowName, 0, 0, 0, 0, 0, HWND_MESSAGE, 0, 0, 0)
    End If
    getMessageWindow = result

End Function

0 个答案:

没有答案
相关问题