Search code examples
c#wpfwindowborderaero-glass

Non-resizeable, bordered WPF Windows with WindowStyle=None


Basically, I need a window to look like the following image: http://screenshots.thex9.net/2010-05-31_2132.png

(Is NOT resizeable, yet retains the glass border)

I've managed to get it working with Windows Forms, but I need to be using WPF. To get it working in Windows Forms, I used the following code:

    protected override void WndProc(ref Message m)
    {
        if (m.Msg == 0x84 /* WM_NCHITTEST */)
        {
            m.Result = (IntPtr)1;
            return;
        }
        base.WndProc(ref m);
    }

This does exactly what I want it to, but I can't find a WPF-equivalent. The closest I've managed to get with WPF caused the Window to ignore any mouse input.

Any help would be hugely appreciated :)


Solution

  • You need to add a hook for the message loop :

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        var interopHelper = new WindowInteropHelper(this);
        var hwndSource = HwndSource.FromHwnd(interopHelper.Handle);
        hwndSource.AddHook(WndProcHook);
    }
    
    private IntPtr WndProcHook(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
    {
        if (msg == 0x84 /* WM_NCHITTEST */)
        {
             handled = true;
             return (IntPtr)1;
        }
    }