![]() |
|
![]() ![]() ![]() |
|
AndreySol |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 19.6.2004 Репутация: 1 Всего: 1 |
Есть обычный диалог, созданный редактором ресурсов, и связанный с ним класс. Для него установлены стили WS_POPUP и WS_CAPTION. Надо использовать этот диалог на закладке TabCtrl.
Пробую сделать примерно так:
диалог нормально отображается на закладке, но к нему нет доступа. Что еще надо доделать \ изменить чтоб окно диалога заработало нормально ? |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Поставь в свойствах ресурса тип Child и создавай сразу как дочерний.
-------------------- ... |
|||
|
||||
AndreySol |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 19.6.2004 Репутация: 1 Всего: 1 |
Ну это я в курсе, вот только это диалоговое окно требуется в двух видах - и как обычный модальный диалог и как диалог на закладке TabCtrl. |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Тогда попробуй перекрыть PreCreateWindow и сменить стиль там. Суть в том, чтобы Windows-окно создавалось с правильным стилем. Не факт, что получится (и что вообще попадешь в PreCreate).
Если нет, то нужно загружать диалог как ресурc (DLGTEMPLATE), ковырять стиль там и создавать через CreateIndirect. -------------------- ... |
|||
|
||||
AndreySol |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 19.6.2004 Репутация: 1 Всего: 1 |
Попробовал, не прокатывает. Похоже PreCreateWindow вызывается только для SDI\MDI окон. |
|||
|
||||
Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
Я реализовал эту задачу следующим образом:
1. В ресурсах создал исходный диалог со стилями, необходимыми для добавления на вкладку, то есть CHILD и все остальное. 2. Создал вспомогательный пустой класс от CDialog, в котором объявил public-переменную исходного диалога. 3. Во вспомогательном диалоге создал дочерний диалог точно так же, как его создавали на вкладке. 4. В том месте, где нужен модальный диалог, создаю экземпляр вспомогательного диалога, в нем легко выполняю инициализацию для исходного диалога, так как он там баблик, делаю DoModal() для вспомогательного диалога. В приложении файл с работающим примером и исходниками. Присоединённый файл ( Кол-во скачиваний: 3 ) ![]() -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Нет, конечно: это зависит исключительно от контектса вызова CreateWindow. Если вызов изнури ВИНАПИ, то PreCreate не вызывается (равно как OnCreate)... Стало быть, остается путь через редакцию шаблона DLGTEMPLATE. Поверь, это несложно совсем - всего-то стиль поменять. Ну, конечно, с помощью вложенного диалога тоже можно, как предложил Dreamer_0x01, но это все немножно через ж. , учитывая, что есть другой путь. -------------------- ... |
|||
|
||||
Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
А для тех, кто в танке, можно пояснить, что нужно для этого сделать? Мне тоже интересно. -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
Earnest |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Нужно загрузить диалоговый ресурс в память, см. DLGTEMPLATE в MSDN. Поменять стили. Создать диалог через CreateIndirect.
Вот кусок кода с оберткой для DLGTEMPLATE и созданием диалога. Там есть лишнее для данной задачи, это чисто для примера:
Добавлено через 3 минуты и 8 секунд После заголовка в DLGTEMPLATE идут поля, так что можно их менять, напихать новых, и т.д. и т.п. Много чего можно... -------------------- ... |
||||
|
|||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |