如何打印 RichTextBox

转载 2012年03月21日 20:03:42
// 与 Win32接口通信 
[DllImport("USER32.dll")]
private static extern Int32 SendMessage(IntPtr hWnd, int msg, int wParam, IntPtr lParam);
private const int WM_USER = 0x400;
private const int EM_FORMATRANGE = WM_USER + 57;
private const double inch = 14.4; // 与象素的换算。 
// 再是所需要的结构体的定义: 
[StructLayout(LayoutKind.Sequential)]
private struct RECT
{
    public int Left;
    public int Top;
    public int Right;
    public int Bottom;
}
// 望文生义吧 
[StructLayout(LayoutKind.Sequential)]
private struct CHARRANGE
{
    public int cpMin;
    public int cpMax;
}
[StructLayout(LayoutKind.Sequential)]
private struct FORMATRANGE
{
    public IntPtr hdc;
    public IntPtr hdcTarget;
    public RECT rc;
    public RECT rcPage;
    public CHARRANGE chrg;
}
// 将RTB上的内容格式化后画出来 
public static Bitmap RtbToBitmap(RichTextBox rtb)
{
    // 这个地方是可打印的大小
    return RtbToBitmap(rtb, rtb.Bounds.Width, rtb.Bounds.Height * 2);
}
public static Bitmap RtbToBitmap(RichTextBox rtb, int width, int height)
{
    Bitmap bmp = new Bitmap(width, height);
    for (int i = 0; i < width; i++)
    {
        for (int j = 0; j < height; j++)
        {
            bmp.SetPixel(i, j, Color.White);
        }
    }
    using (Graphics gr = Graphics.FromImage(bmp))
    {
        System.IntPtr hDC = gr.GetHdc(); // 屏幕做为画源 
        FORMATRANGE fmtRange;
        RECT rect;
        int fromAPI;
        rect.Top = 0; rect.Left = 0;
        rect.Bottom = (int)(bmp.Height + (bmp.Height * (bmp.HorizontalResolution / 100)) * inch);
        rect.Right = (int)(bmp.Width + (bmp.Width * (bmp.VerticalResolution / 100)) * inch);
        fmtRange.chrg.cpMin = 0;
        fmtRange.chrg.cpMax = -1;
        fmtRange.hdc = hDC;
        fmtRange.hdcTarget = hDC;
        fmtRange.rc = rect;
        fmtRange.rcPage = rect;
        int wParam = 1;
        System.IntPtr lParam = System.Runtime.InteropServices.Marshal.AllocCoTaskMem(Marshal.SizeOf(fmtRange));
        System.Runtime.InteropServices.Marshal.StructureToPtr(fmtRange, lParam, false);
        fromAPI = SendMessage(rtb.Handle, EM_FORMATRANGE, wParam, lParam);
        System.Runtime.InteropServices.Marshal.FreeCoTaskMem(lParam);
        fromAPI = SendMessage(rtb.Handle, EM_FORMATRANGE, wParam, new IntPtr(0));
        gr.ReleaseHdc(hDC);
    }
    return bmp;
}

.net C# RichTextBox的打印预览

1、继承RichTextBox,创建 using System; using System.Windows.Forms; using System.Drawing; using Syste...
  • ghnjk
  • ghnjk
  • 2012年10月10日 13:30
  • 180

HOW TO:使用 Visual C# .NET 打印 RichTextBox 控件的内容

概要本分步指南介绍了如何打印 RichTextBox 控件的内容。RichTextBox 控件没有提供任何打印 RichTextBox 内容的方法。您可以扩展 RichTextBox 类以使用 EM_...

RichTextBox 打印示例

  • 2010年05月22日 16:25
  • 14KB
  • 下载

VB打印RichTextBox控件中的内容

  • 2008年07月17日 20:41
  • 31KB
  • 下载

设置RichTextbox行间距(转)

RichTextbox虽然内置的功能已经很强大了,但是还是有些功能没有提供,就比如“行间距”,不知道其内置的功能是否可以实现,这里在网上找到一个使用win32来设置的     ...
  • wwddgod
  • wwddgod
  • 2016年09月01日 17:24
  • 247

RichTextbox 添加表格与打印

  • 2009年09月30日 08:17
  • 339KB
  • 下载

richTextBox

  • 2014年08月20日 17:15
  • 44KB
  • 下载

用RichTextBox进行无闪烁的着色【待试验】

很多时候,我们希望对用户输入的文字进行即时的分析,并对部分文字的字体颜色进行修改,让那些文字更加醒目。如果说要对部分的文字进行字体颜色的修改,我们很可能就会想到使用RichTextBox这个控件,因为...

richtextbox实现撤消重做功能.html

  • 2015年06月15日 20:40
  • 8KB
  • 下载

RichTextBox v1.5 Source

  • 2004年06月17日 00:00
  • 147KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何打印 RichTextBox
举报原因:
原因补充:

(最多只允许输入30个字)