Страница 1 из 3

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

Добавлено: 29 апр 2011, 00:00
StIX
Всем доброго времени суток! Каким образом лучше (или оптимальнее) создавать окна, через диалог или динамически (через CreateWindowEx()) ?

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

Добавлено: 29 апр 2011, 10:12
Decoder
А это смотря какие окна. Если тебе нужна форма ввода с разными элементами (кнопки, текстовые поля, списки и т.д.), то конечно лучше диалог использовать. А если нужна просто оконная рамка для отображения картинки или текста, то можно обойтись и CreateWindow().

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

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

И еще, почему когда изменяю размер шрифта у диалогового окна, то меняется размер формы диалога? Не нравится мне это тем, что реальные размеры получаются совсем другие, не те что указываешь.

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

Добавлено: 04 май 2011, 22:15
Romeo
В редакторе ресурсов намного удобнее править интерфейс, чем поправляя циферки в последовательных вызовах CreateWindowEx и после каждой правки запуская программу на выполнение, чтобы узнать нормально ли выглядит изменённый UI, так что если нужна именно диалоговая форма, то вызывать CreateWindowEx и делать всю работу редактора ресурсов попросту глупо, хотя и возможно. По поводу того, почему меняется размер диалога при изменении шрифтов - за это отвечает системная функция DiaglogProc, которая по умолчанию вызывается в твоей оконной процедуре. Если тебе не нравится, как система показывает твой диалог, то путь один - перехватывать сообщения для отрисовки неклиентской части диалога(WM_NC* messages) и вносить необходимые визуальные поправки самостоятельно. Собственно, если инетересует именно размер, то достаточно обработки WM_NCCALRECT.

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

Добавлено: 05 май 2011, 10:43
WinMain
Могу предложить пару альтернативных вариантов для создания GUI.
1. Использовать редакторы GUI сторонних разработчиков, которые сохраняют визуальный образ окна диалога в XМL-файл. Тогда тебе нужно будет научиться парсить XML-файлы и по этим данным динамически создавать окно диалога с нужными элементами интерфейса.
2. Если использовать редактор ресурсов самой Visual Studio, то при создании окна диалога из программы можно не вызывать функции типа CreateDialog() или DialogBox(), а самому прочитать из ресурсов бинарный образ окна диалога и по этим данным динамически создать соответствующий визуальный интерфейс.
А размеры окна диалога и координаты элементов, которые создаются в редакторе ресурсов, действительно зависят от выбранного шрифта, поскольку их координаты записываются не в пикселях, а в так называемых диалог-юнитах (DLU), которые напрямую зависят от размеров шрифта.

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

Добавлено: 05 май 2011, 20:00
Decoder
Если вся проблема только в шрифте, то это можно решить гораздо проще. В редакторе ресурсов шрифт лучше вообще не трогать, пусть он останется таким, какой он задан по умолчанию. А вот при создании в программе окна диалога в процедуре инициализации (обработка сообщения WM_INITDIALOG) каждому элементу диалога присваивается нужный шрифт. В этом случае размер диалога и его элементов останется прежним, а шрифты будут такими, какие нужны.

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

Добавлено: 05 май 2011, 23:14
StIX
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, поэтому сказал что для меня проще динамически создавать окна.
К сожалению она не умеет создавать диалоговые окна (с использованием ресурсов). Вобщем буду на основе диалогов создавать. Смущает только то, что придется все позиции элементов считать вручную и каждый раз контролировать все ли четко смотрится. :(

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

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

А по большому счету программируя под Win и не пользуясь MSVS вы создаете себе много проблем.

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

Добавлено: 06 май 2011, 18:27
StIX
Спасибо, посмотрел. Мне эта программа не понравилась. Интерфейс не очень хорошо работает, да и генерирует только *.RES, а лучше бы *.RC. Может быть еще что посоветуете?

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

Добавлено: 06 май 2011, 20:34
BulldozerBSG
А в чем собственно проблема получения RC из RES?