![]() |
|
|
![]()
|
|
| voov |
|
|||
![]() Патамушта мы пилоты ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 29.11.2007 Репутация: 8 Всего: 8 |
Во время отрисовки окна нужно определить его видимую часть.
GetClientRect - возвращает клиентскую часть окна, но не всегда эта часть полностью видима, иногда часть клиентской области перекрыта и в таких случаях мне нужно нарисовать маркер. Так вот как узнать какая часть клиентской области окна видимая? |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
У CPaintDC можно спросить GetClipBox - возвращаемое значение дает некоторое представление, перекрыта ли часть окна. Если это так, можно дальше спросить GetClipRgn, если тебе нужна точная раскладка по прямоугольникам.
-------------------- ... |
|||
|
||||
| voov |
|
|||
![]() Патамушта мы пилоты ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 29.11.2007 Репутация: 8 Всего: 8 |
Че-то не получается... GetClipBox всегда возвращает NULLREGION.
Нужно както по другому определять. Может не достаточно обрисовал ситуацию, объясню подробнее. Несколько окон нахидятся в перемещаемой панели. Панель можно таскать мышкой на границы - изменять ее размер. При этом изменяется и размер дочерних окон. Окна можно уменьшать до определенного момента (есть минимальный размер), после которого размер панели все еще уменьшается, а дочерние окна остаются минимального размера, но видны не полностью. Например (меня интересует именно эта ситуация), не видна нижняя часть окна. |
|||
|
||||
| voov |
|
|||
![]() Патамушта мы пилоты ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 29.11.2007 Репутация: 8 Всего: 8 |
Пока сделал через PtVisible. Определяю видима ли нижняя левая точка окна. Если нет, то нахожу самую нижнюю видимую точку и от нее рисую маркер.
Работает, но хотелось бы более элегантное решение. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Ясно, окно не перекрыто, а просто отсечено родителем... Хм...
А попробуй проверить WindowRect и как он соотносится с родительским? А еще, ведь эта ситуация возникает в какой-то определенный момент (панель уменьшается), и это делает именно твой код (ну не твой, но доступный тебе). Нельзя ли в этот момент поставить флаг? -------------------- ... |
|||
|
||||
| voov |
|
|||
![]() Патамушта мы пилоты ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 29.11.2007 Репутация: 8 Всего: 8 |
Об этом думал, но не хочется впутывать родителя в отрисовку дочернего окна. С этой стороны не заходил, зациклился на отрисовке. Можно конечно. Но в этом случае все равно нужно определять самую нижнюю видимую точку в дочернем окне для отрисовки маркера. Можно конечно вместе с флагом и размер видимой области передавать, но тогда уже помоему проще сравнивать WindowRect дечернего окна с родительским. Наверное на этом и остановлюсь. |
|||
|
||||
| Earnest |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Дык кто просит? Дочернее окно не может проверить WindowRect свой и родителя?
Насчет флага, мне уже не кажется мысль такой умной. Тем более все равно нужно искать границы. А всять два ректа и пересечь - делов-то... -------------------- ... |
||||
|
|||||
| voov |
|
|||
![]() Патамушта мы пилоты ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 29.11.2007 Репутация: 8 Всего: 8 |
Пересек. Получилось то, что нужно и довольно красиво.
Earnest, спасибо. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |