public void InsertControl(Control control, int position, uint dwUser) { if (control == null) { return; } ILockBytes bytes; IStorage storage; IOleClientSite site; Guid guid = Marshal.GenerateGuidForType(control.GetType()); NativeMethods.CreateILockBytesOnHGlobal(IntPtr.Zero, true, out bytes); NativeMethods.StgCreateDocfileOnILockBytes(bytes, 0x1012, 0, out storage); IRichEditOle.GetClientSite(out site); REOBJECT lpreobject = new REOBJECT(); lpreobject.posistion = position; lpreobject.clsid = guid; lpreobject.pstg = storage; lpreobject.poleobj = Marshal.GetIUnknownForObject(control); lpreobject.polesite = site; lpreobject.dvAspect = 1; lpreobject.dwFlags = 2; lpreobject.dwUser = dwUser; IRichEditOle.InsertObject(lpreobject); Marshal.ReleaseComObject(bytes); Marshal.ReleaseComObject(site); Marshal.ReleaseComObject(storage); }
public void InsertImageDataObject(ImageDataObject ido, int position) { if (ido == null) { return; } ILockBytes pLockBytes; int sc = CreateILockBytesOnHGlobal(IntPtr.Zero, true, out pLockBytes); IStorage pStorage; sc = StgCreateDocfileOnILockBytes(pLockBytes, (uint)(STGM.STGM_SHARE_EXCLUSIVE | STGM.STGM_CREATE | STGM.STGM_READWRITE), 0, out pStorage); IOleClientSite pOleClientSite; IRichEditOle.GetClientSite(out pOleClientSite); Guid guid = Marshal.GenerateGuidForType(ido.GetType()); Guid IID_IOleObject = new Guid("{00000112-0000-0000-C000-000000000046}"); Guid IID_IDataObject = new Guid("{0000010e-0000-0000-C000-000000000046}"); Guid IID_IUnknown = new Guid("{00000000-0000-0000-C000-000000000046}"); object pOleObject; int hr = OleCreateStaticFromData(ido, ref IID_IOleObject, (uint)OLERENDER.OLERENDER_FORMAT, ref ido._Formatetc, pOleClientSite, pStorage, out pOleObject); if (pOleObject == null) { return; } OleSetContainedObject(pOleObject, true); REOBJECT reoObject = new REOBJECT(); reoObject.cp = position; reoObject.clsid = guid; reoObject.pstg = pStorage; reoObject.poleobj = Marshal.GetIUnknownForObject(pOleObject); reoObject.polesite = pOleClientSite; reoObject.dvAspect = (uint)(DVASPECT.DVASPECT_CONTENT); reoObject.dwFlags = (uint)(REOOBJECTFLAGS.REO_BELOWBASELINE); reoObject.dwUser = 0; this.IRichEditOle.InsertObject(reoObject); Marshal.ReleaseComObject(pLockBytes); Marshal.ReleaseComObject(pOleClientSite); Marshal.ReleaseComObject(pStorage); Marshal.ReleaseComObject(pOleObject); }
public List<REOBJECT> GetAllREOBJECT() { List<REOBJECT> list = new List<REOBJECT>(); int objectCount = this.IRichEditOle.GetObjectCount(); for (int i = 0; i < objectCount; i++) { REOBJECT lpreobject = new REOBJECT(); IRichEditOle.GetObject(i, lpreobject, GETOBJECTOPTIONS.REO_GETOBJ_ALL_INTERFACES); list.Add(lpreobject); } return list; }
public void UpdateObjects() { int count = IRichEditOle.GetObjectCount(); for (int i = 0; i < count; i++) { REOBJECT reoObject = new REOBJECT(); IRichEditOle.GetObject(i, reoObject, GETOBJECTOPTIONS.REO_GETOBJ_ALL_INTERFACES); if (reoObject.dwUser == 1) { Point pt = this.rtf.GetPositionFromCharIndex(reoObject.cp); Rectangle rect = new Rectangle(pt, reoObject.sizel); rtf.Invalidate(rect, false); } } }
private Size GetSizeFromMillimeter(REOBJECT lpreobject) { using (Graphics graphics = Graphics.FromHwnd(agileRichTextBox.Handle)) { Point[] pts = new Point[1]; graphics.PageUnit = GraphicsUnit.Millimeter; pts[0] = new Point( lpreobject.sizel.Width / 100, lpreobject.sizel.Height / 100); graphics.TransformPoints( CoordinateSpace.Device, CoordinateSpace.Page, pts); return new Size(pts[0]); } }
public void UpdateObjects(REOBJECT reObj) { Point positionFromCharIndex = agileRichTextBox.GetPositionFromCharIndex(reObj.posistion); Size size = GetSizeFromMillimeter(reObj); Rectangle rc = new Rectangle(positionFromCharIndex, size); agileRichTextBox.Invalidate(rc, false); }
public void UpdateObjects(int pos) { REOBJECT lpreobject = new REOBJECT(); IRichEditOle.GetObject( pos, lpreobject, GETOBJECTOPTIONS.REO_GETOBJ_ALL_INTERFACES); UpdateObjects(lpreobject); }
public void UpdateObjects() { int objectCount = this.IRichEditOle.GetObjectCount(); for (int i = 0; i < objectCount; i++) { REOBJECT lpreobject = new REOBJECT(); IRichEditOle.GetObject(i, lpreobject, GETOBJECTOPTIONS.REO_GETOBJ_ALL_INTERFACES); Point positionFromCharIndex = this.agileRichTextBox.GetPositionFromCharIndex(lpreobject.posistion); Rectangle rc = new Rectangle(positionFromCharIndex.X, positionFromCharIndex.Y, 50, 50); agileRichTextBox.Invalidate(rc, false); } }
public REOBJECT InsertOleObject(IOleObject oleObject, int index, int pos) { if (oleObject == null) { return null; } ILockBytes pLockBytes; NativeMethods.CreateILockBytesOnHGlobal(IntPtr.Zero, true, out pLockBytes); IStorage pStorage; NativeMethods.StgCreateDocfileOnILockBytes( pLockBytes, (uint)(STGM.STGM_SHARE_EXCLUSIVE | STGM.STGM_CREATE | STGM.STGM_READWRITE), 0, out pStorage); IOleClientSite pOleClientSite; IRichEditOle.GetClientSite(out pOleClientSite); Guid guid = new Guid(); oleObject.GetUserClassID(ref guid); NativeMethods.OleSetContainedObject(oleObject, true); REOBJECT reoObject = new REOBJECT(); reoObject.posistion = pos; reoObject.clsid = guid; reoObject.pstg = pStorage; reoObject.poleobj = Marshal.GetIUnknownForObject(oleObject); reoObject.polesite = pOleClientSite; reoObject.dvAspect = (uint)DVASPECT.DVASPECT_CONTENT; reoObject.dwFlags = (uint)REOOBJECTFLAGS.REO_BELOWBASELINE; reoObject.dwUser = (uint)index; IRichEditOle.InsertObject(reoObject); Marshal.ReleaseComObject(pLockBytes); Marshal.ReleaseComObject(pOleClientSite); Marshal.ReleaseComObject(pStorage); return reoObject; }
public void InsertOleObject(IOleObject oleObject) { if (oleObject == null) return; //----------------------- ILockBytes pLockBytes; CreateILockBytesOnHGlobal(IntPtr.Zero, true, out pLockBytes); IStorage pStorage; StgCreateDocfileOnILockBytes(pLockBytes, (uint)(STGM.STGM_SHARE_EXCLUSIVE | STGM.STGM_CREATE | STGM.STGM_READWRITE), 0, out pStorage); IOleClientSite pOleClientSite; this.IRichEditOle.GetClientSite(out pOleClientSite); //----------------------- //----------------------- Guid guid = new Guid(); oleObject.GetUserClassID(ref guid); //----------------------- //----------------------- OleSetContainedObject(oleObject, true); REOBJECT reoObject = new REOBJECT(); reoObject.cp = this._richEdit.TextLength; reoObject.clsid = guid; reoObject.pstg = pStorage; reoObject.poleobj = Marshal.GetIUnknownForObject(oleObject); reoObject.polesite = pOleClientSite; reoObject.dvAspect = (uint)DVASPECT.DVASPECT_CONTENT; reoObject.dwFlags = (uint)(REOOBJECTFLAGS.REO_BELOWBASELINE | REOOBJECTFLAGS.REO_RESIZABLE); this.IRichEditOle.InsertObject(reoObject); //----------------------- //----------------------- Marshal.ReleaseComObject(pLockBytes); Marshal.ReleaseComObject(pOleClientSite); Marshal.ReleaseComObject(pStorage); //----------------------- }
public void InsertMyDataObject(DataObject dobj) { if (dobj == null) return; //----------------------- ILockBytes pLockBytes; int sc = CreateILockBytesOnHGlobal(IntPtr.Zero, true, out pLockBytes); IStorage pStorage; sc = StgCreateDocfileOnILockBytes(pLockBytes, (uint)(STGM.STGM_SHARE_EXCLUSIVE | STGM.STGM_CREATE | STGM.STGM_READWRITE), 0, out pStorage); IOleClientSite pOleClientSite; this.IRichEditOle.GetClientSite(out pOleClientSite); //----------------------- Guid guid = Marshal.GenerateGuidForType(dobj.GetType()); Guid IID_IOleObject = new Guid("{00000112-0000-0000-C000-000000000046}"); Guid IID_IDataObject = new Guid("{0000010e-0000-0000-C000-000000000046}"); Guid IID_IUnknown = new Guid("{00000000-0000-0000-C000-000000000046}"); object pOleObject; int hr = OleCreateStaticFromData(dobj, ref IID_IOleObject, (uint)OLERENDER.OLERENDER_FORMAT, ref dobj.mpFormatetc, pOleClientSite, pStorage, out pOleObject); if (pOleObject == null) return; //----------------------- //----------------------- OleSetContainedObject(pOleObject, true); REOBJECT reoObject = new REOBJECT(); reoObject.cp = this._richEdit.TextLength; reoObject.clsid = guid; reoObject.pstg = pStorage; reoObject.poleobj = Marshal.GetIUnknownForObject(pOleObject); reoObject.polesite = pOleClientSite; reoObject.dvAspect = (uint)(DVASPECT.DVASPECT_CONTENT); reoObject.dwFlags = (uint)(REOOBJECTFLAGS.REO_BELOWBASELINE | REOOBJECTFLAGS.REO_RESIZABLE); reoObject.dwUser = 0; this.IRichEditOle.InsertObject(reoObject); //----------------------- //----------------------- Marshal.ReleaseComObject(pLockBytes); Marshal.ReleaseComObject(pOleClientSite); Marshal.ReleaseComObject(pStorage); Marshal.ReleaseComObject(pOleObject); //----------------------- }
public bool InsertImageFromFile(string strFilename) { //----------------------- ILockBytes pLockBytes; CreateILockBytesOnHGlobal(IntPtr.Zero, true, out pLockBytes); IStorage pStorage; StgCreateDocfileOnILockBytes(pLockBytes, (uint)(STGM.STGM_SHARE_EXCLUSIVE | STGM.STGM_CREATE | STGM.STGM_READWRITE), 0, out pStorage); IOleClientSite pOleClientSite; this.IRichEditOle.GetClientSite(out pOleClientSite); //----------------------- //----------------------- FORMATETC formatEtc = new FORMATETC(); formatEtc.cfFormat = 0; formatEtc.ptd = IntPtr.Zero; formatEtc.dwAspect = DVASPECT.DVASPECT_CONTENT; formatEtc.lindex = -1; formatEtc.tymed = TYMED.TYMED_NULL; Guid IID_IOleObject = new Guid("{00000112-0000-0000-C000-000000000046}"); Guid CLSID_NULL = new Guid("{00000000-0000-0000-0000-000000000000}"); object pOleObjectOut; // I don't sure, but it appears that this function only loads from bitmap // You can also try OleCreateFromData, OleLoadPictureIndirect, etc. int hr = OleCreateFromFile(ref CLSID_NULL, strFilename, ref IID_IOleObject, (uint)OLERENDER.OLERENDER_DRAW, ref formatEtc, pOleClientSite, pStorage, out pOleObjectOut); if (pOleObjectOut == null) { Marshal.ReleaseComObject(pLockBytes); Marshal.ReleaseComObject(pOleClientSite); Marshal.ReleaseComObject(pStorage); return false; } IOleObject pOleObject = (IOleObject)pOleObjectOut; //----------------------- //----------------------- Guid guid = new Guid(); //guid = Marshal.GenerateGuidForType(pOleObject.GetType()); pOleObject.GetUserClassID(ref guid); //----------------------- //----------------------- OleSetContainedObject(pOleObject, true); REOBJECT reoObject = new REOBJECT(); reoObject.cp = this._richEdit.TextLength; reoObject.clsid = guid; reoObject.pstg = pStorage; reoObject.poleobj = Marshal.GetIUnknownForObject(pOleObject); reoObject.polesite = pOleClientSite; reoObject.dvAspect = (uint)(DVASPECT.DVASPECT_CONTENT); reoObject.dwFlags = (uint)(REOOBJECTFLAGS.REO_BELOWBASELINE | REOOBJECTFLAGS.REO_RESIZABLE); reoObject.dwUser = 0; this.IRichEditOle.InsertObject(reoObject); //----------------------- //----------------------- Marshal.ReleaseComObject(pLockBytes); Marshal.ReleaseComObject(pOleClientSite); Marshal.ReleaseComObject(pStorage); Marshal.ReleaseComObject(pOleObject); //----------------------- return true; }
public void InsertControl(Control control) { if (control == null) return; Guid guid = Marshal.GenerateGuidForType(control.GetType()); //----------------------- ILockBytes pLockBytes; CreateILockBytesOnHGlobal(IntPtr.Zero, true, out pLockBytes); IStorage pStorage; StgCreateDocfileOnILockBytes(pLockBytes, (uint)(STGM.STGM_SHARE_EXCLUSIVE | STGM.STGM_CREATE | STGM.STGM_READWRITE), 0, out pStorage); IOleClientSite pOleClientSite; this.IRichEditOle.GetClientSite(out pOleClientSite); //----------------------- //----------------------- REOBJECT reoObject = new REOBJECT(); reoObject.cp = this._richEdit.TextLength; reoObject.clsid = guid; reoObject.pstg = pStorage; reoObject.poleobj = Marshal.GetIUnknownForObject(control); reoObject.polesite = pOleClientSite; reoObject.dvAspect = (uint)(DVASPECT.DVASPECT_CONTENT); reoObject.dwFlags = (uint)(REOOBJECTFLAGS.REO_BELOWBASELINE | REOOBJECTFLAGS.REO_RESIZABLE); reoObject.dwUser = 1; this.IRichEditOle.InsertObject(reoObject); //----------------------- //----------------------- Marshal.ReleaseComObject(pLockBytes); Marshal.ReleaseComObject(pOleClientSite); Marshal.ReleaseComObject(pStorage); //----------------------- }
public REOBJECT GetSelectedObject() { REOBJECT obj = new REOBJECT(); this.IRichEditOle.GetObject(-1, obj, GETOBJECTOPTIONS.REO_GETOBJ_ALL_INTERFACES); return obj; }
public REOBJECT GetObjectByIndex(int objIndex) { try { REOBJECT obj = new REOBJECT(); this.IRichEditOle.GetObject(objIndex, obj, GETOBJECTOPTIONS.REO_GETOBJ_ALL_INTERFACES); return obj; } catch (Exception) // it seems that invalid index was specified { return null; } }
public bool InsertImageFromFile(string strFilename, int position) { ILockBytes bytes; IStorage storage; IOleClientSite site; object obj2; NativeMethods.CreateILockBytesOnHGlobal(IntPtr.Zero, true, out bytes); NativeMethods.StgCreateDocfileOnILockBytes(bytes, 0x1012, 0, out storage); IRichEditOle.GetClientSite(out site); FORMATETC pFormatEtc = new FORMATETC(); pFormatEtc.cfFormat = (CLIPFORMAT)0; pFormatEtc.ptd = IntPtr.Zero; pFormatEtc.dwAspect = DVASPECT.DVASPECT_CONTENT; pFormatEtc.lindex = -1; pFormatEtc.tymed = TYMED.TYMED_NULL; Guid riid = new Guid("{00000112-0000-0000-C000-000000000046}"); Guid rclsid = new Guid("{00000000-0000-0000-0000-000000000000}"); NativeMethods.OleCreateFromFile(ref rclsid, strFilename, ref riid, 1, ref pFormatEtc, site, storage, out obj2); if (obj2 == null) { Marshal.ReleaseComObject(bytes); Marshal.ReleaseComObject(site); Marshal.ReleaseComObject(storage); return false; } IOleObject pUnk = (IOleObject)obj2; Guid pClsid = new Guid(); pUnk.GetUserClassID(ref pClsid); NativeMethods.OleSetContainedObject(pUnk, true); REOBJECT lpreobject = new REOBJECT(); lpreobject.posistion = position; lpreobject.clsid = pClsid; lpreobject.pstg = storage; lpreobject.poleobj = Marshal.GetIUnknownForObject(pUnk); lpreobject.polesite = site; lpreobject.dvAspect = 1; lpreobject.dwFlags = 2; lpreobject.dwUser = 0; IRichEditOle.InsertObject(lpreobject); Marshal.ReleaseComObject(bytes); Marshal.ReleaseComObject(site); Marshal.ReleaseComObject(storage); Marshal.ReleaseComObject(pUnk); return true; }
public void UpdateObjects() { int k = this.IRichEditOle.GetObjectCount(); if (k == 0) return; for (int i = 0; i < k; i++) { REOBJECT reoObject = new REOBJECT(); this.IRichEditOle.GetObject(i, reoObject, GETOBJECTOPTIONS.REO_GETOBJ_ALL_INTERFACES); if (reoObject.dwUser == 1) { Point pt = this._richEdit.GetPositionFromCharIndex(reoObject.cp); Rectangle rect = new Rectangle(pt, reoObject.sizel); this._richEdit.Invalidate(rect, false); // repaint } } }