Окна WPF без возможности изменения размера с окном с WindowStyle = Нет - PullRequest
2 голосов
/ 31 мая 2010

Мне нужно окно, похожее на следующее изображение: http://screenshots.thex9.net/2010-05-31_2132.png

(НЕ изменяет размер, но сохраняет стеклянную рамку)

Мне удалось заставить его работать с Windows Forms, но мне нужно использовать WPF. Чтобы заставить его работать в Windows Forms, я использовал следующий код:

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

Это именно то, что я хочу, но я не могу найти WPF-эквивалент. Самое близкое, что мне удалось получить с WPF, заставило Window игнорировать любой ввод мыши.

Любая помощь будет принята с благодарностью:)

Ответы [ 2 ]

2 голосов
/ 31 мая 2010

Очень простое решение - установить минимальный и максимальный размер каждого окна равными друг другу и фиксированный номер в конструкторе окон. просто так:

public MainWindow()
{
    InitializeComponent();

    this.MinWidth = this.MaxWidth = 300;
    this.MinHeight = this.MaxHeight = 300;
}

Таким образом, пользователь не может изменять ширину и высоту окна. также вы должны установить свойство "WindowStyle = None", чтобы получить стеклянную границу.

1 голос
/ 31 мая 2010

Вам необходимо добавить ловушку для цикла сообщений:

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;
    }
}
...