Графический интерфейс 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