DynamicGif 1.2

    技术2022-05-11  37

    早想降低一下DynamicGif控件的使用难度 ,正好这两天有时间,就更新了一下。

    DynamicGif 1.201 Beta 2007-3-13 更新)

    下载办法:

    用FlashGet或者右键“另存为”下载下面的这个文件。除去前面的61字节后,用zip扩展名保存。

    解压缩zip文件即可得到控件。(GIF:39,572 zip:39,511 DLL:98,304 Bytes )

    https://p-blog.csdn.net/images/p_blog_csdn_net/kql01/283737/o_upload.gif

    新增功能说明:

    1、添加两个导出函数:

    原来支持两个函数:

    STDAPI InsertGifToRicheditA( HWND hWnd, LPCSTR lpszGifFile );

    STDAPI InsertGifToRicheditW( HWND hWnd, LPCWSTR lpszGifFile);

    现在增加了:

    STDAPI InsertGifToRichedit2A( HWND hWnd, LPCSTR lpszGifFile,LONG lWidth,LONG lHeight );

    STDAPI InsertGifToRichedit2W( HWND hWnd, LPCWSTR lpszGifFile,LONG lWidth,LONG lHeight );

    允许在插入图像时,指定图像在Richedit中的初始大小。如果lWidthlHeight均为0,则按照图像原始大小插入。

     

    2、增加了一个辅助的COM类,用在非VC的开发环境中,免去处理RichEdit一些OLE接口的问题。

    COM接口定义如下:

    [

    object,

    uuid(C51DA 89C -924D-4AE7-B740-09CC68192E09),

    dual,

    nonextensible,

    helpstring("IDynGifManager 接口"),

    pointer_default(unique)

    ]

    interface IDynGifManager : IDispatch

    {   

         // 将图像插入到指定的Richedit窗口,并设置初始大小,当widthheight均为0时,表示保持图像原始大小。

       [id(1), helpstring("方法InsertImage")]

    HRESULT InsertImage([in] OLE_HANDLE hwnd,[in] BSTR bstrImagePath, [in] LONG ulWidth, [in] LONG ulHeight,[out,retval] IDispatch** hObj);

         //获取对象Richedit窗口hwndDynamicGif对象的信息

         //信息格式为:

         // 每个对象用一行表示,属性间用Tab分割

    // 格式如下:

    //     位置(0下标开始) Text属性 Width Height ImagePath

    // 如果没用DynamicGif存在,则返回空字符串。

         [id(2), helpstring("方法GetObjectsInfo")]

    HRESULT GetObjectsInfo([in] OLE_HANDLE hwnd,[out,retval] BSTR* pbstrObjectsInfo);

     

    };

     

     使用方法:

    1 Form或者对话框中显示一个Gif或其他类型的图像

    这种使用方法最简单,将控件放到Form/对话框中,并在初始化的时候,调用LoadFromFile即可。(保留Text属性,用来解析图像和表情符号对应)

    2 Richedit中插入图像

    VC中的使用方法参考前面的文章,现在重点介绍一下在VB/C#中的用法,至于其他的环境,请自己摸索一下吧。

    1)在控件面板中,将DynamicGif控件放入到部件库,会有一个小手出现

    2)在相应的函数中,使用下面的语句将控件插入Richedit中:

    VB

        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

            Dim dynMgr As DynamicGifLib.DynGifManagerClass

            Dim objGif As DynamicGifLib.IDynamicGif

            dynMgr = New DynamicGifLib.DynGifManagerClass

            objGif = dynMgr.InsertImage(RichTextBox1.Handle().ToInt32(), "e:/L.gif", 72, 72)

            objGif.LoadFromFile("e:/1.gif")

        End Sub

    C#

             private void Form1_Load(object sender, System.EventArgs e)

             {

                  DynamicGifLib.DynGifManagerClass dynGif

    = new  DynamicGifLib.DynGifManagerClass();

                  object obj = dynGif.InsertImage( richTextBox1.Handle.ToInt32(),

                       "e://L.gif",72,72 );

                  DynamicGifLib.IDynamicGif objGif = (DynamicGifLib.IDynamicGif)obj;

                  objGif.LoadFromFile( "e://1.gif");

                  objGif.AboutBox();

                  objGif.DisplaySize = 128 * 65536 + 128 '显示图像大小为 128 * 128

                 

             }

     

     

    说明:

    1 添加图像显示大小属性:DisplaySize;用一个long整数来表示,其中LOWORD为图像宽度,HIWORD为高度,即DisplaySize = Height * 65536 + Width

    2 Richedit内部中对象信息可以通过GetObjectsInfo函数来获取,如果需要传输时将文字和图像文件分离,需要自己解析对象的信息,并写相关的协议。

     

     

     


    最新回复(0)