테두리가없는 최대화 된 창으로 시작하는 Windows 응용 프로그램 (C#으로 작성)이 있습니다.SetWindowPos는 매번 다른 위치로 창을 이동합니다.
사용자가 응용 프로그램에서 버튼을 클릭하면 창을 복원 (즉, 최대화 된 상태 제거)하고 크기를 특정 크기로 조정 한 다음 화면의 오른쪽 하단으로 이동하려고합니다.
제 문제는 SetWindowPos()
을 호출 할 때 창 크기를 올바르게 조정해도 항상 화면의 오른쪽 하단에 배치되지 않는다는 것입니다. 가끔은 그렇지만, 다른 시간에 화면이 화면의 다른 곳에 배치됩니다 (거의 무시하는 이유 때문에 마치 "뛰어 다니는 것처럼").
내가 뭘 잘못하고 있니?
여기 내 코드입니다. 내 윈도우가 모든 다른 윈도우의 위에 있어야하기 때문에 -1을 두 번째 매개 변수로 SetWindowPos에 전달합니다.
NativePoint point = new NativePoint { x = x, y = y };
ClientToScreen(handler, ref point);
를하고 전화를 변경 :
public void MoveAppWindowToBottomRight()
{
Process process = Process.GetCurrentProcess();
IntPtr handler = process.MainWindowHandle;
ShowWindow(handler, 9); // SW_RESTORE = 9
int x = (int)(System.Windows.SystemParameters.PrimaryScreenWidth - 380);
int y = (int)(System.Windows.SystemParameters.PrimaryScreenHeight - 250);
NativePoint point = new NativePoint { x = x, y = y };
ClientToScreen(handler, ref point);
SetWindowPos(handler, -1, point.x, point.y, 380, 250, 0);
}
[StructLayout(LayoutKind.Sequential)]
public struct NativePoint
{
public int x;
public int y;
}
[SystemParameters.PrimaryScreenWidth] (https://msdn.microsoft.com : 당신이 계정에 작업 표시 줄의 크기를 가지고 싶다면
또한, 대신
SystemParameters.PrimaryScreen***
의Screen.WorkingArea
property을 활용한다 /en-us/library/system.windows.systemparameters.primaryscreenwidth.aspx) 및 [SystemParameters.PrimaryScreenHeight] (https://msdn.microsoft.com/en-us/library/system.windows.systemparameters.primaryscreenheight.aspx) 작업 표시 줄이 차지하는 공간을 고려하지 마십시오. 이것은이 질문의 문제와 관련이 없습니다. 당신이 해결해야 할 또 다른 버그입니다. – IInspectable