C# 如何在C(mono)中使用Gdk库?
我是Gtk和Gdk的新手,完全不知道如何开始 我所要做的就是在任何widget/pixmap/image中绘制点和线,然后在我的gtk应用程序中显示它们。C# 如何在C(mono)中使用Gdk库?,c#,drawable,gtk#,gdk,C#,Drawable,Gtk#,Gdk,我是Gtk和Gdk的新手,完全不知道如何开始 我所要做的就是在任何widget/pixmap/image中绘制点和线,然后在我的gtk应用程序中显示它们。 到目前为止,我知道我必须创建一个Gdk.drawable对象来访问绘图点(点[]点)和绘图线(点[]点)方法。然而,要实例化一个Drawable对象,我需要一个Gdk.GC对象。两个对象构造函数都接受一个IntPtr参数,我不知道我应该传递什么IntPtr?!或者,一个GC构造函数也可以接受一个可绘制的对象,而一个可绘制的构造函数可以接受一个
到目前为止,我知道我必须创建一个
Gdk.drawable
对象来访问绘图点(点[]点)
和绘图线(点[]点)
方法。然而,要实例化一个Drawable
对象,我需要一个Gdk.GC
对象。两个对象构造函数都接受一个IntPtr
参数,我不知道我应该传递什么IntPtr
?!或者,一个GC构造函数也可以接受一个可绘制的对象,而一个可绘制的构造函数可以接受一个GC对象……我在这里转圈圈
这是24小时的在线研究,除了一些使用不带参数的构造函数的python示例之外,我找不到任何资源来开始C#。那么,有谁能告诉我如何正确使用这些GC和Drawable对象来使用
DrawLine(Point[]points)
方法画一条线呢
GDKEXAMPLE(){
win = new Gtk.Window ("Gdk nightmare");
win.SetDefaultSize (400, 300);
img=new Gtk.Image();
Drawable dr=new Drawable(null); //how to instantiate this object?
Gdk.GC gc=new Gdk.GC(null); //how to instantiate this object?
Point[] pts=new Point[3];
pts[0]=new Point(10,10);
pts[1]=new Point(15,20);
pts[2]=new Point(20,50);
dr.DrawLines(gc,pts);
Pixmap pxmp=new Pixmap(dr,100,100);
img.SetFromPixmap(pxmp,pxmp); //Requests a pixmap and pixmap mask: what mask?
img.QueueDraw();
win.Add(img);
win.ShowAll();
}
有人能帮我使用
Gdk.GC
和Gdk.Drawable
类,然后在Gtk小部件中显示任何点或线吗?也许通过使上述代码起作用?或者是C语言教程的任何链接#使用这个gdk库?因此,经过大量的耐心,我终于找到了如何开始使用gdk的答案
基本上,只有事件才能触发图形。我试图直接从方法调用绘图,但没有成功。下面是我在C#中缺少的基本代码:
在这里,我们构建主窗口,并使用OneExposeEvent方法编写所有图形。当任何小部件需要(全部或部分)重绘时,将调用此方法。在这里,您需要使用“Drawable”参数实例化Gdk.GC对象(上下文)。没有太多选择:Gdk.Pixmap或Gdk.Window。我选择了Gdk.Window,因为它是最直接的绘制表面。然后可以自定义上下文对象以决定如何绘制它
最后,直接从要绘制的可绘制对象调用绘制方法:这里我只想绘制一系列8个连接点
我希望这能帮助其他用户理解这个gdk名称空间的逻辑。编译错误发生在哪里?尽量只包含与您的问题相关的代码。(一个问题,比如“如何使用Gdk#?”实例化这个Gdk对象。“有人向我解释Gdk吗”这个问题可能会结束。)另外,搜索“mono drawing tutorial”会得出这样的结论:好的,我已经重新表述了我最初的问题,希望现在更清楚。关于开罗,这不是Gdk…如果没有人理解它,这个Gdk库有什么意义?除了不完整的参考手册之外,为什么没有任何在线资源可以理解它呢?对绑定的期望通常是您能够理解库的原始版本(在本例中,是Gtk和Gdk的C版本以及杂项),使用该库的文档,并在不同语言之间翻译各种习惯用法。(例如,Gtk信号将是C#events等)此外,如果您阅读了这篇文章,您可能会了解到:1。Cairo可用于Gtk#中的绘图。(事实上,我相信它是Gtk生态系统的主要2D图形API。GDK已被弃用,其绘图功能实际上已在Gtk3中消失。)。第二个代码示例包括表达式
area.GdkWindow
。表示它继承自Gdk.Drawable
,这似乎是您正在寻找的东西,如果您真的想要Gdk,您可以使用它。多年来,我一直在寻找有关如何创建GC的详细信息!从那以后,我一直在破坏默认的地面军事系统。Mono文档倾向于关注基础和超高级stuf。非常感谢你!
using System;
using Gdk;
using Gtk;
class GdkApp : Gtk.Window
{
public static void Main()
{
Application.Init();
new GdkApp();
Application.Run();
}
public GdkApp() : base("Simple drawing")
{
SetDefaultSize(230, 150);
DeleteEvent+=delegate {Application.Quit(); };
ShowAll();
}
protected override bool OnExposeEvent (EventExpose evnt)
{
bool ok = base.OnExposeEvent (evnt);
draw ();
return ok;
}
void draw()
{
Gdk.GC gc = new Gdk.GC ((Drawable)base.GdkWindow);
gc.RgbFgColor = new Gdk.Color (255, 50, 50);
gc.RgbBgColor = new Gdk.Color (0, 0, 0);
gc.SetLineAttributes (3, LineStyle.OnOffDash,
CapStyle.Projecting, JoinStyle.Round);
Gdk.Point[] pts = new Gdk.Point[8];
pts [0] = new Gdk.Point (10, 50);
pts [1] = new Gdk.Point (15, 70);
pts [2] = new Gdk.Point (20, 80);
pts [3] = new Gdk.Point (25, 70);
pts [4] = new Gdk.Point (30, 80);
pts [5] = new Gdk.Point (40, 90);
pts [6] = new Gdk.Point (55, 85);
pts [7] = new Gdk.Point (75, 65);
base.GdkWindow.DrawLines (gc, pts);
}
}