Получить границы WindowRef?

Я пытаюсь найти Carbon API, который может дать мне WindowRef из идентификатора окна, и с этой ссылкой окна я хочу иметь границы?

РЕДАКТИРОВАТЬ: я нашел API extern WindowRef HIWindowFromCGWindowID(CGWindowID inWindowID); Но я не могу его использовать. Я включил углеродный заголовок, а также добавил его структуру в проект. Требуется ли что-то еще для HI apis?

Любая помощь приветствуется. Спасибо за уделенное время.


person RLT    schedule 06.07.2011    source источник


Ответы (1)


Следующее должно сделать -

        CGRect rect;
        uint32_t windowid[1] = {windowID};
        CFArrayRef windowArray = CFArrayCreate ( NULL, (const void **)windowid, 1 ,NULL);
        CFArrayRef windowsdescription = CGWindowListCreateDescriptionFromArray(windowArray);
        CFDictionaryRef windowdescription = (CFDictionaryRef)CFArrayGetValueAtIndex ((CFArrayRef)windowsdescription, 0);
        if(CFDictionaryContainsKey(windowdescription, kCGWindowBounds))
        {
            CFDictionaryRef bounds = (CFDictionaryRef)CFDictionaryGetValue (windowdescription, kCGWindowBounds);
            if(bounds)
            {
                CGRectMakeWithDictionaryRepresentation(bounds, &rect);
            }
        }
        CFRelease(windowArray);
person RLT    schedule 06.07.2011
comment
Следующая строка удаляет один из массивов, возвращая массив с одним словарем в нем: CFArrayRef windowArray = CGWindowListCopyWindowInfo(kCGWindowListOptionIncludingWindow, windowID); Кроме того, в вашем примере происходит утечка массива описаний (отсутствует CFRelease). Кроме этого, это решило мою проблему. Модель [фрейм NSWindow] обновляется асинхронно. Если вы пытаетесь присоединить дочернее окно к родительскому окну, которое перетаскивал пользователь, это единственный способ получить текущее значение от оконного менеджера. Спасибо! - person D.McG.; 15.05.2014