Страницы

Поиск по вопросам

понедельник, 16 декабря 2019 г.

Действие перед тем как изменить размер окна

#c_sharp #wpf #события


Здравствуйте, как словить событие изменения размера окна? Я имею ввиду что бы в окне
происходили определённые действия перед тем, как WindowState станет Maximized, вне
зависимости от того, каким образом WindowState станет Maximized.
    


Ответы

Ответ 1



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 пока оно не инициализируется

Ответ 2



private const int WM_SYSCOMMAND = 0x0112; private const int SC_MINIMIZE = 0xF020; private void music_SourceInitialized(object sender, EventArgs e) { IntPtr windowHandle = (new WindowInteropHelper(this)).Handle; HwndSource src = HwndSource.FromHwnd(windowHandle); src.AddHook(new HwndSourceHook(WndProc)); } [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) { } else { border_main.CornerRadius = new CornerRadius(0); border_bottom.CornerRadius = new CornerRadius(0); ResizeMode = ResizeMode.NoResize; WindowState = WindowState.Maximized; } break; } return IntPtr.Zero; }

Комментариев нет:

Отправить комментарий