Avatar billede lauritsen Nybegynder
10. april 2005 - 23:43 Der er 5 kommentarer og
1 løsning

Gtk# Gtk.DrawArea - hvordan tegner man?

Jeg prøver at tegne på et Gtk.DrawArea. Det burde være simpelt. Men efter hvad jeg kan se fra følgende sider, gør jeg det rigtigt:
http://www-zeuthen.desy.de/computing/documentation/perl/gtkperl-tutorial/tut-56.html
http://www.gtk.org/tutorial/sec-thedrawingareawidget.html
http://www.go-mono.com/docs/index.aspx?tlink=6@ecma%3a971%23DrawingArea%2f

Her er det relevante stykke af min kode:


using System;
using Gdk;
using Gtk;

[...]

int width = 500;
int height = 500;

DrawingArea d = new DrawingArea();
d.SetSizeRequest(width, eight);

//d.GdkWindow.DrawLine(d.Style.BaseGC(StateType.Normal), 10, 10, 120, 167);
//d.GdkWindow.DrawPoint(d.Style.ForegroundGC(StateType.Normal), 10, 10);
d.GdkWindow.DrawRectangle(d.Style.BlackGC, true, new Rectangle(30, 40, 50, 50));


Men noget går galt. Mit DrawingArea d kommer dog fint til syne i mit programvindue. Men det ser ud til, at d.GtkWindow ikke indeholder noget (<undefined value>), og jeg får en System.NullReferenceException. Men eksemplerne, jeg følger, kan jeg ikke se siger noget om, at man skal initialisere d.GtkWindow.

Hvad gør jeg galt?

Ekstra-spørgsmål: Hvor kan jeg finde en rigtig god tutorial til Gtk#? Den, Mono-projektet har liggende, er stadig ret mangelfuld, og eksemplet med lige nøjagtig DrawingArea, synes jeg, ikke er så godt.
Avatar billede lauritsen Nybegynder
10. april 2005 - 23:44 #1
(det samme sker, hvis jeg bruger en af de to udkommenterede linier istedet)
Avatar billede burningice Nybegynder
11. april 2005 - 16:12 #2
har du husket at tilføje et vindue til dit drawingarea?

Window win = new Window ("Layout sample");
win.SetDefaultSize (width, height);
win.Add(d);

d.GdkWindow.Draw_noget;
Avatar billede lauritsen Nybegynder
11. april 2005 - 16:45 #3
Mener du Gtk.Window? For så mener du vel "tilføjet dit DrawingArea til et vindue"? Men ja, jeg har skrevet mit eget vindue (som extender Gtk.Window), i hvilket DrawingArea'et fint dukker op i.

Eller mener du Gdk.Window? Den har jeg ikke læst så meget op på, ud over, at det ser ud til, at man skal bruge den i forbindelse med et Gdk.Pixmap (som skulle være en god idé at bruge for at undgå, at DrawingArea'et bliver tegnet lidt efter lidt under opdateringer).

Fandt i øvrigt et eksempel på brug af DrawingArea direkte i Gtk#: http://svn.myrealbox.com/viewcvs/trunk/gtk-sharp/sample/Scribble.cs?rev=27565&view=auto
Med basis i det fik jeg lavet mit program om, så det bruger et Pixmap, og så virker det :-)
Avatar billede lauritsen Nybegynder
11. april 2005 - 16:47 #4
Ah, ser at du skriver til sidst "d.GdkWindow.Draw_noget", så det er jo nok Gdk.Window, du refererer til. Jo, det må være det, jeg glemte. Skriv et svar, hvis du vil have pointene.
Avatar billede burningice Nybegynder
11. april 2005 - 16:52 #5
i følge monodoc har de denne initialiseringskode

                Window win = new Window ("Layout sample");
                win.SetDefaultSize (400, 300);

                win.Add (this);

hvor at this jo er et DrawingArea, så jeg gik ud fra at det var det du manglede
Avatar billede burningice Nybegynder
11. april 2005 - 16:53 #6
og det er rigtigt, min formulering burde have været, at tilføje DrawingArea til en Window
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester