Здравствуйте, как словить событие изменения размера окна? Я имею ввиду что бы в окне происходили определённые действия перед тем, как WindowState станет Maximized, вне зависимости от того, каким образом WindowState станет Maximized
Ответ
private const int WM_SYSCOMMAND = 0x0112;
private const int SC_MINIMIZE = 0xF020;
public MainWindow()
{
InitializeComponent();
}
[SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]
private IntPtr WndProc(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
switch (msg)
{
case WM_SYSCOMMAND:
int command = wParam.ToInt32() & 0xfff0;
if (command == SC_MINIMIZE) {
//before min
} else {
//before max
}
break;
}
return IntPtr.Zero;
}
private void Window_SourceInitialized(object sender, EventArgs e)
{
IntPtr windowHandle = (new WindowInteropHelper(this)).Handle;
HwndSource src = HwndSource.FromHwnd(windowHandle);
src.AddHook(new HwndSourceHook(WndProc));
}
код внутри SourceInitialized лучше исполнять именно внутри этого события или любого другого, когда окно уже про инициализировано ибо
(new WindowInteropHelper(this)).Handle
будет выдывать 0 пока оно не инициализируется
Комментариев нет:
Отправить комментарий