marc_2006 писал(а):
Видать я совсем тупой, поскольку не понял - а что, в современной архитектуре нет понятия пользовательского экранного интерфейса? Или в современных программах исполняются слова, которые там не прописаны?
Что понимается под архитектурой зданий? Какие-то общие соображения, которые позволяют различать землянку, избушку, кирпичный дом и небоскреб. Все это характеризуется не только этажами и количеством квартир, а еще и различными подходами к строительству, которые и обуславливают, что если в небоскребе есть вертолетная площадка на крыше, то на крыше избушки мы такую площадку ну никак не организуем. Раздавит вертолет избушку. Нужна другая
архитектура здания, чтобы там в принципе получалась вертолетная площадка, лифт и подземная парковка. Поэтому брать старую программную архитектуру и ожидать от нее простой адаптации к современным программным технологиям - все равно что адаптировать избушку к посадке на нее вертолета.
marc_2006 писал(а):
И опять я ничего не понял. На Vx нельзя написать слово, которое будет "модифицировать wm_paint, а внутри него пересчитывать точки графика в экранные координаты"? Что, из описанного Вами, в качестве примера, нельзя реализовать на Vx?
Ну так пускай они напишут внутри Vfx такой механизм, который будет позволять передавать координаты точки на графике. А если "тут тоже можно", то мы отправляемся в конец 90-х.
Вот подходящая ссылка
https://learn.microsoft.com/ru-ru/windows/win32/learnwin32/painting-the-windowЦитата:
В нашем первом примере программа рисования очень проста. Он просто заполняет всю клиентская область сплошным цветом. Тем не менее, этого примера достаточно, чтобы продемонстрировать некоторые важные понятия.
C++
switch (uMsg)
{
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
// All painting occurs here, between BeginPaint and EndPaint.
FillRect(hdc, &ps.rcPaint, (HBRUSH) (COLOR_WINDOW+1));
EndPaint(hwnd, &ps);
}
return 0;
}
Причем это только обработка сообщения об отрисовке окна. В данном случае важен порядок вызова функций. Показан пример на C++. Можно такое же сделать на fasm. Можно, приложив определенные усилия по созданию оберток над функциями и определению констант, сделать
такое же на Форте. Ключевой оборот здесь "такое же". Дальше будет все ровным счетом одинаковое - при необходимости что-то изменить мы правим вот этот фрагмент (например, меняем цвет, добавляем линии и кривые, выводим текст), затем компилируем (!) и заново запускаем (!). На С++, fasm или Vfx. Вопрос - и в чем конкретный выигрыш от перехода на Форт? Порядок работы не изменился, по-прежнему надо разбираться в функциях и их параметрах, зато:
1) оно не такое быстрое
2) есть вопросы к полноте реализации.
Из чего такое может проистекать - ну на мой взгляд из-за отсутствия у людей практической необходимости сделать что-то НА Форте, но наличии амбиций обязательно выпустить Форт. Потому что в том же C++ давно появились фреймворки, автоматизирующие обработку сообщений по мере добавления виджетов. А на Vfx такого нет, и мне совершенно неважно, что "можно написать". Вот когда напишут, я посмотрю, а записываться в младшие ученики только потому что "это же Форт", не собираюсь.
В отличие от этого, можно посмотреть для примера хотя бы вот на это
FillRect(hdc, &ps.rcPaint, (HBRUSH) (COLOR_WINDOW+1));
hdc - это контекст окна, HBRUSH - идентификатор "кисть". Остаются rcpaint - это координаты прямоугольника для заливки (тут они в размер окна) и COLOR_WINDOW - это цвет. Легким движением руки можно переписать эту функцию так, чтобы она и координаты, и цвет забирала со стека. Тогда можно будет из консоли менять размер и цвет прямоугольника,
не переписывая всю программу. Если распространить все это дальше, можно оформить основную программу на C++ или C# (MSVS, Qt, GTK, и что угодно еще) так, чтобы основной движок оставался "штатным", но параметры забирались со стека. Тогда мы избавляемся от постоянных перекомпиляций проекта, и заодно уменьшаем количество ошибок, вызванных тем, что при правке параметров случайно попортили логику программы.
marc_2006 писал(а):
опять я ничего не понял. Что С++ программа сама отрисовывает окна или таки передает параметры GUI?
А что она там передает? Вот пример - между BeginPaint и EndPaint необходимо вставить вызовы всего, что нужно нарисовать. Вообще всего. Да, оно, в каком-то смысле, "передает параметры GUI", но тут под GUI нужно понимать набор функций вида FillRect и подобных им, а там, к примеру, нет никакого холста (Canvas), который появился только в Delphi-подобных системах и вот он уже позволял "поставить красный пиксел в координатах 100, 100". Причем поставить и забыть, а при обработке wm_paint никакие ранее произведенные действия не учитываются - все состояние экрана необходимо нарисовать заново. Можно ли такое сделать в Vfx? Можно, конечно... как и сотне других систем подобного класса. И зачем они мне такие, если ничего нового относительно самого базового событийного движка Windows они не предоставляют? Вместо этого можно взять фреймворк, который реализует интерфейс уровнем выше и позволяет, например, показать на экране кнопку с надписью Caption в координатах x, y, w, h. Тогда над такой функцией уже полезно сделать форт-обертку, которая снимет все это со стека.