一个窗口已经在内部跟踪它的孩子,所以你只需要利用它。如果您想向一个窗口的所有子窗口发送消息,那么您只需要递归地遍历该窗口的所有子窗口,将消息发送给每个子窗口。
起点是GetTopWindow
函数,它返回 Z 顺序顶部的子窗口。GetNextWindow
然后,您通过调用函数遍历子窗口。
MFC 实际上包含一个执行此操作的方法,称为SendMessageToDescendants
. 如果您更喜欢这些语义,您可以自己编写等价物,并用 替换SendMessage
。PostMessage
void PostMessageToDescendants(HWND hwndParent,
UINT uMsg,
WPARAM wParam,
LPARAM lParam,
BOOL bRecursive)
{
// Walk through all child windows of the specified parent.
for (HWND hwndChild = GetTopWindow(hwndParent);
hwndChild != NULL;
hwndChild = GetNextWindow(hwndChild, GW_HWNDNEXT))
{
// Post the message to this window.
PostMessage(hwndChild, uMsg, wParam, lParam);
// Then, if necessary, call this function recursively to post the message
// to all levels of descendant windows.
if (bRecursive && (GetTopWindow(hwndChild) != NULL))
{
PostMessageToDescendants(hwndChild, uMsg, wParam, lParam, bRecursive);
}
}
}
参数与PostMessage
函数相同,除了最后一个:bRecursive
. 这个参数的意思就是它的名字所暗示的。如果TRUE
,子窗口的搜索将是递归的,这样消息将被发送到父窗口的所有后代(它的孩子,它的孩子的孩子等)。如果FALSE
,则该消息将仅发布给其直系子级。