Создание окон.

Общие вопросы, не зависящие от языка реализации.

Модераторы: Duncon, Hawk, Romeo, Eugie

StIX
Сообщения: 20
Зарегистрирован: 13 фев 2011, 20:32
Откуда: Russian Federation
Контактная информация:

29 апр 2011, 00:00

Всем доброго времени суток! Каким образом лучше (или оптимальнее) создавать окна, через диалог или динамически (через CreateWindowEx()) ?
Аватара пользователя
Decoder
Сообщения: 303
Зарегистрирован: 19 фев 2008, 23:11
Откуда: Moscow

29 апр 2011, 10:12

А это смотря какие окна. Если тебе нужна форма ввода с разными элементами (кнопки, текстовые поля, списки и т.д.), то конечно лучше диалог использовать. А если нужна просто оконная рамка для отображения картинки или текста, то можно обойтись и CreateWindow().
Поумнеть несложно, куда труднее от дури избавиться.
StIX
Сообщения: 20
Зарегистрирован: 13 фев 2011, 20:32
Откуда: Russian Federation
Контактная информация:

01 май 2011, 02:32

В описании функции CreateDialog() написано, что она использует тот же CreateWindowEx().
Мне кажется что если самому создавать все элементы через CreateWindowEx(), то будет лучше.

И еще, почему когда изменяю размер шрифта у диалогового окна, то меняется размер формы диалога? Не нравится мне это тем, что реальные размеры получаются совсем другие, не те что указываешь.
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

04 май 2011, 22:15

В редакторе ресурсов намного удобнее править интерфейс, чем поправляя циферки в последовательных вызовах CreateWindowEx и после каждой правки запуская программу на выполнение, чтобы узнать нормально ли выглядит изменённый UI, так что если нужна именно диалоговая форма, то вызывать CreateWindowEx и делать всю работу редактора ресурсов попросту глупо, хотя и возможно. По поводу того, почему меняется размер диалога при изменении шрифтов - за это отвечает системная функция DiaglogProc, которая по умолчанию вызывается в твоей оконной процедуре. Если тебе не нравится, как система показывает твой диалог, то путь один - перехватывать сообщения для отрисовки неклиентской части диалога(WM_NC* messages) и вносить необходимые визуальные поправки самостоятельно. Собственно, если инетересует именно размер, то достаточно обработки WM_NCCALRECT.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
WinMain
Сообщения: 913
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

05 май 2011, 10:43

Могу предложить пару альтернативных вариантов для создания GUI.
1. Использовать редакторы GUI сторонних разработчиков, которые сохраняют визуальный образ окна диалога в XМL-файл. Тогда тебе нужно будет научиться парсить XML-файлы и по этим данным динамически создавать окно диалога с нужными элементами интерфейса.
2. Если использовать редактор ресурсов самой Visual Studio, то при создании окна диалога из программы можно не вызывать функции типа CreateDialog() или DialogBox(), а самому прочитать из ресурсов бинарный образ окна диалога и по этим данным динамически создать соответствующий визуальный интерфейс.
А размеры окна диалога и координаты элементов, которые создаются в редакторе ресурсов, действительно зависят от выбранного шрифта, поскольку их координаты записываются не в пикселях, а в так называемых диалог-юнитах (DLU), которые напрямую зависят от размеров шрифта.
Аватара пользователя
Decoder
Сообщения: 303
Зарегистрирован: 19 фев 2008, 23:11
Откуда: Moscow

05 май 2011, 20:00

Если вся проблема только в шрифте, то это можно решить гораздо проще. В редакторе ресурсов шрифт лучше вообще не трогать, пусть он останется таким, какой он задан по умолчанию. А вот при создании в программе окна диалога в процедуре инициализации (обработка сообщения WM_INITDIALOG) каждому элементу диалога присваивается нужный шрифт. В этом случае размер диалога и его элементов останется прежним, а шрифты будут такими, какие нужны.
Поумнеть несложно, куда труднее от дури избавиться.
StIX
Сообщения: 20
Зарегистрирован: 13 фев 2011, 20:32
Откуда: Russian Federation
Контактная информация:

05 май 2011, 23:14

Romeo писал(а):В редакторе ресурсов намного удобнее править интерфейс, чем поправляя циферки в последовательных вызовах CreateWindowEx и после каждой правки запуская программу на выполнение, чтобы узнать нормально ли выглядит изменённый UI
Вы имеете в виду редактор ресурсов Visual Studio ? Если да, то Visual Studio мне вобще не нравиться!
Может потому, что не умею в нем работать.
WinMain писал(а):Могу предложить пару альтернативных вариантов для создания GUI.
1. Использовать редакторы GUI сторонних разработчиков, которые сохраняют визуальный образ окна диалога в XМL-файл. Тогда тебе нужно будет научиться парсить XML-файлы и по этим данным динамически создавать окно диалога с нужными элементами интерфейса.
2. Если использовать редактор ресурсов самой Visual Studio, то при создании окна диалога из программы можно не вызывать функции типа CreateDialog() или DialogBox(), а самому прочитать из ресурсов бинарный образ окна диалога и по этим данным динамически создать соответствующий визуальный интерфейс.
1. Можно, но больше это к wxWidgets..
2. С Visual Studio не работаю. :(
Пользуюсь программой VISG, поэтому сказал что для меня проще динамически создавать окна.
К сожалению она не умеет создавать диалоговые окна (с использованием ресурсов). Вобщем буду на основе диалогов создавать. Смущает только то, что придется все позиции элементов считать вручную и каждый раз контролировать все ли четко смотрится. :(
BulldozerBSG
Сообщения: 263
Зарегистрирован: 09 янв 2010, 04:14
Контактная информация:

06 май 2011, 12:18

StIX писал(а): 2. С Visual Studio не работаю. :(
Пользуюсь программой VISG, поэтому сказал что для меня проще динамически создавать окна.
К сожалению она не умеет создавать диалоговые окна (с использованием ресурсов). Вобщем буду на основе диалогов создавать. Смущает только то, что придется все позиции элементов считать вручную и каждый раз контролировать все ли четко смотрится. :(
Файл ресурсов можно создавать не только в Visual Studio. Есть сторонние программы для этих целей.
Вот например: Resourceeditor

А по большому счету программируя под Win и не пользуясь MSVS вы создаете себе много проблем.
StIX
Сообщения: 20
Зарегистрирован: 13 фев 2011, 20:32
Откуда: Russian Federation
Контактная информация:

06 май 2011, 18:27

Спасибо, посмотрел. Мне эта программа не понравилась. Интерфейс не очень хорошо работает, да и генерирует только *.RES, а лучше бы *.RC. Может быть еще что посоветуете?
BulldozerBSG
Сообщения: 263
Зарегистрирован: 09 янв 2010, 04:14
Контактная информация:

06 май 2011, 20:34

А в чем собственно проблема получения RC из RES?
Ответить