2012-02-02 2 views
6

Я полный новичок с Gtk # и Gdk #, и я полностью потерял, как начать.Как использовать библиотеку Gdk # в C# (моно)?

Все, что я пытаюсь сделать, это нарисовать точки и строки в любом виджете/pixmap/image, а затем отобразить их в моем приложении gtk.
До сих пор я понимаю, что должен создать объект Gdk.drawable для доступа к методам DrawPoints(Point[] points) и DrawLine(Point[] points). Однако для создания объекта Drawable мне нужен объект Gdk.GC. Оба конструктора объектов принимают параметр , и я не знаю, что Я должен пройти здесь ?! Или, конструктор GC мог бы также взять объект Drawable, а конструктор Drawable мог бы взять объект 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?

+0

Где происходит ошибка компиляции? Попробуйте включить только код, относящийся к вашему вопросу. (Вопрос, как «создать экземпляр объекта Gdk с помощью Gdk #?». Вопрос «кто-то объяснит мне Gdk # для меня», скорее всего, будет закрыт.) – millimoose

+0

Кроме того, поиск «учебника по монографическому рисованию» дает следующее: http://www.mono-project.com/Mono.Cairo – millimoose

+0

ОК, я перефразировал свой первоначальный вопрос, надеюсь, теперь это яснее. О Каире, это не Gdk ... в чем смысл этой библиотеки Gdk #, если ее никто не понимает? и почему нет какого-либо онлайн-ресурса, чтобы понять его, кроме их неполного справочника? – djahma

ответ

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 методы. Этот метод вызывается, когда любой виджет должен (полностью или частично) перерисовываться. Там вам нужно создать экземпляр объекта Gdk.GC (контекст) с помощью параметра «Drawable». Не так много выбора: Gdk.Pixmap или Gdk.Window. Я выбрал Gdk.Window, так как это была самая простая поверхность. Затем вы можете настроить объект контекста, чтобы решить, как он будет нарисован.

Наконец, и непосредственно из объекта Drawable, который вы хотите нарисовать, вы можете вызвать методы рисования: здесь я просто хотел построить серию из 8 связанных точек.

Надеюсь, это поможет некоторым другим пользователям, пытающимся понять логику этого пространства имен gdk #.

+1

Я искал подробную информацию о том, как создать GC для ЛЕТ! С тех пор я сбрасывал стандартные GC. Моно-документы, как правило, ориентированы на базовые и гипер-продвинутые stuf. Большое спасибо! –