Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB .NET > контекст принтера


Автор: Корнелиус 27.7.2008, 13:40
Доброго дня всем!

У меня на форме расположена компонента геоинформационной системы, предоставляющая возможности работы  с картами MapInfo. У компоненты есть свой метод печати, корректный для векторной графики. Сигнатура следующая:

OBJECT.PrintMap(hDC, x, y, w, h)

OBJECT: represents a Map object
hDC:        Printer device context. Can be any device context.
x:               Upper left corner X in HIMETRIC units.
y:               Upper left corner Y in HIMETRIC units.
w:              Width in HIMETRIC units.
h:               Height in HIMETRIC units.

Так вот у меня вопрос, как получить контекст принтера в .Net для передачи в этот метод?

Автор: Bishop 27.7.2008, 14:19
Предположу, что вот так:
Код
private void button1_Click(object sender, EventArgs e)
{
    PrintDialog pdlg = new PrintDialog();
    pdlg.UseEXDialog = true; 
    if (pdlg.ShowDialog() != DialogResult.OK)
        return;
    System.Drawing.Printing.PrintDocument pd = new System.Drawing.Printing.PrintDocument();
    pd.PrinterSettings = pdlg.PrinterSettings;
    pd.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(pd_PrintPage);
    pd.Print();
}

void pd_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
    IntPtr hdc = e.Graphics.GetHdc();
    OBJECT.PrintMap(hdc, x, y, w, h);
    // ...
    e.Graphics.ReleaseHdc(hdc);
}

Если непонятен C#, посмотрите http://msdn.microsoft.com/en-us/library/system.windows.forms.printdialog.aspx. Фактически, hDC вы получите в момент печати страницы.

Автор: Корнелиус 27.7.2008, 18:58
Спасибо огромное

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)