Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамическое добавление PropertyPage, Вычисление размеров PropertySheet 
:(
    Опции темы
constN
Дата 10.6.2008, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вопрос вот в чем.
Я на PropertySheet динамически добавляю страницы(по кнопке из самой PropertySheet). 
Не смог найти как перерисовать PropertySheet, так чтобы была видна вся новая страница(размер поменялся).
Если диалог закрыть и открыть, то PropertySheet подхватывает новые размеры. Как это сделать динамически.
Может мессага какая кидается при инициализации? Среди методов ничего похожего не нашел.

В общем, если кто знает подскажите пожалуйста.
PM MAIL   Вверх
Earnest
Дата 10.6.2008, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Не совсем поняла - так новая страница не появляется? Тогда при чем тут размер?


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


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


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

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



Если перерисовка поможет, то - Invalidate()
PM MAIL   Вверх
constN
Дата 10.6.2008, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Да нет, новая страница появляется (с этим все ОК).
Просто когда добавляешь с десяток новых страниц их закладки (не помню, как они по-научному называются), выстраиваются сверху в 3-4 ряда. Естестественно они занимают место. А размер PropertySheet остается как в момент открытия диалога. Поэтому видимая рабочая область PropertyPage урезается снизу. Кода диалог закроешь и откроешь снова размер PropertySheet становиться новый (с учетом новых Page) - и все отображается снова красиво. Я так понимаю размер PropertySheet высчитывается (в зависимости от размеров PropertyPage) когда-то в момент инициалицации PropertySheet.

Руками вычислять размер PropertySheet (так чтобы красиво отображались PropertyPage) в момент добавления не хотелось-бы (выдь факт, что PropertySheet умеет это делать самостоятельно).
Вариант сделать чтобы закладки выстраивались в линию с возможностью прокрутки не предлагать - так постановщик не хочет.

Вопрос - как пересчитывать размер PropertySheet в зависимости от размера  PropertyPage когда диалог открыт. Может событие какое возникает, типа Refresh, или Message какая кидается в систему, которая дает команду перерисовать PropertySheet с учетом PropertyPage?

Попытался объяснить попонятнее.

PM MAIL   Вверх
Earnest
Дата 10.6.2008, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Ясно...
Есть сообщение PSM_RECALPAGESIZES, сама не пробовала, но вроде по описание это оно:
Цитата

When a property sheet is created, it is sized to fit its initial collection of pages. In order to maintain compatibility with previous versions of the common controls, property sheets and wizards do not automatically resize themselves when pages are subsequently added or removed. With common controls version 5.80 and later, applications should send a PSM_RECALCPAGESIZES message after adding or removing pages with PSM_ADDPAGE, PSM_INSERTPAGE, PSM_REMOVEPAGE, or their equivalent macros. It ensures that the property sheet is properly sized for its current collection of pages. If this message is not sent, some property sheet pages may be truncated or too large.




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


Новичок



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

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



Спасибо Earnest, это ОНО.
пришлось правда добавить
Код

#define PSM_RECALCPAGESIZES     (WM_USER + 136)

иначе компилятор ругался.

Итоговый ответ - после PageAdd() делаем:
Код

SendMessage(PSM_RECALCPAGESIZES,0,0);


Еще раз спасибо за оперативную помощь.
PM MAIL   Вверх
Earnest
Дата 11.6.2008, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(constN @  10.6.2008,  15:27 Найти цитируемый пост)
пришлось правда добавить

Ой! Оно ведь определено в WinAPI - нужно просто включить CommCtrl.h или CommDlg.h... или прямо PrSht.h.
А то, что ты сделал, не очень хороший путь...



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


 




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


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

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