Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: диалог как компонент  (Прочитано 9093 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« : 16-06-2010 19:24 » 

Джон, наверное, опять к тебе вопрос ))

Ситуация следующая. Когда мы хотим выделить код в класс, мы делаем пару файлов - H и CPP. Тут проблем нет. Но когда хотим класс-диалог (например от CDialog) , нам нужно где-то хранить ресурс. Можно попробовать создать *.rc рядом с той парой файлов, но как обеспечить автоматическое прописывание идентификатора ресурса - с нужным именем (например IDD_MYDIALOG) и с корректным значением, не пересекающимся с остальными , уже имеющимися в resource.h проекта?

Раньше решал проблему ручным добавлением ресурса, но тогда ресурс был простенький - все контролы создавал в классе. В конструктор передавался ID ресурса, а в OnInitDialog все контролы с ресурса удалялись и размещались нужные


Уже не первый раз сталкиваюсь, поэтому решил узнать, как это делается по научному


C# не предлагать! (c) Д.
« Последнее редактирование: 17-06-2010 07:03 от Алексей1153++ » Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #1 : 17-06-2010 07:01 » 

Лёш, ты в конце таких топиков приписывай: "C# не предлагать!" Ага

Ибо там эта проблема решена.

В С++ связь кода с ресурсами абстрактная, поэтому остаётся делать ручками. Альтернатива - делать диалог полностью без внешних ресурсов, но это такой геморр!

Ну или выгрузить диалог в DLL расширения MFC и запускать оттуда.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #2 : 17-06-2010 07:08 » 

приписал ))

Ибо там эта проблема решена.
да, я видел. Но я же не в шарпе, чёрт побери Улыбаюсь

Альтернатива - делать диалог полностью без внешних ресурсов, но это такой геморр!

Есть мистическая возможность
Цитата
CDialog::CreateIndirect
Call this member function to create a modeless dialog box from a dialog-box template in memory.
но там, похоже, всё равно всё сводится к ресурсу...

Пока только вручную и делаю
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 17-06-2010 07:09 » 

жаль, что нет возможности выдрать текст из RC и передать его в один из методов АПИ Улыбаюсь
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #4 : 17-06-2010 09:20 » 


Есть мистическая возможность
Цитата
CDialog::CreateIndirect
Call this member function to create a modeless dialog box from a dialog-box template in memory.
но там, похоже, всё равно всё сводится к ресурсу...

Почему мистическая? Так это и делается. И без всяких ресурсов. Глянь вот тут например:
http://www.codeproject.com/KB/dialog/dynamicdialog.aspx

В .rc файле содержится инфа, которая инициаллизирует определённые поля структур. В данном случае ты делаешь напрямую в коде. Другое дело, что ресурсы в ехе-шнике тоже выделены отдельно и их можно например изменить и перекомпилировать не затрагивая исполняемый код.

жаль, что нет возможности выдрать текст из RC и передать его в один из методов АПИ Улыбаюсь

Ну а за чем же дело стало? Класс создающий диалог по CreateIndirect инициаллизируемый текстом из .rc файла. Ага
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 17-06-2010 10:18 » 

хм... Дома поразбираюсь. А у меня не получилось самостоятельно - я с месяц назад пытался (

там, блин, ещё региться надо будет )
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #6 : 17-06-2010 15:07 » 

Джон, что-то мне не нравится всё это. Вручную оно как-то проще и приятнее ))
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #7 : 18-06-2010 06:41 » 

... и понятней. Ага

Лёш, "я тебе один умный вещ скажу, но только ты не абижайся". (c) Ага

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

Много лет назад, ещё под шестёркой я как-то задумал сделать универсальный контейнер для PropertySheet а ля мастер проектов в 2003 и тд студиях. Те вверху  красивая информационная строка с меняющимися иконками, слева менюшка, справа переключаемые страницы. Ну ессно страницы ты создаёшь в визуальном редакторе. А вот управляющий диалог я сделал динамическим, в одном классе. Ну понятно почему. Вроде даже всё работало. Если интересно могу наверное даже откопать (но не обещаю).

Насколько я помню, всё похерилось в тот момент, когда пользователь изменил системные настройки шрифтов. У диалогов (нормальных) используются системные параметры для определения размеров. Это логично, например, иногда люди со слабым зрением увеличивают размер шрифтов, тогда все окна и контролы становятся пропорционально больше, иначе текст на них просто не помещается. Это надо учитывать при разработке своих окон. Я же задал жёстко параметры фонтов в темплейте диалога. Ну и... вот.

В итоге не помню чем дело кончилось, то ли сделал в проекте "жесткий" диалог, то ли вобще проект перестал быть.

« Последнее редактирование: 18-06-2010 06:43 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #8 : 18-06-2010 06:53 » new

та я и делаю вручную - другого способа не наблюдается )) Есть проект, где много диалогов - хотелось бы для них редактор пользователю дать. С ресурсами был бы выход. Но эт ладно, обойдутся без редактора. Буду сам делать.

Со шрифтами на контролах стараюсь не баловаться, разве что иногда нужен моношир. Но это редко )
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines