1

OLE オブジェクトに対していくつかの操作を実行する Excel へのアドインに取り組んでいます。ワークシートにプログラムで埋め込まれた OLE オブジェクトからデータを取得する必要があります (数学タイプから TeX 言語への変換)。これまでのところ、Excel ワークシートへの追加、Math Type OLE オブジェクトからの数式の取得、数式の設定など、ほとんどの問題に対処してきました。しかし、最後にするべきことがあります。

数学タイプの OLE オブジェクトによって設定された数式の画像を含むメタファイルを抽出する必要があります。画像を抽出してメモリ ビットマップとして保存し、何らかのコントロールで表示したいと考えています。問題は、OLE オブジェクトからメタファイルを取得するコードを持っていることです。

MTSDKDN.MathTypeSDK.IOleObject oleObject = null;
        oleDataObject = dataObject as IDataObject;

        oleObject = dataObject as MTSDKDN.MathTypeSDK.IOleObject;

        ConnectFORMATETC formatEtc = new ConnectFORMATETC();
        ConnectSTGMEDIUM stgMedium = new ConnectSTGMEDIUM();
        DataFormats.Format dataFormat;

        obj.Verb((Excel.XlOLEVerb)3);
        dataObject = obj.Object;

         formatEtc.cfFormat =(Int16)DataFormats.GetFormat(DataFormats.MetafilePict ).Id;

        formatEtc.dwAspect =  System.Runtime.InteropServices.ComTypes.DVASPECT.DVASPECT_CONTENT;

        formatEtc.lindex = -1;
        formatEtc.ptd = (IntPtr)0;
        formatEtc.tymed = TYMED.TYMED_MFPICT;

        stgMedium.unionmember=(IntPtr)0;
        stgMedium.tymed=TYMED.TYMED_NULL;
        stgMedium.pUnkForRelease=0;

        oleDataObject.GetData(ref formatEtc,out stgMedium);
        //from this point no idea what to do
        IntPtr ptr;
        ptr = stgMedium.unionmember;
        HandleRef handleRef = new HandleRef(null, ptr);
        IntPtr ptrToHandle = GlobalLock(handleRef);
        int Length = GlobalSize(handleRef);

メタファイルを取得するために正しいことを行っているかどうかはわかりませんが、最も重要なことは (この方法でメタファイルを取得しても問題ないと仮定して)、メタファイルを管理して画像データをビットマップとしてアドインのメモリに保存する方法です。 .

私はあなたの答えに本当に感謝しています。

4

0 に答える 0