반응형
찰스 페졸드의 WPF 를 읽으면서 정리한 인쇄(PrintEllipse) 소스.
책을 읽으면서 직접 코딩을 하면서 정리했던 소스들을 그대로 옮겨 보았다.
using System;
using System.Printing;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
namespace PrintEllipse
{
public class PrintEllipse : Window
{
private PrintTicket prntkt;
[STAThread]
public static void Main()
{
Application app = new Application();
app.Run(new PrintEllipse());
}
public PrintEllipse()
{
Title = "Print Ellipse";
FontSize = 24;
//윈도우 Content를 위한 스택 패널 생성
StackPanel stack = new StackPanel();
Content = stack;
//인쇄를 위한 버튼 생성
Button btn = new Button();
btn.Content = "_Print...";
btn.HorizontalAlignment = HorizontalAlignment.Center;
btn.Margin = new Thickness(24);
btn.Click += PrintOnClick;
stack.Children.Add(btn);
}
private void PrintOnClick(object sender, RoutedEventArgs e)
{
PrintDialog dlg = new PrintDialog();
if (prntkt != null) dlg.PrintTicket = prntkt;
//페이지지정 라디오버튼을 활성화하기 위해서는 UserPageRangeEnabled를 true로 해야 한다.
dlg.UserPageRangeEnabled = true;
//ShowDialog는 널 값이 가능한 bool을 반환하게 정의되어 있다. 대화상자 클래스의 ShowDialog 메소드는 true/false/null을 반환한다.
//사용자가 인쇄 버튼을 클릭하면 true를, 취소 버튼을 클릭하면 false를, 제목 옆의 닫기 버튼을 클릭하면 null을 반환한다.
//GetValueOrDefault 메소드는 if문을 위해 결과가 항상 bool 형태가 되게 null 값을 false로 바꾸어 준다.
if ((bool)dlg.ShowDialog().GetValueOrDefault())
{
prntkt = dlg.PrintTicket;
//DrawingVisual을 생성하고 DrawingContext를 준비
DrawingVisual vis = new DrawingVisual();
DrawingContext dc = vis.RenderOpen();
//타원을 출력
//PrintableAreaWidth와 PrintableAreaHeight는 페이지의 인쇄 가능 영역을 참조하는 것이 아니라 장치 독립적인 단위(1/96)로 페이지의 전체 물리적인 크기를 가리킨다.
dc.DrawEllipse(Brushes.LightGray, new Pen(Brushes.Black, 3),
new Point(dlg.PrintableAreaWidth / 2, dlg.PrintableAreaHeight / 2),
dlg.PrintableAreaWidth / 2 - 10, dlg.PrintableAreaHeight / 2 - 10);
//DrawingCOntext를 닫음
dc.Close();
//끝으로 페이지를 인쇄
dlg.PrintVisual(vis, "My First Print Job");
}
}
}
}
반응형
'C# 개발 > WPF 관련 서적 예제' 카테고리의 다른 글
Charles Petzold의 WPF Chap. 01 - SayHello 예제 소스 (0) | 2021.09.04 |
---|---|
Charles Petzold의 WPF Chap. 17 - ChooseFont 예제 소스 (0) | 2021.09.03 |
Charles Petzold의 WPF Chap. 17 - PrintBanner 예제 소스 (0) | 2021.09.03 |
Charles Petzold의 WPF Chap. 17 - PrintaBunchaButtons 예제 소스 (0) | 2021.09.02 |
Charles Petzold의 WPF Chap. 17 - PrintWithMargins 예제 소스 (0) | 2021.09.02 |