문제

내 문제는 기본 API를 사용하여 표준 컨트롤에서 누락 된 많은 Ricedit 기능을 추가하는 "확장 된"RichTextBox 컨트롤을 만들었다는 것입니다 (예 : 다른 글꼴 특성을 변경하는 선택없이 단일 글꼴 속성을 수정합니다. Word Wrap [WordPad 등과 같은] 프린터에 랩. 컨트롤의 일부로 나는 RichTextBox의 형식 내용을 인쇄하는 데 사용되는 인쇄 문서를 노출시킵니다. WordWrap이 "프린터로 랩"으로 설정되면 EM_SETTARGETDEVICE 메시지를 RichTextBox로 보내고 적절한 길이로 감싸도록합니다.

이것은 내 컨트롤의 WordWrap 속성을 변경할 때 모두 잘 작동합니다. 그러나 그 후 인쇄 문서가 수정되면 알 수있는 방법이 없습니다. 따라서 사용자가 인쇄 문서에서 마진을 변경했을지라도 RichTextBoxEx는 WordWrap 속성이 변경 될 때까지 새 폭에 대해 EM_SETTARGETDEVICE를 재현하지 않습니다.

나는 이것을 극복 할 수있는 몇 가지 옵션을 보았지만 나는 그들 중 하나의 큰 팬이 아닙니다. 다음은 다음과 같습니다.

  1. Control에서 외부에서 호출 해야하는 UpdatePrintDocument () 메소드 또는 Similiil을 추가하십시오 (예 : 부모 양식의 페이지 세트 updialog)는 인쇄 문서에서 설정을 업데이트했습니다. 단점 : 컨트롤을 배포하여 가능한 한 친절하게 만들고 싶습니다. 다른 사람이 할 수없는 인쇄 서류 설정을 성공적으로 업데이트 할 때마다 메소드를 호출하는 것을 기억할 수 있습니다. 프로 : 구현하기가 간단합니다.

  2. PrintDocument의 기본 새로운 PrintDocumentEx 클래스를 작성하고 필요한 "변경된"이벤트를 구현합니다. 단점 : 충분하지 않을 수도 있고, PrintsettingSex, PagesettingSex 등을 만들어야 할 수도 있습니다. Pro : 한 번 구현하면 아무도 다시 걱정할 필요가 없습니다.

나는 정말로 #2가 내가 가야 할 옵션이라고 생각하지만, 다음 인스턴스에는 재사용 할 수 없습니다. 내가 찾고있는 것은 미래 상황에서 적용 할 수 있기 때문에 "일반 속성 변경 이벤트"를 기존 클래스 속성에 첨부하는 방법이라고 생각합니다. 너희들이 나를 위해 무엇을 가지고 있는지 걱정한다 :-)

도움이 되었습니까?

해결책 2

내 printDocumentEx (및 관련) 분류 된 후에는 작동하지 않았습니다. PrintDialog 및 관련 컨트롤을 살펴보면 기본 메소드를 사용하여 인쇄 문서를 정확하게 업데이트하기 때문입니다. 그래서 "예를 들어"클래스의 속성에 첨부 한 이벤트는 세트 액세서가 호출되지 않았기 때문에 결코 해고되지 않았습니다.

다른 팁

질문을 올바르게 이해 한 경우 WordWrap 속성이 변경 될 때 필요한 정보가 전송됩니다.

다른 것들이 변경되면 이벤트가 인쇄 문서를 업데이트하지 않습니다. 다음에 WordWrap 속성이 변경되면 모든 정보가 전송됩니다.

이 문제를 해결하는 해킹 방법은 인쇄 문서로 보내려는 속성을 변경할 때마다 WordWrap 속성을 변경하는 것입니다. 임시 가치로 변경 한 다음 다시 변경하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top