在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 ,