Когда я начал программировать (около 10 лет назад), меня удивило три вещи:
- Составители/интерпретаторы (тогда я знал их как "программы, которые заставляют мои программы работать", за которыми часто следует спецификатор "независимо от того, что они есть" )
- Редакторы кода
- Дизайнеры форм
В то время я принимал их как факты жизни. Я смог сделать свои собственные специальные программы, но "программы, которые делали мои программы", редакторы кода и редакторы форм были сделаны богами, и я не мог с ними связаться.
Затем я пошел в университет и прошел курс по формальной обработке языка. После изучения формальных грамматик, парсеров, абстрактных синтаксических деревьев и т.д.; все волшебство в отношении компиляторов, переводчиков и редакторов кода вскоре исчезло. Составители и интерпретаторы могут быть написаны разумно и просто, и единственной неприменимой вещью, которую может потребоваться редактор кода подсветки синтаксиса, были хаки Windows API.
Однако, по сей день редакторы формы остаются для меня загадкой. Либо мне не хватает технических знаний, необходимых для создания конструктора форм, либо у меня есть такие знания, но я не могу найти способ использовать его для реализации конструктора форм.
Используя Visual С++ и MFC, я хотел бы реализовать конструктор форм, вдохновленный лучшим дизайнером форм:
В частности, я хотел бы подражать двум его особенностям, которые мне больше всего нравятся:
-
Обрабатываемая форма находится внутри контейнера. Таким образом, произвольно большая форма может быть спроектирована, не тратя слишком много экранной недвижимости, просто изменив размер контейнера на соответствующий размер.
-
Параметр "Выровнять по сетке" позволяет значительно упростить проектирование пользовательских интерфейсов расстраивает. На самом деле, я бы сказал, что создание профессиональных пользовательских интерфейсов с использованием конструктора форм Visual Basic на самом деле просто, весело и приятно. Даже для программистов с левым мозгом, таких как я.
Итак, у меня есть следующие вопросы:
-
Как создать конструктор форм, в котором разрабатываемая форма находится внутри контейнера? Является ли форма созданной фактическим окном, содержащимся внутри другого окна? Или это просто макет "вручную", написанный дизайнером формы?
-
У Windows API и/или MFC есть функции, классы, все, что облегчает создание "выбираемых" элементов (в окружении маленьких белых или синих квадратов при их выборе, изменяемых по размеру, когда они "схвачены" "одним из этих" ребер ")?
-
Как реализовать функциональность "Выровнять по сетке"?