2010-12-07 13 views
4

C#でフレームワーク.NET 3.5を使用してWinformアプリケーションを開発します。 私はユーザーが&をWord 2007からドラッグすることを許可したいと思います。基本的には、ユーザーはdocxを開き、画像を選択して&をPictureBoxにドロップします。WinformでDrag'n'Dropingを使用してメタファイルをイメージに変換する方法

私は既に自分のデスクトップとインターネットページから画像ファイルと同じプロセスを実行しましたが、私のメタファイルで問題を解決することはできません。私はほとんど研究をしませんでしたが、私の問題を解決する解決策は見つかりませんでした。 (ストリーム)e.Data.GetData(DataFormats.MetafilePict)が、私ドン:私はこのコードでストリームを取得することができます

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

:ここ

は、私は私のドラッグ& Dropイベントに行ってきたものですそれをメタファイルまたはそれ以上のImageオブジェクトに変換する方法はわかりません。

ご意見やご提案がありましたら、お読みになりたいと思います。

おかげで、

答えて

0

私はあなたがMetafileには、メソッド.FromStreamがないように、新しいメタファイル(ストリーム)をコールする必要があると思います。

+0

はい、そうです。あなたのやり方を試してみましたが、GDI +にエラーがあります。どのオブジェクトタイプが自分のストリームであるかをどのように知ることができますか? – Joss

+0

ここでMetaFilePictのドキュメントを見てください:http://msdn.microsoft.com/en-us/library/system.windows.forms.dataformats.metafilepict.aspx - 多分これはあなたのケースです。それ以外の場合、動作するはずです... –

0

私はまだ彼のウェブに私の問題を解決するために別の方法を試して掘り下げています。 は、うまくいけば、私は私の問題についてしかし話、この未回答のスレッドを発見した任意の応答なし: ゲットドラッグ&ドロップMS Wordのイメージ+ DataFormats.EnhancedMetafile & METAFILEPICT:

http://www.codeguru.com/forum/showthread.php?t=456722私は別で回避

ioはできるようにWord 2003でフローティングイメージ(図形に保存され、InlineShapeではなく保存されているイメージ)をコピーしてwinformに貼り付ける。 2番目のソースのリンクを貼り付けることはできません(このウェブサイトの評判が低いため)。

明らかに、クリップボードに格納されているメタファイルにアクセスできず、ドラッグすると、& Dropになるという共通の問題があります。

私はまだドラッグで自分のメタファイルを取得する方法を理解する必要があります&ドロップ。ここで

2

は、ドラッグ&n個Wordからドロップ(ないPowerPoint、および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; 
    } 
} 

あなたは画像を保存するためにimage.Saveを使用するかは、ピクチャまたはその他の上でそれを使用することができますコントロール。

関連する問題