注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

信息 灵感 创新

I? =Information,Inspiration,Innovation

 
 
 

日志

 
 
关于我

we are 5. Mathematics, Computation, Programming, Engineering, and Making fun of life.

网易考拉推荐

C# Graphics Programming笔记(六)  

2011-10-21 13:34:41|  分类: C# & .NET |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

这本书依旧是红皮书系列的,由Rod Stephens编写,网上有电子版的,使用搜索引擎一下就能找到,不过只有英文版的,好在对英文水平要求不高,过了CET-4绝对可以无障碍阅读。全书分8个章节,从简单的图形对象、画笔、刷子到复杂的位图、图形变换、打印等技术,最后还描述了一个从WPF而来的强有力的对象:FlowDocument,虽然这本书不能做到面面俱到而又深动详实,但全书言简意赅,结构紧凑,从宏观的角度介绍了GDI+编程的原理和方法,是一本不错的GDI+编程入门书籍。

C Graphics Programming笔记(一) - Castor - 趁年轻,多折腾~~
=================================================================================

第六章    打印

打印和打印预览和绘制在位图、窗口、图片框上类似,只是获取Graphics对象的方式不同罢了。需要打印或者打印预览的时候,使用PintDocument或者PrintPage事件处理函数的e. Graphics参数。

PrintDocument对象代表打印输出,当需要打印输出的时候该对象触发的PrintPage事件,该事件的参数e提供了获取图形的方法。e的属性还包括MarginBoundsHasMorePagesPageBoundsPageSettings等。

往文档中添加一个printPreviewDialogprintDocument1

printPreviewDialog1.ShowDialog(this);

将显示打印预览的窗口。

printPreviewDialog1Document属性设置为printDocument1,则打印预览会调用PrintDocumentPrint方法之前实现打印预览。

设置printDocument1的事件如下:

private void printDocument1_PrintPage(object sender,System.Drawing.Printing.PrintPageEventArgs e)

{

    e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;

    int xmin = e.MarginBounds.Left;

    int ymin = e.MarginBounds.Top;

    int xmax = e.MarginBounds.Right;

    int ymax = e.MarginBounds.Bottom;

    int xmid = (int)(xmin + (xmax - xmin) / 2);

    int ymid = (int)(ymin + (ymax - ymin) / 2);

    // Draw a different shape for each page

    switch (nextPage)

    {

        case 0:

            // Draw a triangle.

            Point[] pts = {

        new Point(xmid, ymin),

        new Point(xmax, ymax),

        new Point(xmin, ymax)

    };

            using (Pen thick_pen = new Pen(Color.Blue, 10))

            {

                thick_pen.DashStyle = DashStyle.Dot;

                e.Graphics.DrawPolygon(thick_pen, pts);

            }

            break;

        case 1:

            // Draw an ellipse.

            using (Pen thick_pen = new Pen(Color.Red, 10))

            {

                e.Graphics.DrawEllipse(thick_pen, e.MarginBounds);

            }

            break;

        case 2:

            // Draw a rectangle.

            using (Pen thick_pen = new Pen(Color.Green, 10))

            {

                thick_pen.DashStyle = DashStyle.Dash;

                e.Graphics.DrawRectangle(thick_pen, e.MarginBounds);

            }

            break;

        case 3:

            // Draw an X.

            using (Pen thick_pen = new Pen(Color.Black, 10))

            {

                thick_pen.DashStyle = DashStyle.Custom;

                thick_pen.DashPattern = new float[] { 10, 10 };

                e.Graphics.DrawLine(thick_pen, xmin, ymin, xmax, ymax);

                e.Graphics.DrawLine(thick_pen, xmin, ymax, xmax, ymin);

            }

            break;

    }

    // Draw the page number.

    using (Font the_font = new Font("Times New Roman", 250,

        FontStyle.Bold, GraphicsUnit.Point))

    {

        using (StringFormat sf = new StringFormat())

        {

            sf.Alignment = StringAlignment.Center;

            sf.LineAlignment = StringAlignment.Center;

            e.Graphics.DrawString(nextPage.ToString(),

                the_font, Brushes.Black, xmid, ymid, sf);

        }

    }

    nextPage++;

    e.HasMorePages = (nextPage <= 3);

}

则可以实现打印预览和打印:

C Graphics Programming笔记(六) - Castor - 趁年轻,多折腾~~

其他事件处理函数

另外,打印前也可以实现图形变化,因为获取到Graphics对象之后,和前面的操作没有任何区别了。

 

  评论这张
 
阅读(1071)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016