문제:
LocationChanged 트리거 시 실행될 코드보다 최대화/복원 시 실행될 코드가 먼저 실행되어야 함
해결:
protected override void OnSourceInitialized(EventArgs e)
{
base.OnSourceInitialized(e);
((HwndSource)PresentationSource.FromVisual(this))?.AddHook(HookProc);
}
private const int WM_SYSCOMMAND = 0x0112;
private const int SC_RESTORE = 0xf122;
private const int SC_MAXIMIZE = 0xf032;
private IntPtr HookProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
switch (msg)
{
case WM_SYSCOMMAND:
switch (wParam.ToInt32())
{
case SC_MAXIMIZE:
// 최대화 시
break;
case SC_RESTORE:
// 복원 시
break;
}
break;
}
}
반응형