Я разрабатываю собственное окно в WPF, и я пытаюсь реализовать функцию изменения размера, которую я использовал ранее в WinForms. По какой-то причине возвращаемое значение моего WndProc не дает мне надлежащего результата.WPF Borderless window resize
У меня есть класс NativeMethods для всех моих WNDPROC сообщений и результатов:
public class NativeMethods
{
public const int WM_NCHITTEST = 0x84;
public const int HTCAPTION = 2;
public const int HTLEFT = 10;
public const int HTRIGHT = 11;
public const int HTTOP = 12;
public const int HTTOPLEFT = 13;
public const int HTTOPRIGHT = 14;
public const int HTBOTTOM = 15;
public const int HTBOTTOMLEFT = 16;
public const int HTBOTTOMRIGHT = 17;
}
А вот код позади моего окна:
public partial class MainWindow : Window
{
const int GripSize = 16;
const int BorderSize = 7;
public MainWindow()
{
InitializeComponent();
}
protected override void OnSourceInitialized(EventArgs e)
{
base.OnSourceInitialized(e);
IntPtr windowHandle = new WindowInteropHelper(this).Handle;
HwndSource windowSource = HwndSource.FromHwnd(windowHandle);
windowSource.AddHook(WndProc);
}
private IntPtr WndProc(IntPtr hwnd, int msg,
IntPtr wParam, IntPtr lParam, ref bool handled)
{
if (msg == NativeMethods.WM_NCHITTEST)
{
int x = lParam.ToInt32() <<16>> 16, y = lParam.ToInt32() >> 16;
Point pos = PointFromScreen(new Point(x, y));
if (pos.X > GripSize &&
pos.X < ActualWidth - GripSize &&
pos.Y >= ActualHeight - BorderSize)
{
return (IntPtr)NativeMethods.HTBOTTOM; // This doesn't work?
}
// Top, Left, Right, Corners, Etc.
}
return IntPtr.Zero;
}
}
Я ожидал, что курсор изменится на " изменить размер стрелки вниз »и функциональность изменения размера, чтобы работать так же, как в моем проекте WinForms. Я установил точки останова, и возврат HTBOTTOM срабатывает, когда курсор находится в ожидаемом месте. В XAML у меня ResizeMode установлен в CanResize, а WindowStyle - None. Что я делаю не так?
Почему бы не использовать 'ResizeMode = "CanResizeWithGrip"'? Вы пытаетесь добиться этого эффекта (просто для его изменения вокруг окна без «Grip»)? –
Потому что я все еще хочу иметь возможность изменять размер окна с любого угла или стороны, как обычная функциональность. Я понял вопрос, и я отправляю ответ сейчас. –