using System;
using System.Drawing;
using System.Drawing.Printing;
using System.Windows.Forms;
class PrinterSelectionDialog: Form
{
ComboBox combo;
public PrinterSelectionDialog()
{
Label label = new Label();
label.Parent = this;
label.Text = "Printer:";
label.Location = new Point(8, 8);
label.Size = new Size(40, 8);
combo = new ComboBox();
combo.Parent = this;
combo.DropDownStyle = ComboBoxStyle.DropDownList;
combo.Location = new Point(48, 8);
combo.Size = new Size(144, 8);
foreach (string str in PrinterSettings.InstalledPrinters)
combo.Items.Add(str);
Button btn = new Button();
btn.Parent = this;
btn.Text = "OK";
btn.Location = new Point(40, 32);
btn.Size = new Size(40, 16);
btn.DialogResult = DialogResult.OK;
AcceptButton = btn;
btn = new Button();
btn.Parent = this;
btn.Text = "Cancel";
btn.Location = new Point(120, 32);
btn.Size = new Size(40, 16);
btn.DialogResult = DialogResult.Cancel;
CancelButton = btn;
ClientSize = new Size(200, 56);
AutoScaleBaseSize = new Size(4, 8);
}
public string PrinterName
{
set { combo.SelectedItem = value; }
get { return (string) combo.SelectedItem; }
}
}
class PrintWithMargins: Form
{
public static void Main()
{
Application.Run(new PrintWithMargins());
}
public PrintWithMargins()
{
Text = "Print with Margins";
Menu = new MainMenu();
Menu.MenuItems.Add("&File");
Menu.MenuItems[0].MenuItems.Add("&Print...",
new EventHandler(MenuFilePrintOnClick));
}
void MenuFilePrintOnClick(object obj, EventArgs ea)
{
PrintDocument prndoc = new PrintDocument();
PrinterSelectionDialog dlg = new PrinterSelectionDialog();
dlg.PrinterName = prndoc.PrinterSettings.PrinterName;
if (dlg.ShowDialog() != DialogResult.OK)
return;
prndoc.PrinterSettings.PrinterName = dlg.PrinterName;
prndoc.DocumentName = Text;
prndoc.PrintPage += new PrintPageEventHandler(OnPrintPage);
prndoc.Print();
}
void OnPrintPage(object obj, PrintPageEventArgs ppea)
{
Graphics grfx = ppea.Graphics;
RectangleF rectf = new RectangleF(
ppea.MarginBounds.Left -
(ppea.PageBounds.Width - grfx.VisibleClipBounds.Width) / 2,
ppea.MarginBounds.Top -
(ppea.PageBounds.Height - grfx.VisibleClipBounds.Height) / 2,
ppea.MarginBounds.Width,
ppea.MarginBounds.Height);
grfx.DrawRectangle(Pens.Black, rectf.X, rectf.Y,
rectf.Width, rectf.Height);
grfx.DrawLine(Pens.Black, rectf.Left, rectf.Top,
rectf.Right, rectf.Bottom);
grfx.DrawLine(Pens.Black, rectf.Right, rectf.Top,
rectf.Left, rectf.Bottom);
}
}