С++ 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?