Как получить внука родительского окна или сына внука

У меня есть класс главного окна, называемый, например, файл, и каждое окно файла имеет несколько дочерних окон, например, страниц, и каждая страница имеет несколько дочерних окон, например, текстовые поля и т. Д., И т. Д.
Как получить дескриптор файла, из дескриптора текстового поля или одного из дочерних окон текстового поля.
Есть функция GetParent(), но он возвращает родительский уровень на один уровень выше, и я ищу такую ​​функцию, которая возвращает окно верхнего уровня.
Я написал свой код, который выполняет действие следующим образом, но мой вопрос, есть ли системная функция в win32?

HWND GetTopLevelWindow(HWND hChild)
{
    HWND topParent = 0;
    HWND h1 = hChild;
    HWND h2;

    while(topParent == 0)
    {
        h2 = GetParent(h1);
        if(h2 == 0)
            topParent = h1;
        else
            h1 = h2;
    }
    return topParent;
}

1 ответ

Решение

Вам нужно использовать GetAncestor с аргументом GA_ROOT, Например

HWND topParent = GetAncestor(hChild, GA_ROOT);
Другие вопросы по тегам