c# - GTK# 使用绘图区

标签 c# linux draw cairo gtk#

我想用 GTK# 写一个贪吃蛇游戏,但是好几天我都不知道如何处理 DrawingArea。在我找到的所有示例中,都有对 drawingArea.ExposeEvent 事件的订阅,方法如下:

void OnDrawingAreaExposed (object source, ExposeEventArgs args)
{   
    DrawingArea darea = (DrawingArea) source;
    Cairo.Context ctx = Gdk.CairoHelper.Create (darea.GdkWindow);

    // drawing here ...

    ((IDisposable) ctx.Target).Dispose();
    ((IDisposable) ctx).Dispose();
}

但我在 DrawingArea 对象和 ExposeEventArgs 数据类型上都没有可用的 .ExposeEvent 事件。 我什至不知道它是关于什么的。我想处理渲染,甚至可能以其他方式处理,例如制作位图图像,然后将其分配给 WinForms 中的 PictureBox 之类的东西。

此外,我必须按设定的时间间隔进行绘制,这意味着我还需要其他 GTK# 方法。

我使用 darea.GdkWindow 创建了 Cairo.Context,但它已被“弃用”。我试过只创建一个 Cairo.Context,然后使用 darea.Draw(cc) 方法绘制,但这也不起作用。

最佳答案

使用 DrawingArea.Drawn 事件。

var drawing = new DrawingArea();
drawing.Drawn += (s, e) =>
{
    var cr = e.Cr;
    cr.Rectangle(100, 100, 100, 100);
    cr.SetSourceRGB(255, 0, 0);
    cr.Fill();
};

引用:https://github.com/GtkSharp/GtkSharp/blob/develop/Source/Samples/Sections/Widgets/DrawingAreaSection.cs

关于c# - GTK# 使用绘图区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70688281/

相关文章:

c# - Windows 手机 8.1 : Check Internet Connection

linux - Linux 应用程序的自定义 URI 架构

c - 命名管道的大小?进程卡住

linux - Elasticsearch 无法写入日志文件

c - 之前的预期表达式,标记

c++ - 是否可以将 Windows 位图绘制到 cairo 表面?

android - 如何同时在屏幕上绘制2个PNG图片

c# - 如何覆盖 Identity Server 4 中的默认错误路径?

c# - 来自 Service.OnStart 的信号初始化失败

c# - 属性是只读的,但成员可以访问