지난 포스팅 "대량 텍스트 인쇄를 지원하는 PrintDocument 파생 개체 게시 및 소스 코드 공개"에 대해 이야기해보겠습니다.
기사에서는 System.드로잉.Printing.PrintDocument에서 상속된 개체를 게시했습니다. 이 개체는 파일 스트림과 텍스트 문자열에서 인쇄 작업 문서 생성을 지원합니다. 당시에는 이를 주의 깊게 테스트하지 않았으나 큰 논리가 있음을 발견했습니다. 그 안에 버그가 있습니다.
버그의 증상은 문자열 할당을 사용하여 개체 인스턴스를 생성하는 경우 인쇄 미리 보기 중에 문서 내용이 두 번 인쇄되는 것을 보고 놀라게 된다는 것입니다. 그리고 나중에서야 이 문제를 발견했습니다.
검색해보니 이유가 이상하네요.
원칙은 한 번에 한 줄의 텍스트를 읽으려면 System.IO.StringReader 클래스를 리더로 사용한다는 것입니다. 생성자는 텍스트 내용을 저장하기 위해 전달된 문자열이며, StringReader.ReadLine() 메서드를 사용하여 텍스트를 읽고 인쇄된 내용을 생성합니다.
하지만 독자가 마지막 내용을 읽었는지 확인하는 메커니즘을 구현해야 하는데 StringReader.Peek() 메서드는 그 뒤에 내용이 있는지 감지하고 내용이 없으면 -1 값을 반환합니다. . 테스트 해본 결과 어떻게 감지해도 -1이 반환되지 않고, 대신 내용을 두 번 입력하면 -1이 반환되므로 동일한 내용이 두 번 표시됩니다.
이 버그는 수정되었습니다. 이번에는 내용을 두 번 입력할 필요가 없습니다. 다운 받으신 분들은 다시 다운 받아주세요.
이제 PrintPreveiwControl 컨트롤에 대해 이야기하겠습니다.
가장 먼저 주목해야 할 점은 이것이 새로운 인쇄 미리보기 창이 아니라 사용자 정의 창 컨트롤이라는 것입니다. 인쇄미리보기를 표시하는 인쇄미리창 부분입니다. 사용하시려면 윈도우 폼을 생성하신 후 사용하셔야 합니다.
솔직히 말해서 .net에 있는 마이크로소프트 자체의 인쇄 미리보기 창은 보기에도 좋지 않고 사용하기도 쉽지 않아서 마이크로소프트는 System.Windows.Forms.PrintPreviewControl 컨트롤을 제공하는데 이 컨트롤도 별로 좋지 않습니다. 주된 이유는 마우스 휠을 지원하지 않는다는 점이며, 가장 중요한 것은 인쇄 페이지 계산을 지원하지 않는다는 점입니다. 인쇄 미리보기 시 사용 가능한 페이지 수는 "이전 페이지" 및 인쇄 미리보기 창의 "다음 페이지".
그래서 저는 Reflector를 사용하여 Microsoft의 PrintPreviewControl 컨트롤을 디컴파일하고 원본 코드를 사용하여 "OnMouseWheel" 이벤트 핸들러를 추가했습니다. OnMouseWheel은 스크롤할 때 마우스 휠의 작동을 처리하도록 특별히 설계되었습니다. 소스코드도 공개하세요.
OnMouseWheel 메서드에 주석을 많이 추가했는데, 마우스 휠을 다루고 싶은 친구들은 이 코드의 원리를 활용하면 됩니다.
다운로드 :
http://www.cnblogs.com/submaie/archive/2006/08/11/474568.html을
다운로드하려면 여기를 클릭하십시오.