Is removing the title bar an option?  You could set the FormBorderStyle to
none.  Users will then have difficulty moving your window.  The problem then
of course is that your window will not have a normal title bar...

Unfortunately, if you leave the title bar present, it looks like Windows
Forms provides no hooks to intercept the resizing or moving behaviour.
There is a pretty barf-worthy solution which involves hooking the WndProc.
Rama Krishna beat me to it with an WM_NCHITTEST solution.  My solution was
less nice, since it involved some unsafe code.  In case you're interested,
here it is:


    [StructLayout(LayoutKind.Sequential)]
    struct WINDOWPOS {
        public IntPtr hwnd;
        public IntPtr hwndInsertAfter;
        public int  x;
        public int  y;
        public int  cx;
        public int  cy;
        public uint flags;
    }
    protected override void WndProc(ref System.Windows.Forms.Message m) {
        // WM_WINDOWPOSMOVING
        if (m.Msg == 0x46) {
            unsafe {
                // Force window position and size to
                // remain the same
                WINDOWPOS* wp =
                  (WINDOWPOS*) m.LParam.ToPointer();
                wp->x = Location.X;
                wp->y = Location.Y;
                wp->cx = Size.Width;
                wp->cy = Size.Height;
            }
            return;
        }
        base.WndProc(ref m);
    }

As you can see, this requies unsafe code.  I usually avoid doing anything
with the WndProc, so there may be a way of doing this that I'm unaware of.

But Rama Krishna's solution doesn't require any unsafe code - he processes a
message that doesn't need pointers to structures to be retrieved.  So I
would go with his code.  (Ideally there would be a native .NET way of doing
this, but I don't think there is.)


Someone else suggested double buffering, which I don't think will help here.
Whilst this is a good solution for avoiding flicker within your own window,
I don't think it will help in avoiding flicker caused by the motion of your
window.  (Your window never actually gets redrawn when it is dragged, its
contents are merely moved.)


--
Ian Griffiths
DevelopMentor

----- Original Message -----
From: "Alois Reisinger" <[EMAIL PROTECTED]>


Hi everyone,

I have a form that is programmatically attached to my glue i a way like you
can see below.
This works fine. The glued window moves along with the "parent" one.
But what i try to move the glued window itself with the mouse, it produces
some awful flicker, although it stayes at its place.

So how can i prevent this?

Best regards
alois

--snip
// Donīt worry about initialization of some variables....
// itīs just a snippet

public Constructor()
{
 LocationChanged += new System.EventHandler(this.LocChange);
 Resize          += new System.EventHandler(this.LocChange);
 gluedwindow.Resize += new System.EventHandler(this.LocChange);
 gluedwindow.LocationChanged += new System.EventHandler(this.LocChange);
}

[...]

private void LocChange(object sender,System.EventArgs e)
{
 if (gluedwindow!=null)
 {
  gluedwindow.Left = this.Right + 1;
  gluedwindow.Top  = this.Top;
  System.Drawing.Size gs = gluedwindow.Size;
  gs.Height = this.Size.Height;
  gluedwindow.Size = gs;
 }
}
---snap

You can read messages from the DOTNET archive, unsubscribe from DOTNET, or
subscribe to other DevelopMentor lists at http://discuss.develop.com.

Reply via email to