早想降低一下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.youkuaiyun.com/images/p_blog_youkuaiyun.com/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中的初始大小。如果lWidth和lHeight均为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窗口,并设置初始大小,当width和height均为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窗口hwnd中DynamicGif对象的信息
//信息格式为:
// 每个对象用一行表示,属性间用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函数来获取,如果需要传输时将文字和图像文件分离,需要自己解析对象的信息,并写相关的协议。