[C#] Windows 포맷 응용 프로그램으로 Word와 화면을 분할할 때 까다로운 화제 - Microsoft.Office.Interop.Word

어떤 앱을 개발할 때 두 창이 같은 크기로 화면에 배열될 때 빠져드는 이야기다.
프로그래밍 경험이 얕은 사람뿐만 아니라 베테랑도 빠질 가능성이 있으니 참고가 됐으면 좋겠다.
화면 분할 이미지(이상)
화면에 메인 창 크기와 같은 크기의 Word를 배열합니다.

화면 분할 이미지(현실)
Word의 크기는 메인 창보다 크고 시작 위치가 크며 오른쪽으로 이동하여 화면을 초과합니다.

까닭
다음 속성은 px 단위가 아니라point 단위입니다.
- objWord.ActiveWindow.Top
- objWord.ActiveWindow.Left
- objWord.ActiveWindow.Width
- objWord.ActiveWindow.Height
px 단위로point 단위를 지정하면 예상보다 크기가 큽니다.
그래서 objWordComs는ActiveWindow.Left에서 설정한 값 위에서 오른쪽으로 설정해서 시작합니다. 화면에서 초과됩니다.
말하지 않아도 안다.ActiveWindow.하이트도 예상보다 크기가 클 것이다.
소스 코드
Rectangle rectangle = Screen.GetWorkingArea(this.FindForm());
this.FindForm().SetBounds(0, 0, this.FindForm().Width, rectangle.Height, BoundsSpecified.All);

Microsoft.Office.Interop.Word.Application objWordComs = new Microsoft.Office.Interop.Word.Application();
objWord.Documents.Open(filePath);
objWord.ActiveWindow.WindowState = Microsoft.Office.Interop.Word.WdWindowState.wdWindowStateNormal;
objWord.ActiveWindow.Top = 0;
objWord.ActiveWindow.Left = Convert.ToInt32(this.FindForm().Width);
objWord.ActiveWindow.Width = Convert.ToInt32((rect.Width - this.FindForm().Width) / 2);
objWord.ActiveWindow.Height = Convert.ToInt32(rect.Height);
해결책
다음 속성의 값을 설정할 때는 PixelsToPoint 방법을 사용한 다음 설정합니다.
- objWord.ActiveWindow.Top
- objWord.ActiveWindow.Left
- objWord.ActiveWindow.Width
- objWord.ActiveWindow.Height
소스 코드
Rectangle rectangle = Screen.GetWorkingArea(this.FindForm());
this.FindForm().SetBounds(0, 0, this.FindForm().Width, rectangle.Height, BoundsSpecified.All);

Microsoft.Office.Interop.Word.Application objWord = new Microsoft.Office.Interop.Word.Application();
objWord.Documents.Open(filePath);
objWord.ActiveWindow.WindowState = Microsoft.Office.Interop.Word.WdWindowState.wdWindowStateNormal;
objWord.ActiveWindow.Top = 0;
objWord.ActiveWindow.Left = Convert.ToInt32(objWord.PixelsToPoints(this.FindForm().Width));
objWord.ActiveWindow.Width = Convert.ToInt32(objWord.PixelsToPoints((rect.Width - this.FindForm().Width) / 2));
objWord.ActiveWindow.Height = Convert.ToInt32(objWord.PixelsToPoints(rect.Height));

좋은 웹페이지 즐겨찾기