LLLit: Изучение и практика программирования

Работает ли WPF с C++?

Насколько я понимаю, Microsoft Visual Studio была переписана для использования WPF. Я до сих пор не понимаю, почему, но признаю, что мои знания о WPF очень ограничены.

Мой вопрос в том, знает ли кто-нибудь, насколько WPF поддерживает C++ и написана ли Visual Studio на C++.

Лично WPF в первую очередь выглядит как .NET/VB/C#. Кто-нибудь использует его с C++?

23.01.2011

  • Вы спрашиваете о WPF + C++ вообще или конкретно о его использовании в Visual Studio? 24.01.2011
  • На самом деле там было два вопроса. Один из них был связан с использованием WPF с C++. Другой был связан с языком, используемым для написания Visual Studio. 24.01.2011
  • Visual Studio действительно использует WPF как часть своего пользовательского интерфейса в выпуске 2010 года. Большая часть Visual Studio также по-прежнему написана на C++. 24.01.2011
  • Взгляните на эту ссылку: msdn.microsoft.com/en-us/library /ms742522.aspx 24.03.2013

Ответы:


1

Вы можете использовать WPF с C++/CLI. Однако это API .NET, поэтому для него требуется .NET Framework.

При этом поддержка конструктора отсутствует в C++. Это означает, что для практических целей WPF не работает с C++.

Как правило, уровень пользовательского интерфейса написан на C# (или VB.NET), а затем вызывается код C++, часто доступный через уровни P/Invoke или C++/CLI. С помощью C++/CLI очень легко взаимодействовать между кодом C++ и кодом C#/VB.NET.

23.01.2011
  • Спасибо. Это примерно то, о чем я думал. Но это заставило меня задуматься, зачем VS переписывать для WPF. Я спрашиваю, потому что в последнее время я довольно много работаю с C#, и мне интересно, следует ли мне выбрать WPF вместо MFC, который я использовал в прошлом. 24.01.2011
  • @Jonathan: Если вы используете C #, я бы очень внимательно посмотрел на WPF. Это намного лучше во многих отношениях ... Я написал серию статей о переходе на WPF с Windows Forms - хотя это не MFC, применяются те же концепции. Это даст вам хорошее представление о некоторых преимуществах WPF: reedcopsey.com/talks/from-windows-forms-to-wpf-with-mvvm 24.01.2011
  • В прошлом я использовал C++/MFC для настольных компьютеров и C#/WebForms для Интернета. Так что я не провел слишком много времени с WinForms. Но поскольку большая часть моих недавних разработок была связана с Интернетом, я все больше привыкаю к ​​C#. Я посмотрю вашу ссылку. 24.01.2011
  • @Jonathan: Это будет иметь смысл с точки зрения MFC, и большая часть этого применима и к Silverlight. Должно быть полезно, если вы хотите рассмотреть возможность перехода на WPF или Silverlight, для рабочего стола или Интернета... 24.01.2011
  • Изменилось ли что-нибудь сейчас? Я хотел бы использовать этот графический интерфейс на C++ в собственном исполняемом файле. 09.07.2014

  • 2

    WPF — это технология .NET. Конечно, его можно использовать с C++, как и любую другую часть .NET, но это требует от вас преодоления некоторых сложностей взаимодействия или, возможно, написания всего этого на C++/CLI. (И вам придется написать много стандартного кода самостоятельно, поскольку дизайнер не работает с C++/CLI.)

    И Visual Studio не написана и, вероятно, никогда не была «написана на C++». В 2010 году члены команды VS заявляли в своих блогах, что VS теперь в основном является управляемым приложением. Конечно, там все еще есть тонны кода на C++, и он не исчезнет в ближайшее время, но сегодня большая его часть — это C#/VB.

    Но это не произошло в одночасье. Управляемый код постепенно добавлялся в Visual Studio с каждым выпуском. Visual Studio написана на многих разных языках.

    Если на самом деле вы спрашиваете: «Могу ли я написать надстройку для Visual Studio с помощью C++», то ответ «да».

    Если вы спрашиваете «практично ли писать приложение на C++ и по-прежнему использовать WPF», ответ, вероятно, будет «только если вы пишете код WPF на C#, а затем имеете некоторый код взаимодействия, связывающий это вместе с вашим приложением C++». .

    23.01.2011
  • Интересно, что разработчики говорят, что VS 2010 теперь в основном управляемый код. Хотелось бы иметь более четкое представление о том, сколько управляется и почему. В основном я спрашиваю, потому что в прошлом я много работал с MFC и мне интересно, есть ли смысл переходить на C#, который я часто использую в последнее время, и WPF. 24.01.2011
  • @Jonathan: для работы с пользовательским интерфейсом я бы определенно предпочел WPF (возможно, с C # / VB) всему остальному, что произвела Microsoft. И для большинства целей C# — очень хороший язык, поэтому может быть имеет смысл использовать его не только для пользовательского интерфейса. 24.01.2011
  • Мне было интересно, почему Visual Studio стала загружаться и работать так медленно после версии 2008 года. Теперь я знаю ответ... 24.03.2013
  • Кстати, управляемый не означает, что они используют C#. Возможно, они используют C++ с CLR/CLI. 24.03.2013
  • @ Лилиан А. Морару: Я этого не чувствую. Кроме того, по-прежнему загружается быстрее, чем любая когда-либо написанная программа на Java. 28.10.2014

  • 3

    Графический интерфейс Noesis может запускать пользовательские интерфейсы WPF на С++. Вам придется адаптировать классы С# к С++ (используя их макросы отражения и т.д.). Некоторые элементы управления не поддерживаются, но это довольно элегантно.

    Например, WPF может сгенерировать:

    MainWindow.xaml.cs

    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Media;
    using System.Windows.Shapes;
    using System.Windows.Input;
    
    namespace BlendTutorial
    {
        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                this.InitializeComponent();
            }
    
            private void AddButton_Click(object sender, RoutedEventArgs e)
            {
            }
    
            private void RemoveButton_Click(object sender, RoutedEventArgs e)
            {
            }
    
            private void ContainerBorder_MouseDown(object sender, MouseButtonEventArgs e)
            {
            }
    
            private void RadioButton_Checked(object sender, RoutedEventArgs e)
            {
            }
        }
    }
    

    Затем вы должны преобразовать его в С++:

    namespace BlendTutorial
    {
    
    class MainWindow final: public Window
    {
    public:
        MainWindow()
        {
            InitializeComponent();
        }
    
    private:
        void InitializeComponent()
        {
            Noesis::GUI::LoadComponent(this, "MainWindow.xaml");
        }
    
        bool ConnectEvent(BaseComponent* source, const char* event, const char* handler) override
        {
            NS_CONNECT_EVENT(Button, Click, AddButton_Click);
            NS_CONNECT_EVENT(Button, Click, RemoveButton_Click);
            NS_CONNECT_EVENT(Border, PreviewMouseLeftButtonDown, ContainerBorder_MouseDown);
            NS_CONNECT_ATTACHED_EVENT(ToggleButton, Checked, RadioButton_Checked);
            return false;
        }
    
        void AddButton_Click(BaseComponent*, const RoutedEventArgs&)
        {
        }
    
        void RemoveButton_Click(BaseComponent*, const RoutedEventArgs&)
        {
        }
    
        void ContainerBorder_MouseDown(BaseComponent*, const MouseButtonEventArgs&)
        {
        }
    
        void RadioButton_Checked(BaseComponent*, const RoutedEventArgs&)
        {
        }
    
        NS_IMPLEMENT_INLINE_REFLECTION(MainWindow, Window)
        {
            NsMeta<TypeId>("BlendTutorial.MainWindow");
        }
    };
    

    Дополнительная информация здесь: https://www.noesisengine.com/docs/Gui.Core.BlendTutorial.html

    У них есть несколько отличных вещей, если вы хотите поэкспериментировать с моделями данных, привязками и mvvp. Или вы можете просто подключить лямбды для управления событиями.

    Это платный фреймворк, хотя его годовой доход не превышает 100 000 евро.

    18.06.2019
    Новые материалы

    CS373 Summer 2018: Миранда Фуленчек
    CS373 Summer 2018: Миранда Фуленчек Неделя 1: 4 июня — 10 июня Что вы делали на прошлой неделе? Занятия начались на этой неделе, поэтому большую часть времени я потратил на..

    Как развивается смешанно-целочисленное программирование, часть 7
    Унифицированная техника раннего завершения для первично-двойственных алгоритмов в смешанно-целочисленном коническом программировании (arXiv) Автор : Ювэнь Чэнь , Кэтрин Нин , Поль Гулар..

    Как научить модель Keras распознавать текст переменной длины
    Я некоторое время играл с официальным примером Keras image_ocr.py и хочу поделиться своими выводами в этом посте. В официальном примере выполняется только обучение модели, но отсутствует..

    Практическая пакетная нормализация
    История начинается после использования инициализации He вместе с ELU (или любым вариантом ReLU) может значительно снизить опасность проблем с исчезающими/взрывающимися градиентами в начале..

    Поэзия онлайн-кодирования: путешествие пикселей и страсти
    В мире, наполненном инновациями, онлайн-обучение программированию становится холстом, на котором обретает форму полотно вашей мечты. Это больше, чем просто создание строк кода; это сродни..

    Обработка изображений с помощью Python - размытие и повышение резкости для начинающих
    Как применить ядра свертки к цветным изображениям? В этой статье мы обсудим, как применять ядра размытия и повышения резкости к изображениям. Эти базовые ядра составляют основу многих более..

    Ограничение скорости в .NET Core 7 Web API
    Что такое ограничение скорости? Ограничение скорости — это процесс, используемый для ограничения количества запросов, разрешенных для определенного ресурса в указанном временном окне. .NET..