[Gtk-sharp-list] [Solved] Scrollwindow don't works inside Gtk.Fixed

Thomas Zühlke muell_muell_ at gmx.net
Sun Apr 23 09:55:29 EDT 2006


Okay, I solved the problem by myself. It is very easy. I must use the 
"AddWithViewport" function of the ScrolledWindow-Class, instead of using 
only the "Add" function!

Thomas Zühlke wrote:

>Hi *,
>
>i have build a "mini" example for my problem (please see the 
>attachment). There is a Gkt.Window and it is filled with a 
>Scrolledwindow. This Scolledwindow is filled with a EventBox and this 
>EventBox is filled with a Fixed. :-)
>If you perform a right-mouse-button-press on the window, a black filled 
>DrawingArea is created on the Fixed. This DrawingArea can be moved by 
>holding down left-mouse-button.
>The problem is that there should be created scollbars when i move the 
>DrawingArea out of the windowborder or if i make the window smaller. Is 
>this possible that there will be scrollbars shown?
>
>Thomas
>  
>
>------------------------------------------------------------------------
>
>using System;
>using System.Collections.Generic;
>using System.Text;
>using Gtk;
>
>namespace GtkFixed_Scrollbars {
>    class Program {
>        static void Main(string[] args) {
>            Application.Init();
>            MainWindow hp = new MainWindow("Hallo");
>            hp.ShowAll();
>            Application.Run();
>        }
>    }
>
>    public class MainWindow : Gtk.Window{
>        public Gtk.Fixed FixedWidget;
>        public Gtk.EventBox EventBoxWidget;
>        public List<Gtk.DrawingArea> drawings = new List<DrawingArea>();
>
>        private Gdk.GC gc_black;
>        private double mouse_x,mouse_y;
>
>        public MainWindow(string title):base(title){
>            this.Destroyed += new EventHandler(MainWindow_Destroyed);
>            this.SetDefaultSize(500, 500);
>
>            FixedWidget = new Fixed();
>            EventBoxWidget = new EventBox();
>            EventBoxWidget.Events = Gdk.EventMask.AllEventsMask;
>            EventBoxWidget.ButtonPressEvent += new ButtonPressEventHandler(event_box_ButtonPressEvent);
>            
>            // putting all things together
>            EventBoxWidget.Add(FixedWidget);
>            Gtk.ScrolledWindow sw = new ScrolledWindow();
>            sw.Add(EventBoxWidget);
>            this.Add(sw);
>        }
>
>        void MainWindow_Destroyed(object sender, EventArgs e) {
>            Application.Quit();
>        }
>
>        private void event_box_ButtonPressEvent(object o, ButtonPressEventArgs args) {
>            if (args.Event.Button == 3) {
>                AddDrawingArea(
>                    FixedWidget,
>                    (int)args.Event.X,
>                    (int)args.Event.Y);
>            }
>        }
>        
>        #region some stupid DrawingArea functions
>        private void AddDrawingArea(Gtk.Fixed FixedOn, int x, int y) {
>            MyDA da = new MyDA();
>            da.SetSizeRequest(30, 30);
>            da.Events = Gdk.EventMask.AllEventsMask;
>            da.MotionNotifyEvent += new MotionNotifyEventHandler(DrawingArea_MotionNotifyEvent);
>            da.Realized += new EventHandler(DrawingArea_Realized);
>            da.ExposeEvent += new ExposeEventHandler(DrawingArea_ExposeEvent);
>            da.ButtonPressEvent += new ButtonPressEventHandler(DrawingArea_ButtonPressEvent);
>            da.Position = new Gdk.Point(x, y);
>            FixedOn.Put(da, x, y);
>            FixedOn.ShowAll();
>        }
>
>        private void DrawingArea_ButtonPressEvent(object o, ButtonPressEventArgs args) {
>            mouse_x = args.Event.X;
>            mouse_y = args.Event.Y;
>        }
>
>        private void DrawingArea_ExposeEvent(object o, ExposeEventArgs args) {
>            MyDA da = (MyDA)o;
>            da.GdkWindow.DrawRectangle(gc_black, true, 0, 0, da.Allocation.Width, da.Allocation.Height);
>        }
>
>        private void DrawingArea_Realized(object sender, EventArgs e) {
>            MyDA da = (MyDA)sender;
>            da.ModifyBase(Gtk.StateType.Normal, new Gdk.Color(0, 0, 0));
>            gc_black = da.Style.BaseGC(Gtk.StateType.Normal);
>        }
>
>        private void DrawingArea_MotionNotifyEvent(object o, MotionNotifyEventArgs args) {
>            MyDA da = (MyDA)o;
>            Gdk.EventMotion ev = args.Event;
>            Gdk.ModifierType state;
>            state = ev.State;
>            if (state == Gdk.ModifierType.Button1Mask) {
>                // holding down left mousebutton and moving
>                double move_x_to = (da.Position.X + ev.X) - mouse_x;
>                double move_y_to = (da.Position.Y + ev.Y) - mouse_y; ;
>                da.Position = new Gdk.Point((int)move_x_to, (int)move_y_to);
>                FixedWidget.Move(da, (int)move_x_to, (int)move_y_to);
>            }
>        }
>        #endregion
>    }
>
>    public class MyDA : Gtk.DrawingArea {
>        public Gdk.Point Position;
>        public MyDA() : base() { }
>    }
>
>}
>  
>
>------------------------------------------------------------------------
>
>_______________________________________________
>Gtk-sharp-list maillist  -  Gtk-sharp-list at lists.ximian.com
>http://lists.ximian.com/mailman/listinfo/gtk-sharp-list
>  
>


More information about the Gtk-sharp-list mailing list