Beispiel #1
0
        public void InsertControl(Control control)
        {
            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.cp       = _richEdit.SelectionStart;
            lpreobject.clsid    = guid;
            lpreobject.pstg     = storage;
            lpreobject.poleobj  = Marshal.GetIUnknownForObject(control);
            lpreobject.polesite = site;
            lpreobject.dvAspect = 1;
            lpreobject.dwFlags  = 2;
            lpreobject.dwUser   = 1;
            IRichEditOle.InsertObject(lpreobject);
            Marshal.ReleaseComObject(bytes);
            Marshal.ReleaseComObject(site);
            Marshal.ReleaseComObject(storage);
        }
Beispiel #2
0
        public void UpdateObjects(REOBJECT reObj)
        {
            Point positionFromCharIndex = _richEdit.GetPositionFromCharIndex(
                reObj.cp);
            Size      size = GetSizeFromMillimeter(reObj);
            Rectangle rc   = new Rectangle(positionFromCharIndex, size);

            _richEdit.Invalidate(rc, false);
        }
Beispiel #3
0
        public void UpdateObjects(int pos)
        {
            REOBJECT lpreobject = new REOBJECT();

            IRichEditOle.GetObject(
                pos,
                lpreobject,
                GETOBJECTOPTIONS.REO_GETOBJ_ALL_INTERFACES);
            UpdateObjects(lpreobject);
        }
Beispiel #4
0
        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._richEdit.GetPositionFromCharIndex(lpreobject.cp);
                Rectangle rc = new Rectangle(positionFromCharIndex.X, positionFromCharIndex.Y, 50, 50);
                _richEdit.Invalidate(rc, false);
            }
        }
Beispiel #5
0
        public bool InsertImageFromFile(string strFilename)
        {
            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.cp       = _richEdit.TextLength;
            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);
        }
Beispiel #6
0
        public REOBJECT InsertOleObject(
            IOleObject oleObject,
            int index)
        {
            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.cp       = _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;
            reoObject.dwUser   = (uint)index;

            IRichEditOle.InsertObject(reoObject);

            Marshal.ReleaseComObject(pLockBytes);
            Marshal.ReleaseComObject(pOleClientSite);
            Marshal.ReleaseComObject(pStorage);

            return(reoObject);
        }
Beispiel #7
0
        private Size GetSizeFromMillimeter(REOBJECT lpreobject)
        {
            using (Graphics graphics = Graphics.FromHwnd(_richEdit.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]));
            }
        }
Beispiel #8
0
        /// <summary>
        /// 获得richtextBox中现有的图片集合
        /// </summary>
        /// <returns></returns>
        public List <MyPicture> GetExistGifs()
        {
            List <MyPicture> tempGifs = new List <MyPicture>();
            REOBJECT         reObject = new REOBJECT();

            for (int i = 0; i < this.GetRichEditOleInterface().GetObjectCount(); i++)
            {
                this.GetRichEditOleInterface().GetObject(i, reObject, GETOBJECTOPTIONS.REO_GETOBJ_ALL_INTERFACES);
                object    t   = Marshal.GetObjectForIUnknown(reObject.poleobj);
                MyPicture pic = t as MyPicture;
                if (pic != null)
                {
                    pic.Pos    = reObject.cp;
                    pic.IsSend = true;//标识发送当前图片
                    tempGifs.Add(pic);
                }
            }
            return(tempGifs);
        }
Beispiel #9
0
        /// <summary>
        /// 获得richtextBox中现有的图片集合
        /// </summary>
        /// <returns></returns>
        public string GetImageInfo()
        {
            string imageInfo = "";

            //try
            {
                REOBJECT reObject = new REOBJECT();
                for (int i = 0; i < GetRichEditOleInterface().GetObjectCount(); i++)
                {
                    this.GetRichEditOleInterface().GetObject(i, reObject, GETOBJECTOPTIONS.REO_GETOBJ_ALL_INTERFACES);
                    object    t   = Marshal.GetObjectForIUnknown(reObject.poleobj);
                    MyPicture pic = t as MyPicture;
                    if (pic != null)
                    {
                        imageInfo += reObject.cp.ToString() + "," + pic.MD5 + "|";
                    }
                }
            }
            //catch { }
            return(imageInfo);
        }
Beispiel #10
0
 /// <summary>
 /// 获得richtextBox中现有的图片集合
 /// </summary>
 /// <returns></returns>
 public List<MyPicture> GetExistGifs()
 {
     List<MyPicture> tempGifs = new List<MyPicture>();
     REOBJECT reObject = new REOBJECT();
     for (int i = 0; i < this.GetRichEditOleInterface().GetObjectCount(); i++) 
     {
         this.GetRichEditOleInterface().GetObject(i, reObject, GETOBJECTOPTIONS.REO_GETOBJ_ALL_INTERFACES);
         object t = Marshal.GetObjectForIUnknown(reObject.poleobj);
         MyPicture pic = t as MyPicture;
         if (pic != null)
         {
             pic.Pos = reObject.cp; 
             pic.IsSend = true;//标识发送当前图片
             tempGifs.Add(pic); 
         } 
     }
     return tempGifs;
 }
Beispiel #11
0
        public void InsertControl(Control control)
        {
            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.cp = _richEdit.SelectionStart;
            lpreobject.clsid = guid;
            lpreobject.pstg = storage;
            lpreobject.poleobj = Marshal.GetIUnknownForObject(control);
            lpreobject.polesite = site;
            lpreobject.dvAspect = 1;
            lpreobject.dwFlags = 2;
            lpreobject.dwUser = 1;
            IRichEditOle.InsertObject(lpreobject);
            Marshal.ReleaseComObject(bytes);
            Marshal.ReleaseComObject(site);
            Marshal.ReleaseComObject(storage);

        }
Beispiel #12
0
 public bool InsertImageFromFile(string strFilename)
 {
     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.cp = _richEdit.TextLength;
     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;
 }
Beispiel #13
0
        public REOBJECT InsertOleObject(
            IOleObject oleObject,
            int index)
        {
            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.cp = _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;
            reoObject.dwUser = (uint)index;

            IRichEditOle.InsertObject(reoObject);

            Marshal.ReleaseComObject(pLockBytes);
            Marshal.ReleaseComObject(pOleClientSite);
            Marshal.ReleaseComObject(pStorage);

            return reoObject;
        }
Beispiel #14
0
 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._richEdit.GetPositionFromCharIndex(lpreobject.cp);
         Rectangle rc = new Rectangle(positionFromCharIndex.X, positionFromCharIndex.Y, 50, 50);
         _richEdit.Invalidate(rc, false);
     }
 }
Beispiel #15
0
 public void UpdateObjects(int pos)
 {
     REOBJECT lpreobject = new REOBJECT();
     IRichEditOle.GetObject(
         pos,
         lpreobject,
         GETOBJECTOPTIONS.REO_GETOBJ_ALL_INTERFACES);
     UpdateObjects(lpreobject);
 }
Beispiel #16
0
 public void UpdateObjects(REOBJECT reObj)
 {
     Point positionFromCharIndex = _richEdit.GetPositionFromCharIndex(
             reObj.cp);
     Size size = GetSizeFromMillimeter(reObj);
     Rectangle rc = new Rectangle(positionFromCharIndex, size);
     _richEdit.Invalidate(rc, false);
 }
Beispiel #17
0
 /// <summary>
 /// 获得richtextBox中现有的图片集合
 /// </summary>
 /// <returns></returns>
 public string GetImageInfo()
 {
     string imageInfo = "";
     //try
     {
         REOBJECT reObject =new REOBJECT() ;
         for (int i = 0; i <  GetRichEditOleInterface().GetObjectCount(); i++) 
         {
             this.GetRichEditOleInterface().GetObject(i, reObject, GETOBJECTOPTIONS.REO_GETOBJ_ALL_INTERFACES);
             object t = Marshal.GetObjectForIUnknown(reObject.poleobj);
             MyPicture pic = t as MyPicture;
             if (pic != null)
                 imageInfo += reObject.cp.ToString() + "," + pic.MD5 + "|";
         }
     }
     //catch { }
     return imageInfo;
 }
Beispiel #18
0
        private Size GetSizeFromMillimeter(REOBJECT lpreobject)
        {
            using (Graphics graphics = Graphics.FromHwnd(_richEdit.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]);
            }
        }