С++ wxWidgets, как использовать Direct2D?

Я использую wxWidgets 3.2.8.1 библиотеку (собранную в DLL в VS 2022 C++17) и не понимаю как использовать Direc2D. В документациях wxWidgets, на форуме wxWidgets и в обсуждениях на GitHub встречал упоминание Direct2D, но даже примера простенькой программы не нашёл с его использованием. Я пробовал даже ИИ использовать, чтобы получить хотя бы какой-то пример, но он не дал рабочий пример.

Вот что он мне выдал(не уверен, что он нужен, но всё же дам):

//main.h
#pragma once

#include <wx/wx.h>
#include <wx/xml/xml.h>
#include <wx/graphics.h>

class MyApp : public wxApp
{
public:
    virtual bool OnInit() override;
};
//main.cpp
#include "main.h"
#include "MainFrame.h"
#include <wx/xrc/xmlres.h>
wxIMPLEMENT_APP(MyApp);

bool MyApp::OnInit()
{
    // Устанавливаем Direct2D
    //wxApp::SetGraphicsRenderer(wxGraphicsRenderer::GetDirect2DRenderer());
    //wxGraphicsRenderer::SetDefaultRenderer(wxGraphicsRenderer::GetDirect2DRenderer());
    wxGraphicsContext::SetGraphicsRenderer(wxGraphicsRenderer::GetDirect2DRenderer());//тоже ошибка (пробовал узнать у ИИ, но он также дал не рабочие варианты)

    // Проверяем
    if (!wxGraphicsRenderer::GetDirect2DRenderer())
    {
        wxMessageBox("Direct2D renderer is not available!", "Error", wxOK | wxICON_ERROR);
        return false;
    }

    // Загружаем интерфейс
    wxXmlResource::Get()->InitAllHandlers();
    if (!wxXmlResource::Get()->Load("gui.xrc"))
    {
        wxMessageBox("Could not load GUI resource file!", "Error", wxOK | wxICON_ERROR);
        return false;
    }

    MainFrame* frame = new MainFrame();
    frame->Show(true);

    return true;
}
//MainFrame.h
#pragma once

#include <wx/wx.h>
#include <wx/graphics.h>

class MainFrame : public wxFrame
{
public:
    MainFrame();

protected:
    void OnPaint(wxPaintEvent& event);
    void OnSize(wxSizeEvent& event);

private:
    wxDECLARE_EVENT_TABLE();
};
//MainFrame.cpp
#include "MainFrame.h"
#include <wx/xrc/xmlres.h>

wxBEGIN_EVENT_TABLE(MainFrame, wxFrame)
EVT_PAINT(MainFrame::OnPaint)
EVT_SIZE(MainFrame::OnSize)
wxEND_EVENT_TABLE()

MainFrame::MainFrame() : wxFrame(nullptr, wxID_ANY, "Direct2D wxWidgets App")
{
    // Создаем GUI из XML ресурса
    wxXmlResource::Get()->LoadFrame(this, nullptr, "MainFrame");

    SetClientSize(800, 600);
    Center();
}

void MainFrame::OnPaint(wxPaintEvent& event)
{
    wxPaintDC dc(this);

    // Создаем Direct2D контекст
    wxGraphicsContext* gc = wxGraphicsContext::Create(dc);
    if (gc)
    {
        // Рисуем с использованием Direct2D
        gc->SetPen(*wxBLACK_PEN);
        gc->SetBrush(*wxBLUE_BRUSH);

        // Рисуем прямоугольник
        gc->DrawRectangle(50, 50, 200, 100);

        // Рисуем текст
        gc->SetFont(wxFontInfo(12).Bold(), *wxBLACK);
        gc->DrawText("Direct2D with wxWidgets!", 50, 160);

        // Рисуем круг с градиентом
        wxGraphicsGradientStops stops(wxColour(255, 0, 0), wxColour(0, 0, 255));
        stops.Add(wxColour(0, 255, 0), 0.5f);
        wxGraphicsBrush gradientBrush = gc->CreateLinearGradientBrush(300, 50, 500, 250, stops);
        gc->SetBrush(gradientBrush);
        gc->DrawEllipse(300, 50, 200, 200);

        delete gc;
    }
}

void MainFrame::OnSize(wxSizeEvent& event)
{
    Refresh();
    event.Skip();
}
//gui.xrc
<?xml version="1.0" encoding="utf-8"?>
<resource version="2.3.0.1">
    <object class="wxFrame" name="MainFrame">
        <title>Direct2D wxWidgets Application</title>
        <size>800,600</size>
        <style>wxDEFAULT_FRAME_STYLE</style>
    </object>
</resource>

Можете дать пример кода с использованием wxWidgets с Direct2D?


Ответы (0 шт):