7

私はGtk#とGdk#の完全な初心者であり、開始方法について完全に迷っています。

私がやろうとしているのは、widget / pixmap / imageに点と線を描き、それをgtkアプリケーションに表示することだけです。これまでのところ、メソッドとメソッドにアクセスするためのオブジェクトを
作成する必要があることを理解しています。ただし、オブジェクトをインスタンス化するには、オブジェクトが必要です。どちらのオブジェクトコンストラクターもパラメーターを取りますが、ここで何を渡す必要があるのか​​わかりません。または、GCコンストラクターがDrawableオブジェクトを取得し、DrawableコンストラクターがGCオブジェクトを取得することもできます...ここで円を描きます!Gdk.drawableDrawPoints(Point[] points)DrawLine(Point[] points)DrawableGdk.GCIntPtrIntPtr

これは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.GCandGdk.Drawableクラスを使用して、Gtkウィジェットにポイントやラインを表示するのを手伝ってもらえますか?たぶん、上記のコードを機能させることによって?または、このgdkライブラリを使用したC#のチュートリアルへのリンクはありますか?

4

1 に答える 1

6

そのため、かなりの忍耐の末、最終的に Gdk# を使い始める方法の答えを見つけました。

基本的に、描画をトリガーできるのはイベントのみです。メソッドから図面を直接呼び出そうとしましたが、うまくいきませんでした。C# に欠けていた基本的なコードは次のとおりです。

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);
    }
}

ここでは、メイン ウィンドウを構築し、すべての描画を OnExposeEvent メソッドに書き込みます。このメソッドは、ウィジェットを (完全または部分的に) 再描画する必要があるときに呼び出されます。そこで、「Drawable」パラメーターを使用して Gdk.GC オブジェクト (コンテキスト) をインスタンス化する必要があります。Gdk.Pixmap または Gdk.Window という選択肢はあまりありません。Gdk.Window を選択したのは、描画するのに最も簡単な面だったからです。次に、コンテキスト オブジェクトをカスタマイズして、描画方法を決定できます。

最後に、描画したい Drawable オブジェクトから直接、描画メソッドを呼び出すことができます。ここでは、一連の 8 つの接続点をプロットしたかっただけです。

これが、この gdk# 名前空間のロジックを理解しようとしている他のユーザーに役立つことを願っています。

于 2012-02-06T01:36:09.760 に答える