在Windows上使用MonoDevelop中的Cairo绘图

时间:2012-03-02 10:21:28

标签: c# mono gtk monodevelop cairo

我安装了MonoDevelop,GTK#和东西。我打开一些开罗教程(遵循here给出的建议)。我在MonoDevelop中创建了一个新的GTK#项目,并将Cairo库添加到引用中。使用this tutorial,我以简单的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没有安装在系统中。我从GTK+ page下载它,放入项目可执行文件所在的文件夹 - 然后砰! - 应用程序崩溃(System.DllNotFoundException)。 由于以上所有原因,我有一个问题 - 是否可以在Winows上的Mono应用中使用Cairo?

P.S。如果有任何帮助,将在稍后添加错误窗口截图。

2 个答案:

答案 0 :(得分:1)

您不应该尝试将已编译的cairo库复制到bin文件夹中。单声道(或MonoDevelop - 不确定此部分)是否附带所需的库。您只需点击参考文件夹,然后点击编辑参考(类似于Visual Studio)即可添加它们。

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

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

答案 1 :(得分:1)

我认为你错过了一些步骤。

尝试在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 ();