| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > Как определить видимую часть окна? |
| Автор: voov 18.8.2008, 13:16 |
| Во время отрисовки окна нужно определить его видимую часть. GetClientRect - возвращает клиентскую часть окна, но не всегда эта часть полностью видима, иногда часть клиентской области перекрыта и в таких случаях мне нужно нарисовать маркер. Так вот как узнать какая часть клиентской области окна видимая? |
| Автор: Earnest 18.8.2008, 16:35 |
| У CPaintDC можно спросить GetClipBox - возвращаемое значение дает некоторое представление, перекрыта ли часть окна. Если это так, можно дальше спросить GetClipRgn, если тебе нужна точная раскладка по прямоугольникам. |
| Автор: voov 20.8.2008, 10:57 |
| Че-то не получается... GetClipBox всегда возвращает NULLREGION. Нужно както по другому определять. Может не достаточно обрисовал ситуацию, объясню подробнее. Несколько окон нахидятся в перемещаемой панели. Панель можно таскать мышкой на границы - изменять ее размер. При этом изменяется и размер дочерних окон. Окна можно уменьшать до определенного момента (есть минимальный размер), после которого размер панели все еще уменьшается, а дочерние окна остаются минимального размера, но видны не полностью. Например (меня интересует именно эта ситуация), не видна нижняя часть окна. |
| Автор: voov 20.8.2008, 11:52 |
| Пока сделал через PtVisible. Определяю видима ли нижняя левая точка окна. Если нет, то нахожу самую нижнюю видимую точку и от нее рисую маркер. Работает, но хотелось бы более элегантное решение. |
| Автор: Earnest 20.8.2008, 11:59 |
| Ясно, окно не перекрыто, а просто отсечено родителем... Хм... А попробуй проверить WindowRect и как он соотносится с родительским? А еще, ведь эта ситуация возникает в какой-то определенный момент (панель уменьшается), и это делает именно твой код (ну не твой, но доступный тебе). Нельзя ли в этот момент поставить флаг? |
| Автор: Earnest 20.8.2008, 13:56 | ||||
Дык кто просит? Дочернее окно не может проверить WindowRect свой и родителя?
Насчет флага, мне уже не кажется мысль такой умной. Тем более все равно нужно искать границы. А всять два ректа и пересечь - делов-то... |
| Автор: voov 20.8.2008, 14:33 |
| Пересек. Получилось то, что нужно и довольно красиво. Earnest, спасибо. |