当前位置:编程学习 > asp >>

在RichTextBox控件加入图片

using System;
using System.Collections.Specialized;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;

namespace Khendys.Controls {

 #region Public Enums

 // Enum for possible RTF colors
 public enum RtfColor {
  Black, Maroon, Green, Olive, Navy, Purple, Teal, Gray, Silver,
  Red, Lime, Yellow, Blue, Fuchsia, Aqua, White
 }

 #endregion


 public class ExRichTextBox : System.Windows.Forms.RichTextBox {

  #region My Enums

  // Specifies the flags/options for the unmanaged call to the GDI+ method
  // Metafile.EmfToWmfBits().
  private enum EmfToWmfBitsFlags {

   // Use the default conversion
   EmfToWmfBitsFlagsDefault = 0x00000000,

   // Embedded the source of the EMF metafiel within the resulting WMF
   // metafile
   EmfToWmfBitsFlagsEmbedEmf = 0x00000001,

   // Place a 22-byte header in the resulting WMF file.  The header is
   // required for the metafile to be considered placeable.
   EmfToWmfBitsFlagsIncludePlaceable = 0x00000002,

   // Dont simulate clipping by using the XOR operator.
   EmfToWmfBitsFlagsNoXORClip = 0x00000004
  };

  #endregion

  #region My Structs

  // Definitions for colors in an RTF document
  private struct RtfColorDef {
   public const string Black = @"ed0green0lue0";
   public const string Maroon = @"ed128green0lue0";
   public const string Green = @"ed0green128lue0";
   public const string Olive = @"ed128green128lue0";
   public const string Navy = @"ed0green0lue128";
   public const string Purple = @"ed128green0lue128";
   public const string Teal = @"ed0green128lue128";
   public const string Gray = @"ed128green128lue128";
   public const string Silver = @"ed192green192lue192";
   public const string Red = @"ed255green0lue0";
   public const string Lime = @"ed0green255lue0";
   public const string Yellow = @"ed255green255lue0";
   public const string Blue = @"ed0green0lue255";
   public const string Fuchsia = @"ed255green0lue255";
   public const string Aqua = @"ed0green255lue255";
   public const string White = @"ed255green255lue255";
  }

  // Control words for RTF font families
  private struct RtfFontFamilyDef {
   public const string Unknown = @"fnil";
   public const string Roman = @"froman";
   public const string Swiss = @"fswiss";
   public const string Modern = @"fmodern";
   public const string Script = @"fscript";
   public const string Decor = @"fdecor";
   public const string Technical = @"ftech";
   public const string BiDirect = @"fbidi";
  }

  #endregion

  #region My Constants

  // Not used in this application.  Descriptions can be found with documentation
  // of Windows GDI function SetMapMode
  private const int MM_TEXT = 1;
  private const int MM_LOMETRIC = 2;
  private const int MM_HIMETRIC = 3;
  private const int MM_LOENGLISH = 4;
  private const int MM_HIENGLISH = 5;
  private const int MM_TWIPS = 6;

  // Ensures that the metafile maintains a 1:1 aspect ratio
  private const int MM_ISOTROPIC = 7;

  // Allows the x-coordinates and y-coordinates of the metafile to be adjusted
  // independently
  private const int MM_ANISOTROPIC = 8;

  // Represents an unknown font family
  private const string FF_UNKNOWN = "UNKNOWN";

  // The number of hundredths of millimeters (0.01 mm) in an inch
  // For more information, see GetImagePrefix() method.
  private const int HMM_PER_INCH = 2540;

  // The number of twips in an inch
  // For more information, see GetImagePrefix() method.
  private const int TWIPS_PER_INCH = 1440;

  #endregion

  #region My Privates

  // The default text color
  private RtfColor textColor;

  // The default text background color
  private RtfColor highlightColor;

  // Dictionary that maps color enums to RTF color codes
  private HybridDictionary rtfColor;

  // Dictionary that mapas Framework font families to RTF font families
  private HybridDictionary rtfFontFamily;

  // The horizontal resolution at which the control is being displayed
  private float xDpi;

  // The vertical resolution at which the control is being displayed
  private float yDpi;

  #endregion

  #region Elements required to create an RTF document
  
  /* RTF HEADER
   * ----------
   *
   * tf[N]  - For text to be considered to be RTF, it must be enclosed in this tag.
   *      rtf1 is used because the RichTextBox conforms to RTF Specification
   *      version 1.
   * ansi  - The character set.
   * ansicpg[N] - Specifies that unicode characters might be embedded. ansicpg1252
   *      is the default used by Windows.
   * deff[N]  - The default font. deff0 means the default font is the first font
   *      found.
   * deflang[N] - The default language. deflang1033 specifies US English.
   * */
  private const string RTF_HEADER = @"{tf1ansiansicpg1252deff0deflang1033";

  /* RTF DOCUMENT AREA
   * -----------------
   *
   * viewkind[N] - The type of view or zoom level.  viewkind4 specifies normal view.
   * uc[N]  - The number of bytes corresponding to a Unicode character.
   * pard  - Resets to default paragraph properties
   * cf[N]  - Foreground color.  cf1 refers to the color at index 1 in
   *      the color table
   * f[N]  - Font number. f0 refers to the font at index 0 in the font
   *      table.
   * fs[N]  - Font size in half-points.
   * */
  private const string RTF_DOCUMENT_PRE = @"viewkind4uc1pardcf1f0fs20";
  private const string RTF_DOCUMENT_POST = @"cf0fs17}";
  private string RTF_IMAGE_POST = @"}";

  #endregion

  #region Accessors

  // TODO: This can be ommitted along with RemoveBadCha

补充:Web开发 , ASP.Net ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,