Поиск:

Ответ в темуСоздание новой темы Создание опроса
> определить размеры видимой области диалога 
:(
    Опции темы
_hunter
  Дата 5.10.2006, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



Добрый день.

Подскажите как определить размеры видимой части диалога (CDialogBar). Т.е. те размеры, которые имеют полосы прокрутки.

С уважением...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Nastya
Дата 5.10.2006, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 27.3.2002
Где: Мариуполь

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



Сорьки, не совсем понятно какие размеры тебе нужны? И в каком месте? 


--------------------
Что бы понять рекурсию, надо понять рекурсию

"Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор
PM MAIL   Вверх
_hunter
Дата 5.10.2006, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



Возьмем для примера браузер.
видимая его область ограничена размерами экрана (если окно не максимизировано -- меньше). А полные (не знаю как они привильно называются) размеры -- несколько килопикселей (при больших сраницах).
Вот мне бы хотелось получить эти размеры (в обработчике WM_SIZE). Потому как GetWindow/Client Rect возвращают полные размеры.


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
0x07L
Дата 5.10.2006, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 10.6.2006
Где: Москва

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



::GetScrollRange ?
PM MAIL   Вверх
_hunter
Дата 5.10.2006, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



не подходит. я вызываю SetScrollInfo для установки SCROLLINFO::nMin / nMax основываясь на полных размерах...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Earnest
Дата 6.10.2006, 07:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



А откуда в DialogBar берутся "лишние" размеры, что приходится делать скроллинг? Если ты создаешь по шаблону, а потом сам уменьшаешь размер до какого-то значения, то исходный размер можно взять из шаблона, только не забудь пересчитать из диалоговых единиц в пикселы. Другой вариант - если ты генеришь контролы вручную - тогда сам определяй по дороге, сколько места тебе нужно.
Можно еще посмотреть как это реализовано в CFormView.


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


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



там динамичские по размеру контролы лежат.
созаю вручную.
определять по дороге пытался. но, похоже, парент автоматом ресайзится под размеры чилда. в результате размеры получаю неправильные.
на CFormView посмотрю...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Earnest
Дата 6.10.2006, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Точно, CFormView делает так: сначала создает диалог по шаблону как получится (невидимый), спрашивает его размеры, их использует для установки диапазонов скроллинга, а потом загоняет свои размеры в заданные:

Код

 CFormView::Create(...)
                  
    // create a modeless dialog
    if (!CreateDlg(m_lpszTemplateName, pParentWnd))
        return FALSE;

                //...

    CRect rectTemplate;
    GetWindowRect(rectTemplate);
    SetScrollSizes(MM_TEXT, rectTemplate.Size());

    // initialize controls etc
    if (!ExecuteDlgInit(m_lpszTemplateName))
        return FALSE;

    // force the size requested
    SetWindowPos(NULL, rect.left, rect.top,
        rect.right - rect.left, rect.bottom - rect.top,
        SWP_NOZORDER|SWP_NOACTIVATE);

    // make visible if requested
    if (dwRequestedStyle & WS_VISIBLE)
        ShowWindow(SW_NORMAL);


А у тебя как диалог-бар создается?
Цитата(_hunter @  6.10.2006,  11:26 Найти цитируемый пост)
похоже, парент автоматом ресайзится под размеры чилда

Это про что?
Если у тебя есть шаблон, можно сделать так: переопределить Create, сначала вызвать стандартный, потом запомнить полученный размер (для скроллинга) и затем ужать до заданных размеров.



--------------------
...
PM   Вверх
v2v
Дата 2.4.2007, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

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



Пробую сделать скролл для FormView.
Код

int FormViewBase::OnCreate(LPCREATESTRUCT lpcs)
{
    CRect rect;
       GetWindowRect(rect);
       SetScrollSizes(MM_TEXT, rect.Size());

    return 1;
}


Но он мне создаёт скролл с постоянным размером(позволяет открывать окошко на 1 см по вертикали и 1 см по горизонтали), который не изменяется при уменьшении/увеличение размера окна Это если я в свойствах - Border указываю Dialog Frame, если указывать None, то вообще не появляется никаких скролов!.

спсб.



--------------------
PM   Вверх
Earnest
Дата 2.4.2007, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Что просишь, то и получаешь. Судя по коду, ты устанавливаешь пределы скроллинга равными области окна. Минус заголов, бордеры, сами полосы - вот и получаешь свой сантиметр.
ScrollSizes - это размеры полной виртуальной области.
Кроме того, Форм-вью сам прекрасно устанавливает размеры скроллинга, согласно диалоговому ресурсу, по которому он создается.


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


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

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



вот это я бы выдумывал, если бы создавал он сам скролы... В том то и проблема что почему то скролы не появляются!


--------------------
PM   Вверх
Earnest
Дата 2.4.2007, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Так может все и так влазит?
Я давно не работала с Форм-вью, но у меня осталось ощущение, что там все "само"... Может, что-то не так делаешь?


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


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

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



да, нашёл ошибочку.... оно таки само скролы рисует.


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


 




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


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

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