Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как определить видимую часть окна? 
V
    Опции темы
voov
Дата 18.8.2008, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Патамушта мы пилоты
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 29.11.2007

Репутация: 8
Всего: 8



Во время отрисовки окна нужно определить его видимую часть.
GetClientRect - возвращает клиентскую часть окна, но не всегда эта часть полностью видима, иногда часть клиентской области перекрыта и в таких случаях мне нужно нарисовать маркер.
Так вот как узнать какая часть клиентской области окна видимая?
PM MAIL   Вверх
Earnest
Дата 18.8.2008, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



У CPaintDC можно спросить GetClipBox - возвращаемое значение дает некоторое представление, перекрыта ли часть окна. Если это так, можно дальше спросить GetClipRgn, если тебе нужна точная раскладка по прямоугольникам.


--------------------
...
PM   Вверх
voov
Дата 20.8.2008, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Патамушта мы пилоты
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 29.11.2007

Репутация: 8
Всего: 8



Че-то не получается... GetClipBox всегда возвращает NULLREGION.
Нужно както по другому определять. 

Может не достаточно обрисовал ситуацию, объясню подробнее. 
Несколько окон нахидятся в перемещаемой панели. Панель можно таскать мышкой на границы - изменять ее размер. При этом изменяется и размер дочерних окон. Окна можно уменьшать до определенного момента (есть минимальный размер), после которого размер панели все еще уменьшается, а дочерние окна остаются минимального размера, но видны не полностью. Например (меня интересует именно эта ситуация), не видна нижняя часть окна.
PM MAIL   Вверх
voov
Дата 20.8.2008, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Патамушта мы пилоты
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 29.11.2007

Репутация: 8
Всего: 8



Пока сделал через PtVisible. Определяю видима ли нижняя левая точка окна. Если нет, то нахожу самую нижнюю видимую точку и от нее рисую маркер.
Работает, но хотелось бы более элегантное решение.
PM MAIL   Вверх
Earnest
Дата 20.8.2008, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Ясно, окно не перекрыто, а просто отсечено родителем... Хм...
А попробуй проверить WindowRect и как он соотносится с родительским?
А еще, ведь эта ситуация возникает в какой-то определенный момент (панель уменьшается), и это делает именно твой код (ну не твой, но доступный тебе). Нельзя ли в этот момент поставить флаг?


--------------------
...
PM   Вверх
voov
Дата 20.8.2008, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Патамушта мы пилоты
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 29.11.2007

Репутация: 8
Всего: 8



Цитата(Earnest @  20.8.2008,  11:59 Найти цитируемый пост)
А попробуй проверить WindowRect и как он соотносится с родительским?

Об этом думал, но не хочется впутывать родителя в отрисовку дочернего окна.

Цитата(Earnest @  20.8.2008,  11:59 Найти цитируемый пост)
Нельзя ли в этот момент поставить флаг?

С этой стороны не заходил, зациклился на отрисовке. Можно конечно. Но в этом случае все равно нужно определять самую нижнюю видимую точку в дочернем окне для отрисовки маркера.
Можно конечно вместе с флагом и размер видимой области передавать, но тогда уже помоему проще сравнивать WindowRect дечернего окна с родительским. Наверное на этом и остановлюсь.
PM MAIL   Вверх
Earnest
Дата 20.8.2008, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Цитата(voov @  20.8.2008,  14:24 Найти цитируемый пост)
Об этом думал, но не хочется впутывать родителя в отрисовку дочернего окна.

Дык кто просит? Дочернее окно не может проверить WindowRect свой и родителя?

Цитата(voov @  20.8.2008,  14:24 Найти цитируемый пост)
 Но в этом случае все равно нужно определять самую нижнюю видимую точку в дочернем окне для отрисовки маркера.

Насчет флага, мне уже не кажется мысль такой умной. Тем более все равно нужно искать границы. А всять два ректа и пересечь - делов-то...



--------------------
...
PM   Вверх
voov
Дата 20.8.2008, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Патамушта мы пилоты
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 29.11.2007

Репутация: 8
Всего: 8



Пересек. Получилось то, что нужно и довольно красиво.
Earnest, спасибо.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0532 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.