![]() |
|
|
![]()
|
|
| Dart |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 26.6.2006 Где: Саратов, РФ Репутация: 2 Всего: 2 |
Здравствуйте, народ!
У меня такой вопрос - думал, просто будет, а получилось Итак, есть CPropertySheet, у которой мне вместо страницы на основе диалога просто необходимо сделать страницу на основе окна своего класса (надо делать динамически, а CPropertyPage свой вид сосет из ресурсов Пытался и подменить Create, и сначала создать окно, а потом уже делать AddPage - ничего не выходит Может, кто с этим разбирался, подстажите, плз --------------------
ЦитатаЛюблю смотреть, как другие работают Дж. К. ДжеромСайт: www.ecosigma.ruПочта: [email protected] |
|||
|
||||
| Gremlin |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 119 Регистрация: 28.8.2006 Репутация: нет Всего: нет |
Собственно у меня таже проблема я хочу чтоб приложение диалогового окна сразу было со вкладками
но МФС не дает выбрать базовый класс CProrertySheet на начальной стадии создания проекта а предлагает только CDialog! вот тоже репу чешу |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Dart, сделай пустой шаблон страницы, а потом накидай туда контролов динамически.
Gremlin, у тебя вообще не проблема. Какая разница, что тебе там визард сгенерил? Замени на CPropertySheet руками, и все дела. -------------------- ... |
|||
|
||||
| Dart |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 26.6.2006 Где: Саратов, РФ Репутация: 2 Всего: 2 |
Earnest, да так я тоже умею, и сейчас именно так у меня и сделано. Может я и извращенец, но мне хотелось бы разобраться, возможно ли это в принципе без диалогов. Все дело в том, что по некоей причине не хочу выкладывать диалог в ресурсы. 2 Gremlin, замени визардовский Cчто-тoDlg на свой - и будет тебе счастье. В самом деле, в Dialog Based самому приложению абсолютно без разницы, что ты вызовешь в InitInstance Это сообщение отредактировал(а) Dart - 28.8.2006, 16:32 --------------------
ЦитатаЛюблю смотреть, как другие работают Дж. К. ДжеромСайт: www.ecosigma.ruПочта: [email protected] |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
API предполагает, что шаблон страницы обязан существовать, хотя и необязательно в виде ресурса.
Т.е. можно генерировать шаблон динамически. Но, ИМХО, овчинка не стоит выделки: нужно использовать конструктор CPropertyPage без параметров, а потом вручную заполнить m_psp, а перед этим - сгенерировать шаблон DLPTEMPLATE. Это возможно, но довольно геморройно, поверь. Так что наиболее простой способ - пустой шаблон + динамическое накидывание контролов. Честно говоря, я не очень понимаю, что ты имеешь против ресурсов. Я, напротив, если у меня хотя бы 2 контрола как-то должны взаимо располагаться, обычно рисую шаблон, чтобы не морочиться с расчетом Layout'а. Конечно, если окно в принципе генерируется динамически (с разным числом разных контролов), то от динамического создания шаблона никуда не денешься. -------------------- ... |
|||
|
||||
| Dart |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 26.6.2006 Где: Саратов, РФ Репутация: 2 Всего: 2 |
Да ничего я против ресурсов не имею, просто поспорили с одним челом, вот и пришлось разбираться
но в принципе твоя идея неплоха - сейчас попробую реализовать --------------------
ЦитатаЛюблю смотреть, как другие работают Дж. К. ДжеромСайт: www.ecosigma.ruПочта: [email protected] |
|||
|
||||
| Gremlin |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 119 Регистрация: 28.8.2006 Репутация: нет Всего: нет |
Собственно я так догадался и попытался во всем проекте заменил CDialog на CPropertySheet
но где мне создать CPropertySheet PropertySheet; и использовать PropertySheet.AddPage в функции OnInitDialog? |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Gremlin, нет, AddPage нужно делать до запуска DoModal. Лучше всего написать свой класс, производный от CPropertySheet (ну или заменить базовый класс на CPropertySheet в том, что тебе сгенерировал визард), а страницы создать и добавить в его конструкторе. Сами страницы лучше сделать членами класса твоего PropertySheet, а ни в коем случае не делать автоматическими переменными - они должны жить и умереть вместе с диалогомю
-------------------- ... |
|||
|
||||
| Gremlin |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 119 Регистрация: 28.8.2006 Репутация: нет Всего: нет |
Не я вобщем то пересмотрел концепцию своей программы и теперь из родительского окна Cdialog вызывается новое окно диалог CPropertyPage со вкладками так будет правильней!
Но вот у меня чото мучает довольно банальный вопрос пПочему в свойствах например Toolbox GroupBox нету бэкграунд фона? Тоесть каким образом мне сделать внешний фон как в форме так и под отдельным тулбоксом? |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Кто такой GroupBox - знаю, а вот кто такой ToolBox?
И вообще, заведи отдельную тему, не надо все в кучу валить. -------------------- ... |
|||
|
||||
| Gremlin |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 119 Регистрация: 28.8.2006 Репутация: нет Всего: нет |
Ешо собственно вопрос по поводу CPropertySheet;
Это диалоговое окно имеет по умолчанию четыре кнопки! Вопрос №1: Какой идентификатор у кнопки Применить? Вопрос №2: Как мне найти обработчик события данной кнопки? ибо для IDOK я используюю хитрый обработчик вида
а Применить должен производить практически теже действия но не закрывать окно! по умолчанию он неактивен! Вопрос №3: Как удалить кнопку Справка? Вопрос №4: В кнопках по умолчанию используется русский язык а когда я создаю и пытаюсь на руссом написать валезают казерябы В консольных программах я использовал CharToOem надеюсь здесь каждый Caption не надо прогонять через эту функцию Подскажите как сделать грамотно!!! ps В Toolbox есть Group Box! Это сообщение отредактировал(а) Gremlin - 30.8.2006, 07:08 |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
На то есть Spy. НО в принципе он тебе не нужен. Концепция "блокнота" такова, что обработчика для всего окна нет (т.е. его можно вкрутить, но это требует некоторых извращений). Вместо этого есть обработчики OnOK и OnApply у страниц (виртуальные функции). И вообще, все обработка происходит по-странично. Что обычно довольно удобно. Так что изучай интрефейс CPropertyPage. По-умолчанию, OnOK вызывает OnApply и закрывает окно. Чтобы кнопка Apply стала активной, нужно вызывать метод страницы SetModified. По нажатию кнопки Apply вызывается OnApply, а потом кнопка снова "засеривается" Кажется, у проперти-щита есть флаг, точно не помню.
Не поняла. Но язык ресурса (страницы) должен быть русским - это выставляется в ее свойствах. Никаких CharToOem не нужно. GroupBox, по моему и так прозрачный... Не поняла проблемы. -------------------- ... |
|||
|
||||
| Gremlin |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 119 Регистрация: 28.8.2006 Репутация: нет Всего: нет |
такс с языком разобрался
а вот удалить справку так и не смог что странно при точно такомже создании окна со вкладками в первом случае кнопки Справка небыло а сейчас появилось гыгы
это нужно сделать до DoModal()? или в классах вкладок? |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
НЕТ, получишь ASSERT. Это принято делать после появления каких-то изменений. Например, ловишь изменения в каком-нибудь поле и вызываешь SetModified. Ленивый потому что. Я же сказала, флаги посмотри.
-------------------- ... |
|||
|
||||
| Gremlin |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 119 Регистрация: 28.8.2006 Репутация: нет Всего: нет |
ок сибо чото я тормознул
получилось вот так PropertySheet.m_psh.dwFlags &=~PSP_HASHELP тока кнопка не исчезла вернее она потухла а по поводу кнопки применить я должен переопределить onApllay и onOk в последней надо вызывать onAplay и закрывать окно я правильно понял? Это сообщение отредактировал(а) Gremlin - 30.8.2006, 14:57 |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |