2012-08-27 4 views
0

일부 DLL에서 WebBrowser를 사용하여 스크린 샷을 만듭니다.WebBrowser 컨트롤 : 최대화 방법

때때로 극대화되지 않는 주요 문제는 Internet Explorer의 설정이 필요하다는 것입니다.

내 질문은 어떻게 C#을 통해 WebBrowser 컨트롤을 최대화하는 것입니까?

감사합니다.

  Rectangle r = new Rectangle(); 

      r.X = cropToRectangle.X; 
      r.Y = cropToRectangle.Y; 
      r.Width = cropToRectangle.Width; 
      r.Height = cropToRectangle.Height; 

      Point p = new Point(); 
      p.X = scrollTo.X; 
      p.Y = scrollTo.Y; 

      var sb = Math.Max(SystemInformation.VerticalScrollBarWidth, SystemInformation.HorizontalScrollBarHeight); 

      var size = new Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height); 

      using (var form = 
       new FocuslessForm 
       { 
        Width = size.Width + sb, 
        Height = size.Height + sb, 
        Padding = new Padding(0), 
        Margin = new Padding(0), 
        FormBorderStyle = FormBorderStyle.None, 
        Opacity = 0, 
        TabStop = false, 
        ShowInTaskbar = false 
       }) 
      { 
       var webBrowser1 = new WebBrowser 
        { 

         Padding = new Padding(0), 
         Margin = new Padding(0), 
         Dock = DockStyle.Fill, 
         Url = url, 
         TabStop = false 
        }; 
       form.Controls.Add(webBrowser1); 

       var finished = false; 

       webBrowser1.DocumentCompleted += delegate 
       { 
        webBrowser1.Document.Window.ScrollTo(p); 
        finished = true; 
       }; 

       form.Show(); 

       while (!finished) 
       { 
        Application.DoEvents(); 
       } 

       image = CaptureBrowserScreenshot(webBrowser1, r); 
       form.Close(); 
      } 
+1

[가능한 탭 페이지에 속하는 컨트롤 그룹의 전체 화면보기를 만드는 방법] (http://stackoverflow.com/questions/4621443/how-create-a-fullscreen-view-of-a) -group-of-controls-that-a-tab-page) –

+0

@HansPassant 요점을 알려주세요! –

답변

1

음, WebBrowser는 자신의 프로그램 창에 포함 된 컨트롤입니다. 별도의 프로세스로 IE를 실행하지 않습니다 (렌더러 및 기타 중요한 코드에 대해 IE에 연결 함에도 불구하고). 따라서 컨트롤의 위치와 크기는 포함 된 위치에 따라 다릅니다.

컨트롤을 양식에 채워 넣는 것을 볼 수 있습니다. 이것은 좋은 첫 걸음입니다. 이제 WebBrowser 컨트롤이 Form의 Controls 계층 구조에 추가되어 있는지 확인해야합니다. 그러면 폼이 최대화되어야합니다. 이를 수행하는 방법은 Form의 WindowState 속성을 WindowState.Maximized로 설정하는 것입니다.

+0

감사합니다. 내 업데이트 된 코드를 살펴볼 수 있습니까? 제가 누락 된 부분은 무엇입니까? 오! 내 생각에이 WindowState = FormWindowState.Maximized ?? –

+1

새 FocuslessForm의 속성을 초기화 할 때 WindowState를 FormWindowState.Maximized로 설정하십시오. 필요한 모든 것이어야합니다. 하나 더; Application.DoEvents는 일반적으로 악으로 간주됩니다. 대신 스크린 샷을 캡처하고 DocumentCompleted의 이벤트 처리기로 양식을 닫는 코드를 넣는 것을 고려하십시오. 그것은 똑같은 일을 할 것이지만, 다른 Windows 메시지 ("비 원자 연산"과 관련된 오류를 일으킬 수있는 호출을 수동으로 트리거하지 않고, 다른 모든 핸들러를 실행하도록 프로그램에 지시하고 있습니다. 완료 될 핸들러). – KeithS