/// <param name="fOwn">
        ///  <see cref="BOOL.TRUE"/> if the picture object is to destroy its picture when the object is destroyed.
        ///  (The picture handle in the <paramref name="pictdesc"/>.)
        /// </param>
        public unsafe static object OleCreatePictureIndirect(ref PICTDESC pictdesc, ref Guid refiid, BOOL fOwn)
        {
            pictdesc.cbSizeofstruct = (uint)sizeof(PICTDESC);

            fixed(PICTDESC *p = &pictdesc)
            {
                return(OleCreatePictureIndirect(p, ref refiid, fOwn));
            }
        }
示例#2
0
            public static PICTDESC FromMetafile(Metafile metafile)
            {
                PICTDESC desc = new PICTDESC
                {
                    picType = PICTYPE.ENHMETAFILE
                };

                desc.Union.emf.hemf = metafile.GetHenhmetafile();
                return(desc);
            }
示例#3
0
            public static PICTDESC FromBitmap(Bitmap bitmap, IntPtr paletteHandle = default)
            {
                PICTDESC desc = new PICTDESC
                {
                    picType = PICTYPE.BITMAP
                };

                desc.Union.bmp.hbitmap = bitmap.GetHbitmap();
                desc.Union.bmp.hpal    = paletteHandle;
                return(desc);
            }
示例#4
0
        private static object GetTransparentIPictureDispFromBitmapHandle( IntPtr hIntPtr )
        {
            int iResult;
            Guid objGuid = new Guid("00020400-0000-0000-C000-000000000046");
            PICTDESC tPICTDESC = new PICTDESC(hIntPtr);
            tPICTDESC.SizeOfStruct = Marshal.SizeOf(tPICTDESC);

            stdole.IPictureDisp objPicture;
            iResult = OleCreatePictureIndirect(ref tPICTDESC, ref objGuid, 1, out objPicture);

            return objPicture;
        }
示例#5
0
        public override object ConvertManagedToNative(object managedValue, Com2PropertyDescriptor pd, ref bool cancelSet)
        {
            // Don't cancel the set
            cancelSet = false;

            if (_lastManaged?.Equals(managedValue) == true)
            {
                object target = _pictureRef?.Target;
                if (target is not null)
                {
                    return(target);
                }
            }

            // We have to build an IPicture
            if (managedValue is not null)
            {
                BOOL own = BOOL.FALSE;

                PICTDESC pictdesc;
                if (managedValue is Icon icon)
                {
                    pictdesc = PICTDESC.FromIcon(icon, copy: false);
                }
                else if (managedValue is Bitmap bitmap)
                {
                    pictdesc = PICTDESC.FromBitmap(bitmap);
                    own      = BOOL.TRUE;
                }
                else
                {
                    Debug.Fail($"Unknown Image type: {managedValue.GetType().Name}");
                    return(null);
                }

                Guid     iid  = typeof(IPicture).GUID;
                IPicture pict = (IPicture)OleCreatePictureIndirect(ref pictdesc, ref iid, own);
                _lastManaged      = managedValue;
                _lastNativeHandle = (IntPtr)pict.Handle;
                _pictureRef       = new WeakReference(pict);
                return(pict);
            }
            else
            {
                _lastManaged      = null;
                _lastNativeHandle = IntPtr.Zero;
                _pictureRef       = null;
                return(null);
            }
        }
示例#6
0
        private static PICTDESC GetPICTDESCFromPicture(Image image)
        {
            if (image is Bitmap bmp)
            {
                return(PICTDESC.FromBitmap(bmp));
            }

            if (image is Metafile mf)
            {
                return(PICTDESC.FromMetafile(mf));
            }

            throw new ArgumentException("AXUnknownImage", nameof(image));
        }
示例#7
0
            public static PICTDESC FromIcon(Icon icon, bool copy)
            {
                PICTDESC desc = new PICTDESC
                {
                    picType = PICTYPE.ICON
                };

                desc.Union.icon.hicon = copy ?
                                        User32.CopyImage(
                    icon.Handle,
                    User32.IMAGE.ICON,
                    icon.Width,
                    icon.Height,
                    User32.LR.DEFAULTCOLOR)
                    : icon.Handle;

                GC.KeepAlive(icon);
                return(desc);
            }
 public static PICTDESC CreateWinMetafilePICTDESC(IntPtr hmetafile, int x, int y) {
     PICTDESC pictdesc = new PICTDESC();
     pictdesc.cbSizeOfStruct = 20;
     pictdesc.picType = Ole.PICTYPE_METAFILE;
     pictdesc.union1 = hmetafile;
     pictdesc.union2 = x;
     pictdesc.union3 = y;
     return pictdesc;
 }
 public static PICTDESC CreateIconPICTDESC(IntPtr hicon) {
     PICTDESC pictdesc = new PICTDESC();
     pictdesc.cbSizeOfStruct = 12;
     pictdesc.picType = Ole.PICTYPE_ICON;
     pictdesc.union1 = hicon;
     return pictdesc;
 }
 public static PICTDESC CreateBitmapPICTDESC(IntPtr hbitmap, IntPtr hpal) {
     PICTDESC pictdesc = new PICTDESC();
     pictdesc.cbSizeOfStruct = 16;
     pictdesc.picType = Ole.PICTYPE_BITMAP;
     pictdesc.union1 = hbitmap;
     pictdesc.union2 = (int)(((long)hpal) & 0xffffffff);
     pictdesc.union3 = (int)(((long)hpal) >> 32);
     return pictdesc;
 }
示例#11
0
        public static IPicture GetIPictureFromPicture(Image image)
        {
            PICTDESC desc = GetPICTDESCFromPicture(image);

            return((IPicture)OleCreatePictureIndirect(ref desc, in s_ipicture_Guid, fOwn: BOOL.TRUE));
        }
示例#12
0
        public static IPicture GetIPictureFromCursor(IntPtr cursorHandle)
        {
            PICTDESC desc = PICTDESC.FromIcon(Icon.FromHandle(cursorHandle), copy: true);

            return((IPicture)OleCreatePictureIndirect(ref desc, in s_ipicture_Guid, fOwn: BOOL.TRUE));
        }
 public static extern IPicture OleCreatePictureIndirect(PICTDESC pictdesc, [In] ref Guid refiid, bool fOwn);
示例#14
0
 public static extern void OleCreatePictureIndirect(ref PICTDESC pPictDesc, ref Guid riid, bool fOwn, out stdole.StdPicture ppvObj);
 public static PICTDESC CreateEnhMetafilePICTDESC(IntPtr hEMF) {
     PICTDESC pictdesc = new PICTDESC();
     pictdesc.cbSizeOfStruct = 12;
     pictdesc.picType = Ole.PICTYPE_ENHMETAFILE;
     pictdesc.union1 = hEMF;
     return pictdesc;
 }
示例#16
0
        public static IPictureDisp GetIPictureDispFromPicture(Image image)
        {
            PICTDESC desc = GetPICTDESCFromPicture(image);

            return((IPictureDisp)OleCreatePictureIndirect(ref desc, ref ipictureDisp_Guid, fOwn: BOOL.TRUE));
        }
示例#17
0
 static extern int OleCreatePictureIndirect( ref PICTDESC pPictDesc, ref Guid riid, int fOwn, out stdole.IPictureDisp ppvObj );
示例#18
0
 public static extern int OleCreatePictureIndirect(ref PICTDESC pPictDesc,
                                                   ref Guid riid, int fOwn, [MarshalAs(UnmanagedType.IDispatch)] ref object
                                                   ppvObj);
示例#19
0
		public static extern int OleCreatePictureIndirect(ref PICTDESC pPictDesc,
			ref Guid riid, int fOwn, [MarshalAs(UnmanagedType.IDispatch)] ref object
			ppvObj);
 /// <param name="fOwn">
 ///  <see cref="BOOL.TRUE"/> if the picture object is to destroy its picture when the object is destroyed.
 ///  (The picture handle in the <paramref name="pictdesc"/>.)
 /// </param>
 public unsafe static object OleCreatePictureIndirect(ref PICTDESC pictdesc, in Guid refiid, BOOL fOwn)
示例#21
0
        public static stdole.StdPicture LoadPictureRes(string name)
        {
            Bitmap bmp = new Bitmap(Assembly.GetExecutingAssembly().GetManifestResourceStream(name));
            //for (int i = 0; i < bmp.Palette.Entries.Length; i++ )
                //bmp.Palette.Entries[i] = Color.FromArgb(0, 254, 0);

            //CreateMappedBitmap(IDE.AddInInstance, BMP_ID, 0, g_map, 1)

            PICTDESC pPictDesc = new PICTDESC(bmp);
            Guid riid = new Guid("7BF80980-BF32-101A-8BBB-00AA00300CAB");
            stdole.StdPicture ppvObj = null;
            OleCreatePictureIndirect(ref pPictDesc, ref riid, true, out ppvObj);

            bmp.Dispose();
            return ppvObj;
        }