C# Windows下MonoDevelop中Cairo绘图

C# Windows下MonoDevelop中Cairo绘图,c#,mono,gtk,monodevelop,cairo,C#,Mono,Gtk,Monodevelop,Cairo,我安装了MonoDevelop、GTK等等。我打开了一些Cairo教程(遵循给出的建议)。我在MonoDevelop中创建了一个新的GTK项目,并将Cairo库添加到引用中。使用,我以简单的GTK形式为DrawingArea创建了一个公开事件。代码如下: protected void OnDrawingAreaExposed (object obj, Gtk.ExposeEventArgs args) { DrawingArea drawArea = (DrawingArea)obj;

我安装了MonoDevelop、GTK等等。我打开了一些Cairo教程(遵循给出的建议)。我在MonoDevelop中创建了一个新的GTK项目,并将Cairo库添加到引用中。使用,我以简单的GTK形式为DrawingArea创建了一个公开事件。代码如下:

protected void OnDrawingAreaExposed (object obj, Gtk.ExposeEventArgs args)
{
    DrawingArea drawArea = (DrawingArea)obj;
    Cairo.Context ctx = Gdk.CairoHelper.Create(drawArea.GdkWindow);

    PointD p1,p2,p3,p4;

    p1 = new PointD (10,10);
    p2 = new PointD(100,100);

    ctx.MoveTo(p1);
    ctx.LineTo(p2);

    ((IDisposable)ctx).Dispose();
}
运行应用程序时,不会绘制任何内容。好的,我假设系统中没有安装cairo lib。我把它从下载到文件夹中,放在项目可执行文件所在的地方,然后砰的一声应用程序崩溃(System.DllNotFoundException)。 鉴于以上所有问题,我有一个问题-在Winows上的Mono应用程序中是否可以使用Cairo?


p.S.稍后将添加错误窗口截图,如果有帮助的话。

您不应该尝试将已编译的cairo库复制到bin文件夹中。Mono(或MonoDevelop-不确定此部分)附带所需的LIB。您只需通过单击引用文件夹添加它们,然后编辑引用(类似于Visual Studio)

问题出在MonoDevelop的GTK UI编辑器中。虽然我相信这是一项常见的任务,但是没有选项在那里添加自定义小部件。如果您想这样做,您必须破解该编辑器生成的文件(名为窗口类的文件,位于gtkgui文件夹中)。比方说,如果你有一个CairoCanvas类,它继承了Gtk.DrawingArea小部件类-你只需找到行,比如
this.drawingarea1=new global::Gtk.DrawingArea()
,并将其更改为
this.drawingarea1=new CairoCanvas()
,不要忘记使用你的项目名添加
指令向上。
每次更改GUI中的某些内容时,都会重新生成文件。然后你转到那个文件,看到它被更改了,按“保留更改”按钮保存你的工作。然后再次重建项目,就这样


我很高兴地希望这个答案能帮助一些Mono新手。我希望庆祝这一天,MonoDevelop社区(它是OSS,不是吗?)将实现缺乏功能的功能。

我认为您错过了一些步骤

尝试在
ctx.LineTo(p2)之间添加此项
((IDisposable)ctx).Dispose()

// give a color to line (red in this case)
ctx.Color = new Color (1,0,0);
// this is line type
ctx.Stroke ();

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

这完全有可能是的,我在windows上使用Mono.Cairo和Gtk已经有一段时间了。完全的例外是什么?@IanNorton事实上,正如回答中所解释的,这都是我的错误。@IanNorton顺便说一句,你和Mono开发者有同样的问题吗?是的,我的应用程序运行在linux和windows上