📄 chatrichtextbox.cs
字号:
internal bool GetSelection(int nStart, int nEnd, out Font font, out Color color)
{
base.Select(nStart, 1);
CHARFORMAT2_STRUCT structure = new CHARFORMAT2_STRUCT();
structure.cbSize = (uint) Marshal.SizeOf(structure);
structure.szFaceName = new char[0x20];
structure.dwEffects |= 0x10000000;
IntPtr wParam = new IntPtr(1);
IntPtr ptr = Marshal.AllocCoTaskMem(Marshal.SizeOf(structure));
Marshal.StructureToPtr(structure, ptr, false);
SendMessage(base.Handle, 0x43a, wParam, ptr);
structure = (CHARFORMAT2_STRUCT) Marshal.PtrToStructure(ptr, typeof(CHARFORMAT2_STRUCT));
string familyName = "";
for (int i = 0; i < structure.szFaceName.GetLength(0); i++)
{
if (structure.szFaceName[i] != '\0')
{
familyName = familyName + structure.szFaceName[i].ToString();
}
}
FontStyle regular = FontStyle.Regular;
if ((structure.dwMask & 1) == 1)
{
regular |= FontStyle.Bold;
}
if ((structure.dwMask & 2) == 2)
{
regular |= FontStyle.Italic;
}
if ((structure.dwMask & 8) == 8)
{
regular |= FontStyle.Strikeout;
}
if ((structure.dwMask & 4) == 4)
{
regular |= FontStyle.Underline;
}
font = new Font(familyName, (float) (structure.yHeight / 20), regular);
color = Color.FromArgb(structure.crBackColor);
Marshal.FreeCoTaskMem(ptr);
return true;
}
public int GetSelectionLink()
{
return this.GetSelectionStyle(0x20, 0x20);
}
private int GetSelectionStyle(uint mask, uint effect)
{
int num;
CHARFORMAT2_STRUCT structure = new CHARFORMAT2_STRUCT();
structure.cbSize = (uint) Marshal.SizeOf(structure);
structure.szFaceName = new char[0x20];
IntPtr wParam = new IntPtr(1);
IntPtr ptr = Marshal.AllocCoTaskMem(Marshal.SizeOf(structure));
Marshal.StructureToPtr(structure, ptr, false);
SendMessage(base.Handle, 0x43a, wParam, ptr);
structure = (CHARFORMAT2_STRUCT) Marshal.PtrToStructure(ptr, typeof(CHARFORMAT2_STRUCT));
if ((structure.dwMask & mask) == mask)
{
if ((structure.dwEffects & effect) == effect)
{
num = 1;
}
else
{
num = 0;
}
}
else
{
num = -1;
}
Marshal.FreeCoTaskMem(ptr);
return num;
}
[DllImport("user32.dll", CharSet=CharSet.Auto, ExactSpelling=true)]
internal static extern bool GetWindowRect(IntPtr hWnd, [In, Out] ref Rectangle rect);
public void HideFocusSelection(bool bHide, bool bPermanent)
{
SendMessage1(base.Handle, 0x43f, bHide, bPermanent);
}
internal bool InsertImage(AmigoImage image, Size size, int index)
{
try
{
string progID = "AmigoOleObject.Object.1";
Type typeFromProgID = Type.GetTypeFromProgID(progID);
if (typeFromProgID != null)
{
int x;
int y;
object obj2 = Activator.CreateInstance(typeFromProgID);
IDynGifCtl ctl = (IDynGifCtl) obj2;
ctl.GetSize(size.Width + 1, size.Height + 1, out x, out y);
Bitmap bitmap = new Bitmap(image.Image, size);
BitmapData bitmapdata = null;
try
{
bitmapdata = bitmap.LockBits(new Rectangle(0, 0, size.Width, size.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
int dataLength = bitmapdata.Stride * bitmap.Height;
ctl.PlayImageFromBitmapData4(bitmapdata.Scan0.ToInt32(), dataLength, size.Width, size.Height);
}
catch (Exception exception)
{
ClientLogger.WriteException(exception);
return false;
}
finally
{
if (bitmapdata != null)
{
bitmap.UnlockBits(bitmapdata);
}
bitmap.Dispose();
}
if (obj2 is Imps.Client.Pc.BizControls.IOleObject)
{
REOBJECT reobject = this.InsertOleObject((Imps.Client.Pc.BizControls.IOleObject) obj2, new Size(x, y), index);
this._IDynaCtrlLib.Add(reobject, ctl);
return true;
}
}
return false;
}
catch (Exception exception2)
{
ClientLogger.WriteException(exception2);
return false;
}
}
public void InsertLink(string LinkText, string LinkCommand)
{
this.InsertLink(LinkText, LinkCommand, base.SelectionStart);
}
public void InsertLink(string text, Font font, Color color)
{
this.InsertLink(text, base.SelectionStart, font, color);
}
public void InsertLink(string LinkText, string LinkCommand, int position)
{
if ((position < 0) || (position > this.Text.Length))
{
throw new ArgumentOutOfRangeException("position");
}
base.SelectionStart = position;
base.SelectedRtf = @"{\rtf1\rtlch " + LinkText + @"\v #" + LinkCommand + @"\v0}";
base.Select(position, (LinkCommand.Length + LinkText.Length) + 1);
this.SetSelectionLink(true);
base.Select(((position + LinkCommand.Length) + LinkText.Length) + 1, 0);
}
public void InsertLink(string text, int position, Font font, Color color)
{
if ((position < 0) || (position > this.Text.Length))
{
throw new ArgumentOutOfRangeException("position");
}
base.SelectionStart = position;
this.SelectedText = text;
base.Select(position, text.Length);
base.SelectionColor = color;
base.SelectionFont = font;
this.SetSelectionLink(true);
base.Select(position + text.Length, 0);
}
internal REOBJECT InsertOleObject(Imps.Client.Pc.BizControls.IOleObject oleObj, Size size, int index)
{
REOBJECT reobject = new RichEditOle(this).InsertOleObject(oleObj, size, index);
this._reObjDict.Add(index, reobject);
oleObj.SetExtent(1, ref size);
return reobject;
}
internal bool InsertProgressBar(string infoTip, Size size, Color color, Color textColor, int index, AmigoImage image, string sBarImageText, string fontName, int fontSize, int barWidth, int barHeight)
{
string progID = "AmigoOleObject.Object.1";
Type typeFromProgID = Type.GetTypeFromProgID(progID);
if (typeFromProgID != null)
{
int x;
int y;
object obj2 = Activator.CreateInstance(typeFromProgID);
IDynGifCtl ctl = (IDynGifCtl) obj2;
ctl.GetSize(size.Width, size.Height, out x, out y);
Bitmap bitmap = new Bitmap(image.CurrentImage);
IntPtr hObject = bitmap.GetHbitmap();
try
{
ctl.InsertProgressBar(hObject.ToInt32(), infoTip, color.R, color.G, color.B, textColor.R, textColor.G, textColor.B, sBarImageText, fontName, fontSize, barWidth, barHeight);
}
finally
{
bitmap.Dispose();
DeleteObject(hObject);
}
if (obj2 is Imps.Client.Pc.BizControls.IOleObject)
{
Size size2 = new Size(x, y);
this.InsertOleObject((Imps.Client.Pc.BizControls.IOleObject) obj2, size2, index);
return true;
}
}
return false;
}
internal void InsertString(string text)
{
if ((this.MaxLength <= 0) || (this.TextLength <= this.MaxLength))
{
text = text.Replace("\r\n", "\n");
if ((text.Length + this.TextLength) > this.MaxLength)
{
text = text.Substring(0, this.MaxLength - this.TextLength);
}
IntPtr wParam = new IntPtr(1);
IntPtr lParam = Marshal.StringToBSTR(text);
SendMessage(base.Handle, 0xc2, wParam, lParam);
Marshal.FreeCoTaskMem(wParam);
Marshal.FreeBSTR(lParam);
}
}
internal bool IsOleObject(int iPos)
{
RichEditOle ole = new RichEditOle(this);
IRichEditOle iRichEditOle = ole.IRichEditOle;
REOBJECT lpreobject = new REOBJECT();
lpreobject.cp = iPos;
return (iRichEditOle.GetObject(-2, lpreobject, GETOBJECTOPTIONS.REO_GETOBJ_POLEOBJ) == 0);
}
internal bool IsText(int iPos)
{
return !this.IsOleObject(iPos);
}
[DllImport("ole32.dll")]
private static extern int OleCreateFromData(Imps.Client.Pc.BizControls.IDataObject pSrcDataObj, [In] ref Guid riid, uint renderopt, ref Imps.Client.Pc.BizControls.FORMATETC pFormatEtc, Imps.Client.Pc.BizControls.IOleClientSite pClientSite, Imps.Client.Pc.BizControls.IStorage pStg, [MarshalAs(UnmanagedType.IUnknown)] out object ppvObj);
[DllImport("ole32.dll")]
public static extern int OleCreateFromFile([In] ref Guid rclsid, [MarshalAs(UnmanagedType.LPWStr)] string lpszFileName, [In] ref Guid riid, uint renderopt, ref Imps.Client.Pc.BizControls.FORMATETC pFormatEtc, Imps.Client.Pc.BizControls.IOleClientSite pClientSite, Imps.Client.Pc.BizControls.IStorage pStg, [MarshalAs(UnmanagedType.IUnknown)] out object ppvObj);
[DllImport("ole32.dll")]
private static extern int OleCreateLinkFromData([MarshalAs(UnmanagedType.Interface)] Imps.Client.Pc.BizControls.IDataObject pSrcDataObj, [In] ref Guid riid, uint renderopt, ref Imps.Client.Pc.BizControls.FORMATETC pFormatEtc, Imps.Client.Pc.BizControls.IOleClientSite pClientSite, Imps.Client.Pc.BizControls.IStorage pStg, [MarshalAs(UnmanagedType.IUnknown)] out object ppvObj);
[DllImport("ole32.dll")]
public static extern int OleCreateStaticFromData([MarshalAs(UnmanagedType.Interface)] Imps.Client.Pc.BizControls.IDataObject pSrcDataObj, [In] ref Guid riid, uint renderopt, ref Imps.Client.Pc.BizControls.FORMATETC pFormatEtc, Imps.Client.Pc.BizControls.IOleClientSite pClientSite, Imps.Client.Pc.BizControls.IStorage pStg, [MarshalAs(UnmanagedType.IUnknown)] out object ppvObj);
[DllImport("ole32.dll")]
private static extern int OleLoadPicturePath([MarshalAs(UnmanagedType.LPWStr)] string lpszPicturePath, [In, MarshalAs(UnmanagedType.IUnknown)] object pIUnknown, uint dwReserved, uint clrReserved, ref Guid riid, [MarshalAs(UnmanagedType.IUnknown)] out object ppvObj);
[DllImport("ole32.dll")]
public static extern int OleSetContainedObject([MarshalAs(UnmanagedType.IUnknown)] object pUnk, bool fContained);
protected override void OnGotFocus(EventArgs e)
{
if ((!base.ReadOnly && base.Enabled) && (base.ImeMode != ImeMode.Disable))
{
ControlHelper.TryForceControlImeHangul(this);
}
base.OnGotFocus(e);
}
private void OnNCPaint(ref System.Windows.Forms.Message m)
{
if (((!base.DesignMode && !base.IsDisposed) && (this._borderColor != Color.Empty)) && base.Visible)
{
IntPtr hdc = InnerWin32.GetWindowDC(base.Handle);
using (Graphics graphics = Graphics.FromHdc(hdc))
{
Rectangle r = new Rectangle(base.Location.X, base.Location.Y, base.Width, base.Height);
r = base.Parent.RectangleToScreen(r);
Rectangle rect = base.RectangleToScreen(base.ClientRectangle);
int num = rect.Left - r.Left;
if (num > (r.Right - rect.Right))
{
num = r.Right - rect.Right;
}
int num2 = rect.Top - r.Top;
if (num2 > (r.Bottom - rect.Bottom))
{
num2 = r.Bottom - rect.Bottom;
}
rect.X = r.X + num;
rect.Y = r.Y + num2;
rect.Width = r.Width - (num * 2);
rect.Height = r.Height - (num2 * 2);
rect.Offset(-r.Left, -r.Top);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -