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
'programing' 카테고리의 다른 글
특정 디렉터리의 디렉터리 수 계산 (0) | 2023.04.26 |
---|---|
범위.Chr(1)에 대해 바꾸기는 항상 참입니다. (0) | 2023.04.26 |
새 각도 프로젝트를 생성하기 위한 종속성 트리 오류를 해결할 수 없습니다. (0) | 2023.04.26 |
디렉토리 열기 대화상자 (0) | 2023.04.26 |
5.0.0으로 업그레이드한 후 토큰 유효성 검사 매개 변수가 더 이상 작동하지 않음 (0) | 2023.04.26 |