WedX - журнал о программировании и компьютерных науках

Какой Windows API выбрать для многофункционального клиентского приложения?

Я разрабатываю многофункциональное клиентское программное обеспечение для Mac OS X и Linux. Я хочу портировать приложение на Windows и, не будучи пользователем продуктов Microsoft, я не очень хорошо знаком с Windows в целом.

Что мне знакомо:

В Mac OS X у меня есть вариант Cocoa и Objective C или Carbon и C/C++. В Linux у меня есть вариант GTK+ и C/C++ или Qt и C++. Я предпочитаю Cocoa в Mac OS X и GTK+ в Linux. Интерфейсный конструктор для Cocoa и Glade для GTK+ облегчают мне жизнь. Создание многофункциональных клиентов в этих операционных системах забавно.

Мои основные классы или «модель» в MVC написаны на кросс-платформенном C++. Классы пользовательского интерфейса, или «представление и контроллер» в MVC, написаны на «предпочтительном» языке и GUI API для каждой соответствующей платформы.

C++ — язык, с которым я лучше всего знаком. Я широко использую библиотеки Boost. Особенно интеллектуальные указатели, потоки и сетевые библиотеки asio. Для Unicode, локализации и т. д. я использую международные компоненты для Unicode (ICU).

Вопрос 1: Какой «предпочтительный» язык и GUI API для платформы Windows совместимы с моими классами кросс-платформенной модели?

Вопрос 2: Как получить доступ к классам кросс-платформенной модели?

Например, в Mac OS X я получаю доступ к своим классам моделей через классы контроллеров. Классы контроллера реализованы на Objective-C++. Objective-C++ — это смесь C++ и Objective-C. Объекты просмотра «разговаривают» с объектами контроллера в Objective-C, в то время как объекты контроллера «разговаривают» с объектами модели в C++.

В Linux все классы реализованы на C++.


Ответы:


1

На самом деле в Windows нет «предпочтительного» языка и API, больше похоже на множество вариантов. Очевидные из них — необработанные вызовы Win32 напрямую к операционной системе (на самом деле это просто вызовы C), или тонкая абстракция поверх этого (например, WTL, библиотека шаблонов Windows, которая является C++), или более толстая абстракция (например, MFC, также С++).

В наши дни Microsoft довольно активно продвигает WPF, но это часть управляемого мира .NET. Вы можете написать на нем C++, так что вы сможете портировать свое приложение, но я ожидаю, что это потребует значительных усилий.

Учитывая, что вы используете GTK+ или QT в Linux, очевидным было бы изучить возможность использования обоих из них в Windows, поскольку оба существуют, — таким образом вы могли бы сохранить версии Linux и Windows почти идентичными. Они не являются естественным выбором для приложения только для Windows, поскольку они изначально не из мира Windows, но, учитывая ваш опыт, они будут иметь большой смысл. Возможно, вам придется потратить некоторое время на их настройку, чтобы приложение Windows выглядело и работало правильно, но это должно быть более чем компенсировано отсутствием необходимости писать совершенно новый уровень представления.

12.11.2008

2

Qt отлично работает с окнами. Более того, он не зависит от платформы.

12.11.2008

3

Если вы можете заставить свой C++ скомпилироваться с помощью набора инструментов Visual Studio (а не gcc или mingw), я очень рекомендую вам создать .lib, а затем связать его со сборкой C++/CLI, где вы предоставляете управляемый API для вашего библиотека.

Затем вы можете использовать C # и WinForms API или WPF и иметь чрезвычайно богатое и родное приложение, выглядящее как Windows. Эта работа довольно проста, и если вы хотите переписать графический интерфейс, это даст наилучший результат и его будет проще всего развернуть.

Одно предостережение: если вам нужно, чтобы он работал на машинах, где .NET может отсутствовать, - если это так, я бы придерживался .NET 2.0 (и WinForms). Вы также должны попросить своего установщика обнаружить и установить его. Если вы хотите установить .NET 3.5, если его нет, выберите WPF.

12.11.2008

4

Windows Presentation Foundation (WPF) — это новый стандарт многофункциональных приложений Microsoft для Windows. Ваш C++ будет перенесен на него, но большинство людей разрабатывают C# для него.

12.11.2008

5

GTK+ отлично работает в Windows. Если вы уже знакомы с ним, это то, что я бы использовал. Хотя производительность, вероятно, не соответствует производительности собственных библиотек пользовательского интерфейса Windows, таких как MFC, она достаточно хороша, если ваше приложение действительно не зависит от пользовательского интерфейса. Одним из важных примеров использования GTK+ для всех платформ является Pidgin.

Не могу ответить на ваш второй вопрос, не видя кода, но я не понимаю, почему он будет отличаться от вашего подхода к модели-представлению-контроллеру на других платформах.

12.11.2008
  • правильно, нет смысла писать код только для Windows, когда вы можете сохранить его кроссплатформенным. конечно, я бы предпочел Qt GTK+ (без накладных расходов на производительность или несоответствия графического интерфейса!), но в вопросе уже упоминалось, что мне нравится GTK+, так что просто оставьте его. 12.11.2008

  • 6

    Я склоняюсь к Windows Presentation Foundation. Я полагаю, что это ответ Microsoft на Cocoa в Mac OS X, поскольку «он направлен на унификацию ряда сервисов приложений: пользовательский интерфейс, 2D- и 3D-рисование, фиксированные и адаптивные документы, расширенную типографику, векторную графику, растровую графику, анимацию, привязку данных. , аудио и видео». Для меня это похоже на какао :-)

    Я предполагаю, что реализация будет похожа на мою реализацию Mac OS X:

    • Модель: кроссплатформенные классы C++
    • Представление: WPF и C#
    • Контроллер: C++/CLI или что-то еще

    Принимая во внимание, что в Mac OS X классы представлений реализованы в Objective-C, а классы контроллеров реализованы в Objective-C++. Объекты просмотра «разговаривают» с объектами контроллера в Objective-C, в то время как объекты контроллера «разговаривают» с объектами модели в C++.

    Является ли C++/CLI в Windows таким же, как Objective-C++ в Mac OS X, или классы C#, определяемые мной, недоступны в C++/CLI?

    Каков «правильный» или «предпочтительный» способ доступа к классам С++ с управляемого языка .Net?

    12.11.2008
  • Вы бы встроили представление C# в одну сборку и вызвали бы другую сборку, созданную в C++/CLI. Вы можете встроить свои кросс-платформенные классы C++ в сборку C++/CLI несколькими способами, например, скомпоновав объектные файлы как статическую собственную библиотеку или скомпилировав исходный код в управляемый код. 12.11.2008
  • Новые материалы

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

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]