2010-12-07 7 views
4

umwandelt Ich entwickle eine Winform Anwendung mit dem framlework .NET 3.5 in C#. Ich möchte dem Benutzer ermöglichen, ziehen Sie & ein Bild aus Word 2007. Grundsätzlich öffnen Sie den Benutzer docx, wählen Sie ein Bild und ziehen Sie & Drop sie auf meine PictureBox.Wie man eine Metafile zu Image durch Drag'n'Droping in einem Winform

Ich habe bereits den gleichen Prozess mit Bilddateien von meinem Desktop und von Internet-Seiten gemacht, aber ich kann mein Problem mit meinem Metafile nicht durchgehen. Ich habe einige Nachforschungen angestellt, aber ich habe keine Lösungen gefunden, die mein Problem lösen.

Hier ist, was ich auf meinem Drag & Drop-Ereignis gemacht:

private void PictureBox_DragDrop(object sender, DragEventArgs e) 
{ 
    if (e.Data.GetDataPresent(DataFormats.MetafilePict)){ 
     Image image = new Metafile((Stream)e.Data.GetData(DataFormats.MetafilePict));  
    } 
    } 

ich einen Stream mit diesem Code erhalten: (Stream) e.Data.GetData (DataFormats.MetafilePict), aber ich don Ich weiß nicht, wie man es in ein Metafile oder besser ein Image-Objekt umwandeln kann.

Wenn Sie irgendeine Idee oder Lösung haben, werde ich mich freuen, es zu lesen.

Danke,

Antwort

0

Ich glaube, Sie neue Metafile (Strom) aufrufen müssen, da es keine Methode .FromStream in Metafile ist.

+0

Ja, das stimmt. Ich habe es versucht, aber ich habe einen Fehler in der GDI +. Wie kann ich wissen, welcher Objekttyp mein Stream ist? – Joss

+0

Werfen Sie einen Blick auf die MetaFilePict-Dokumentation hier: http://msdn.microsoft.com/en-us/library/system.windows.forms.dataformats.metafilepict.aspx - vielleicht ist dies Ihr Fall. Ansonsten sollte funktionieren ... –

0

Ich bin immer noch graben in er Web, um andere Möglichkeit zu versuchen, mein Problem zu lösen. Hoffentlich habe ich diesen Thread unbeantwortet im Gespräch über mein Problem gefunden, aber ohne Antwort: Get Drag & Tropfen MS Word Bild + DataFormats.EnhancedMetafile & METADATEIBILD:

http://www.codeguru.com/forum/showthread.php?t=456722

ich mit einem anderen um arbeiten io der Lage sein, um das schwebende Bild (Bild gespeichert in Shape und nicht InlineShape) mit Word 2003 zu kopieren und in meine Winform einzufügen. Ich kann den Link der zweiten Quelle nicht einfügen (wegen meines schlechten Rufs auf dieser Website), aber ich werde tun, wenn jemand darum bittet.

Offensichtlich gibt es ein häufiges Problem mit der Tatsache, dass Sie nicht auf Ihre Metafile in der Zwischenablage gespeichert und per Drag & Drop zugreifen können.

Ich muss noch verstehen, wie man meine Metafile per Drag & Drop bekommen. Hier

2

ist ein funktionierendes Beispiel für Drag n Drop aus Wort (nicht für Powerpoint und Excel):

static Metafile GetMetafile(System.Windows.Forms.IDataObject obj) 
    { 
     var iobj = (System.Runtime.InteropServices.ComTypes.IDataObject)obj; 
     var etc = iobj.EnumFormatEtc(System.Runtime.InteropServices.ComTypes.DATADIR.DATADIR_GET); 
     var pceltFetched = new int[1]; 
     var fmtetc = new System.Runtime.InteropServices.ComTypes.FORMATETC[1]; 
     while (0 == etc.Next(1, fmtetc, pceltFetched) && pceltFetched[0] == 1) 
     { 
      var et = fmtetc[0]; 
      var fmt = DataFormats.GetFormat(et.cfFormat); 
      if (fmt.Name != "EnhancedMetafile") 
    { 
       continue; 
      } 
      System.Runtime.InteropServices.ComTypes.STGMEDIUM medium; 
      iobj.GetData(ref et, out medium); 
      return new Metafile(medium.unionmember, true); 
     } 
     return null; 
    } 



private void Panel_DragDrop(object sender, DragEventArgs e) 
{ 

    if (e.Data.GetDataPresent(DataFormats.EnhancedMetafile) & e.Data.GetDataPresent(DataFormats.MetafilePict)) 
    { 
        Metafile meta = GetMetafile(e.Data); 
        Image image = meta; 
    } 
} 

Danach Sie image.Save können Bild speichern oder Sie können es auf picturebox oder andere verwenden Steuerung.