Поиск:

Ответ в темуСоздание новой темы Создание опроса
> CWnd вместо CPropertyPage 
:(
    Опции темы
Dart
Дата 27.8.2006, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте, народ!

У меня такой вопрос - думал, просто будет, а получилось smile как всегда...
Итак, есть CPropertySheet, у которой мне вместо страницы на основе диалога просто необходимо сделать страницу на основе окна своего класса (надо делать динамически, а CPropertyPage свой вид сосет из ресурсов smile )
Пытался и подменить Create, и сначала создать окно, а потом уже делать AddPage - ничего не выходит smile 
Может, кто с этим разбирался, подстажите, плз
--------------------
ЦитатаЛюблю смотреть, как другие работают
 Дж. К. ДжеромСайт: www.ecosigma.ruПочта: [email protected] 
PM MAIL WWW ICQ   Вверх
Gremlin
Дата 28.8.2006, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Собственно у меня таже проблема я хочу чтоб приложение диалогового окна сразу было со вкладками
но МФС не дает выбрать базовый класс CProrertySheet на начальной стадии создания проекта  а предлагает  только CDialog! вот тоже репу чешу  smile 
PM MAIL   Вверх
Earnest
Дата 28.8.2006, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Dart, сделай пустой шаблон страницы, а потом накидай туда контролов динамически.

Gremlin, у тебя вообще не проблема. Какая разница, что тебе там визард сгенерил? Замени на CPropertySheet руками, и все дела.


--------------------
...
PM   Вверх
Dart
Дата 28.8.2006, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Earnest @  28.8.2006,  15:47 Найти цитируемый пост)
Dart, сделай пустой шаблон страницы, а потом накидай туда контролов динамически.


Earnest, да так я тоже умею, и сейчас именно так у меня и сделано. Может я и извращенец, но мне хотелось бы разобраться, возможно ли это в принципе без диалогов.
Все дело в том, что по некоей причине не хочу выкладывать диалог в ресурсы.

2 Gremlin, замени визардовский Cчто-тoDlg на свой - и будет тебе счастье. В самом деле, в Dialog Based самому приложению абсолютно без разницы, что ты вызовешь в InitInstance

Это сообщение отредактировал(а) Dart - 28.8.2006, 16:32
--------------------
ЦитатаЛюблю смотреть, как другие работают
 Дж. К. ДжеромСайт: www.ecosigma.ruПочта: [email protected] 
PM MAIL WWW ICQ   Вверх
Earnest
Дата 28.8.2006, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



API предполагает, что шаблон страницы обязан существовать, хотя и необязательно в виде ресурса. 
Т.е. можно генерировать шаблон динамически. Но, ИМХО, овчинка не стоит выделки: нужно использовать конструктор CPropertyPage без параметров, а потом вручную заполнить m_psp, а перед этим - сгенерировать шаблон DLPTEMPLATE. Это возможно, но довольно геморройно, поверь. Так что наиболее простой способ - пустой шаблон + динамическое накидывание контролов. 
Честно говоря, я не очень понимаю, что ты имеешь против ресурсов. Я, напротив, если у меня хотя бы 2 контрола как-то должны взаимо располагаться, обычно рисую шаблон, чтобы не морочиться с расчетом Layout'а. Конечно, если окно в принципе генерируется динамически (с разным числом разных контролов), то от динамического создания шаблона никуда не денешься. 


--------------------
...
PM   Вверх
Dart
Дата 28.8.2006, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Да ничего я против ресурсов не имею, просто поспорили с одним челом, вот и пришлось разбираться smile
но в принципе твоя идея неплоха - сейчас попробую реализовать
--------------------
ЦитатаЛюблю смотреть, как другие работают
 Дж. К. ДжеромСайт: www.ecosigma.ruПочта: [email protected] 
PM MAIL WWW ICQ   Вверх
Gremlin
Дата 29.8.2006, 07:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Собственно я так догадался и попытался  во всем проекте заменил CDialog на CPropertySheet
но где мне создать CPropertySheet  PropertySheet; и использовать PropertySheet.AddPage в функции OnInitDialog?
PM MAIL   Вверх
Earnest
Дата 29.8.2006, 07:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Gremlin, нет, AddPage нужно делать до запуска DoModal. Лучше всего написать свой класс, производный от CPropertySheet (ну или заменить базовый класс на CPropertySheet в том, что тебе сгенерировал визард), а страницы создать и добавить в его конструкторе. Сами страницы лучше сделать членами класса твоего PropertySheet, а ни в коем случае не делать автоматическими переменными - они должны жить и умереть вместе с диалогомю


--------------------
...
PM   Вверх
Gremlin
Дата 29.8.2006, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Не я вобщем то пересмотрел концепцию своей программы и теперь из родительского окна Cdialog вызывается новое окно диалог CPropertyPage со вкладками так будет правильней!
Но вот у меня чото мучает довольно банальный вопрос пПочему в свойствах например Toolbox GroupBox нету бэкграунд фона? Тоесть каким образом мне сделать внешний фон как в форме так и под отдельным тулбоксом?
PM MAIL   Вверх
Earnest
Дата 30.8.2006, 06:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Кто такой GroupBox - знаю, а вот кто такой ToolBox?
И вообще, заведи отдельную тему, не надо все в кучу валить.


--------------------
...
PM   Вверх
Gremlin
Дата 30.8.2006, 07:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ешо собственно вопрос по поводу CPropertySheet;
Это диалоговое окно имеет по умолчанию четыре кнопки!
Вопрос №1: Какой идентификатор у кнопки Применить?
Вопрос №2: Как мне найти обработчик события данной кнопки?
ибо для IDOK я используюю хитрый обработчик вида
Код
 if (PropertySheet.DoModal() == IDOK)
{
и здесь сохраняются все переменные диалогового окна и производятся необходимые действия
}

а Применить должен производить практически теже действия но не закрывать окно!
по умолчанию он неактивен!
Вопрос №3: Как удалить кнопку Справка?
Вопрос №4: В кнопках по умолчанию используется русский язык а когда я создаю и пытаюсь на руссом написать валезают казерябы smile
В консольных программах я использовал CharToOem надеюсь здесь каждый Caption не надо прогонять через эту функцию smile?
Подскажите как сделать грамотно!!!

ps В Toolbox есть Group Box!



Это сообщение отредактировал(а) Gremlin - 30.8.2006, 07:08
PM MAIL   Вверх
Earnest
Дата 30.8.2006, 07:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Gremlin @  30.8.2006,  08:05 Найти цитируемый пост)
Вопрос №1: Какой идентификатор у кнопки Применить?

На то есть Spy. НО в принципе он тебе не нужен.

Цитата(Gremlin @  30.8.2006,  08:05 Найти цитируемый пост)
Вопрос №2: Как мне найти обработчик события данной кнопки?

Концепция "блокнота" такова, что обработчика для всего окна нет (т.е. его можно вкрутить, но это требует некоторых извращений). Вместо этого есть обработчики OnOK и OnApply у страниц (виртуальные функции). И вообще, все обработка происходит по-странично. Что обычно довольно удобно. Так что изучай интрефейс CPropertyPage. По-умолчанию, OnOK вызывает OnApply и закрывает окно.
Чтобы кнопка Apply стала активной, нужно вызывать метод страницы SetModified. По нажатию кнопки Apply вызывается OnApply, а потом кнопка снова "засеривается"

Цитата(Gremlin @  30.8.2006,  08:05 Найти цитируемый пост)
Вопрос №3: Как удалить кнопку Справка?

Кажется, у проперти-щита есть флаг, точно не помню.

Цитата(Gremlin @  30.8.2006,  08:05 Найти цитируемый пост)
Вопрос №4: В кнопках по умолчанию используется русский язык а когда я создаю и пытаюсь на руссом написать валезают казерябы 

Не поняла. Но язык ресурса (страницы) должен быть русским - это выставляется в ее свойствах. Никаких CharToOem не нужно.

Цитата(Gremlin @  30.8.2006,  08:05 Найти цитируемый пост)
 В Toolbox есть Group Box!

GroupBox, по моему и так прозрачный... Не поняла проблемы.



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


Шустрый
*


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

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



такс с языком разобрался
а вот удалить справку так и не смог что странно при точно такомже создании окна со вкладками в первом случае кнопки Справка небыло а сейчас появилось гыгы

Цитата(Earnest @  30.8.2006,  07:26 Найти цитируемый пост)
Чтобы кнопка Apply стала активной, нужно вызывать метод страницы SetModified. По нажатию кнопки Apply вызывается OnApply, а потом кнопка снова "засеривается"

это нужно сделать до DoModal()?
или в классах вкладок?
PM MAIL   Вверх
Earnest
Дата 30.8.2006, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Gremlin @  30.8.2006,  12:36 Найти цитируемый пост)
это нужно сделать до DoModal()?

НЕТ, получишь ASSERT.
Это принято делать после появления каких-то изменений. Например, ловишь изменения в каком-нибудь поле и вызываешь SetModified.

Цитата(Gremlin @  30.8.2006,  12:36 Найти цитируемый пост)
а вот удалить справку так и не смог 

Ленивый потому что. Я же сказала, флаги посмотри.

Цитата

dwFlags
...
PSH_HASHELP
Permits property sheet pages to display a Help button. You must also set the PSP_HASHELP flag in the page's PROPSHEETPAGE structure when the page is created. If any of the initial property sheet pages enable a Help button, PSH_HASHELP will be set automatically. If none of the initial pages enable a Help button, you must explicitly set PSH_HASHELP if you want to have Help buttons on any pages that might be added later. 






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


Шустрый
*


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

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



ок сибо чото я тормознул
получилось вот так PropertySheet.m_psh.dwFlags &=~PSP_HASHELP тока кнопка не исчезла smile 
вернее она потухла smile
а по поводу кнопки применить я должен переопределить onApllay и onOk в последней надо вызывать onAplay и закрывать окно я правильно понял?

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


 




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


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

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