本文整理汇总了C#中ScintillaNET.Scintilla.CreateGraphics方法的典型用法代码示例。如果您正苦于以下问题:C# Scintilla.CreateGraphics方法的具体用法?C# Scintilla.CreateGraphics怎么用?C# Scintilla.CreateGraphics使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ScintillaNET.Scintilla
的用法示例。
在下文中一共展示了Scintilla.CreateGraphics方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: CopyRtf
private static unsafe void CopyRtf(Scintilla scintilla, StyleData[] styles, List<ArraySegment<byte>> styledSegments)
{
// NppExport -> NppExport.cpp
// NppExport -> RTFExporter.cpp
// http://en.wikipedia.org/wiki/Rich_Text_Format
// https://msdn.microsoft.com/en-us/library/windows/desktop/ms649013.aspx
// http://forums.codeguru.com/showthread.php?242982-Converting-pixels-to-twips
// http://en.wikipedia.org/wiki/UTF-8
try
{
// Calculate twips per space
int twips;
var fontStyle = FontStyle.Regular;
if (styles[Style.Default].Weight >= 700)
fontStyle |= FontStyle.Bold;
if (styles[Style.Default].Italic != 0)
fontStyle |= FontStyle.Italic;
if (styles[Style.Default].Underline != 0)
fontStyle |= FontStyle.Underline;
using (var graphics = scintilla.CreateGraphics())
using (var font = new Font(styles[Style.Default].FontName, styles[Style.Default].SizeF, fontStyle))
{
var width = graphics.MeasureString(" ", font).Width;
twips = (int)((width / graphics.DpiX) * 1440);
// TODO The twips value calculated seems too small on my computer
}
// Write RTF
using (var ms = new NativeMemoryStream(styledSegments.Sum(s => s.Count)))
using (var tw = new StreamWriter(ms, Encoding.ASCII))
{
var tabWidth = scintilla.DirectMessage(NativeMethods.SCI_GETTABWIDTH).ToInt32();
var deftab = tabWidth * twips;
tw.WriteLine(@"{{\rtf1\ansi\deff0\deftab{0}", deftab);
tw.Flush();
// Build the font table
tw.Write(@"{\fonttbl");
tw.Write(@"{{\f0 {0};}}", styles[Style.Default].FontName);
var fontIndex = 1;
for (int i = 0; i < styles.Length; i++)
{
if (!styles[i].Used)
continue;
if (i == Style.Default)
continue;
// Not a completely unique list, but close enough
if (styles[i].FontName != styles[Style.Default].FontName)
{
styles[i].FontIndex = fontIndex++;
tw.Write(@"{{\f{0} {1};}}", styles[i].FontIndex, styles[i].FontName);
}
}
tw.WriteLine("}"); // fonttbl
tw.Flush();
// Build the color table
tw.Write(@"{\colortbl");
tw.Write(@"\red{0}\green{1}\blue{2};", (styles[Style.Default].ForeColor >> 0) & 0xFF, (styles[Style.Default].ForeColor >> 8) & 0xFF, (styles[Style.Default].ForeColor >> 16) & 0xFF);
tw.Write(@"\red{0}\green{1}\blue{2};", (styles[Style.Default].BackColor >> 0) & 0xFF, (styles[Style.Default].BackColor >> 8) & 0xFF, (styles[Style.Default].BackColor >> 16) & 0xFF);
styles[Style.Default].ForeColorIndex = 0;
styles[Style.Default].BackColorIndex = 1;
var colorIndex = 2;
for (int i = 0; i < styles.Length; i++)
{
if (!styles[i].Used)
continue;
if (i == Style.Default)
continue;
// Not a completely unique list, but close enough
if (styles[i].ForeColor != styles[Style.Default].ForeColor)
{
styles[i].ForeColorIndex = colorIndex++;
tw.Write(@"\red{0}\green{1}\blue{2};", (styles[i].ForeColor >> 0) & 0xFF, (styles[i].ForeColor >> 8) & 0xFF, (styles[i].ForeColor >> 16) & 0xFF);
}
else
{
styles[i].ForeColorIndex = styles[Style.Default].ForeColorIndex;
}
if (styles[i].BackColor != styles[Style.Default].BackColor)
{
styles[i].BackColorIndex = colorIndex++;
tw.Write(@"\red{0}\green{1}\blue{2};", (styles[i].BackColor >> 0) & 0xFF, (styles[i].BackColor >> 8) & 0xFF, (styles[i].BackColor >> 16) & 0xFF);
}
else
{
styles[i].BackColorIndex = styles[Style.Default].BackColorIndex;
}
}
tw.WriteLine("}"); // colortbl
tw.Flush();
//.........这里部分代码省略.........