programing

WPF는 C++과 함께 작동합니까?

mailnote 2023. 4. 26. 23:32
반응형

WPF는 C++과 함께 작동합니까?

Microsoft Visual Studio는 WPF를 사용하기 위해 다시 작성된 것으로 알고 있습니다.왜 그런지는 아직 잘 모르겠습니다만, WPF에 대한 제 지식이 매우 제한적이라는 것을 인정합니다.

제 질문은 WPF가 C++를 얼마나 지원하는지 아는 사람이 있는지, 그리고 Visual Studio가 여전히 C++로 작성되어 있는지입니다.

개인적으로 WPF는 주로 다음과 같습니다.NET/VB/C# 같은 것.C++로 사용하는 사람 있나요?

WPF는 C++/CLI와 함께 사용할 수 있습니다.그것은 입니다.그러나 NET API는 필요합니다.NET Framework.

즉, C++에는 디자이너 지원이 없습니다.이는 실용적인 목적으로 WPF가 C++에서 실제로 작동하지 않는다는 것을 의미합니다.

일반적으로 사용자 인터페이스 계층은 C#(또는 VB)로 작성됩니다.NET), 그런 다음 C++ 코드로 호출하며, 종종 P/Invoke 또는 C++/CLI 계층을 통해 노출됩니다.C++/CLI를 사용하면 C++ 코드와 C#/VB 간의 상호 운용이 매우 쉽습니다.NET 코드.

WPF는 입니다.NET 기술.물론 의 다른 부분처럼 C++과 함께 사용할 수 있습니다.NET은 할 수 있지만, 몇 개의 interop hop을 건너뛰거나 C++/CLI로 모두 작성해야 합니다. (그리고 디자이너가 C++/CLI를 사용하지 않기 때문에 직접 많은 상용어구 코드를 작성해야 합니다.)

Visual Studio는 "C++로 작성된" 것이 아니며, 아마도 결코 아닐 것입니다.2010년을 기점으로 VS 팀의 구성원들은 자신들의 블로그에 VS가 이제 주로 관리되는 애플리케이션이라고 밝혔습니다.물론 그 안에는 아직도 수많은 C++ 코드가 있습니다. 그리고 그것이 곧 사라지지는 않겠지만, 오늘날 대부분은 C#/VB입니다.

하지만 그것은 하룻밤 사이에 일어난 일이 아닙니다.관리 코드는 릴리스마다 Visual Studio에 점진적으로 추가되었습니다.Visual Studio는 다양한 언어로 작성됩니다.

"C++을 사용하여 Visual Studio용 애드인을 작성할 수 있습니까?"라고 묻는 경우 "예"라고 대답합니다.

만약 당신이 "애플리케이션을 C++로 작성하고 여전히 WPF를 사용하는 것이 실용적인가?"라고 묻는다면, 대답은 아마도 "당신이 C#로 WPF 코드를 작성한 다음, 당신의 C++ 앱과 함께 이를 바인딩하는 인터op 코드가 있는 경우에만"일 것입니다.

Noesis gui는 WPF UI를 c++로 실행할 수 있습니다.c# 클래스를 c++(반사 매크로 등을 사용)로 조정해야 합니다.일부 컨트롤은 지원되지 않지만 매우 우아합니다.

예를 들어 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)
        {
        }
    }
}

그런 다음 c++로 변환합니다.

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를 사용하고 싶다면, 그들은 꽤 멋진 것들을 가지고 있습니다.아니면 사건을 통제하기 위해 람다를 연결할 수도 있습니다.

연간 수입이 10만 유로 미만이면 무료이지만 유료 프레임워크입니다.

언급URL : https://stackoverflow.com/questions/4776355/does-wpf-work-with-c

반응형