• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 关于在CRichEditCtrl中InsertObject播放gif对象

关于在CRichEditCtrl中InsertObject播放gif对象

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了cricheditctrl,cricheditctrl setsel,cricheditctrl 透明,insert object,对象不支持insert等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 关于在CRichEditCtrl中InsertObject播放gif对象
描述:

先谈谈我的理解:
基本的实现方法是: GetIRichEditOle()->InsertObject( REOBJECT *reobj );
关于这个reobj :
         reobj.cbStruct = sizeof REOBJECT;
reobj.clsid = clsid_ole;             // CLSID of IOleObject
reobj.cp = REO_CP_SELECTION;
reobj.dvaspect = DVASPECT_CONTENT;
reobj.poleobj = m_lpObject;            // a piont to IOleObject
reobj.polesite = pOleClientSite;        //GetIRichEditOle()->GetClientSite();
reobj.pstg = y.pstg;
至于这个reobj.pstg ? 直接使用 QueryInterface 么?
可能是这样的方式:
         LPLOCKBYTES lpLockBytes = NULL;
SCODE sc;
IStorage *pStorage;
sc = ::CreateILockBytesOnHGlobal(NULL, TRUE, &lpLockBytes);
if (sc != S_OK)
AfxThrowOleException(sc);
ASSERT(lpLockBytes != NULL);
sc = ::StgCreateDocfileOnILockBytes(lpLockBytes,
STGM_SHARE_EXCLUSIVE|STGM_CREATE|STGM_READWRITE, 0, &pStorage);
if (sc != S_OK)
{
VERIFY(lpLockBytes->Release() == 0);
lpLockBytes = NULL;
AfxThrowOleException(sc);
}
ASSERT(pStorage != NULL);
这样可能能够把这个对象插入到CRichEditCtrl,但是它不是一直想bmp这个的系统预定义文件对象,它有UI,还有交互,它是谁呢?它是一个gif播放的控件,这个是它的一个接口的定义:
// Generated .IDL file (by the OLE/COM Object Viewer)
// 
// typelib filename: ImageOle.dll
[
  uuid(710993A2-4F87-41D7-B6FE-F5A20368465F),
  version(1.0),
  helpstring("ImageOle 1.0 Type Library")
]
library ImageOleLib
{
    // TLib :     // TLib : OLE Automation : {00020430-0000-0000-C000-000000000046}
    importlib("stdole2.tlb");
    // Forward declare all types defined in this typelib
    interface IGifAnimator;
    [
      uuid(06ADA938-0FB0-4BC0-B19B-0A38AB17F182),
      helpstring("GifAnimator Class")
    ]
    coclass GifAnimator {
        [default] interface IGifAnimator;
    };
    [
      odl,
      uuid(0C1CF2DF-05A3-4FEF-8CD4-F5CFC4355A16),
      helpstring("IGifAnimator Interface"),
      dual,
      nonextensible,
      oleautomation
    ]
    interface IGifAnimator : IDispatch {
        [id(0x00000001), helpstring("method LoadFromFile")]
        HRESULT LoadFromFile([in] BSTR FileName);
        [id(0x00000002), helpstring("method TriggerFrameChange")]
        HRESULT TriggerFrameChange([out, retval] VARIANT_BOOL* pbChanged);
        [id(0x00000003), helpstring("method GetFilePath")]
        HRESULT GetFilePath([out, retval] BSTR* pFilePath);
        [id(0x00000004), helpstring("method ShowText")]
        HRESULT ShowText([in] BSTR Text);
    };
};
它还实现了其他作为一个ActiveX应该实现的其他的接口,它是谁呢?
/////////////////////////////////////////////////////////////////////////////////////
 You can find her here : %Program files%\Tencent\qq\ImageOle.dll
/////////////////////////////////////////////////////////////////////////////////////
它是来自QQ的一个播放gif的控件,我已经用ActiveX Control Test Container测试过了它,它显示并播放gif的步骤是:
m_CurrentGifAnimator->LoadFromFile(strFileName);
然后通过一个固定的频率调用 m_CurrentGifAnimator->TriggerFrameChange(); 实现动画的播放。
我读过了Insert any bitmap into a richeditctrl的代码
觉得,相比这个来说,那个简单得多可以很好的得到IStorage,也不需要后期的控制,只要一个IOleObject就行了。
现在我们回我们的问题上来,首先得得到 IGifAnimator, IOleObject其他的我就不知道了。
还有,是不是还有得到IStorage?还有Create... From ...?
然后激活它的ui,可能在每次调用m_CurrentGifAnimator->TriggerFrameChange();后还得刷新(测试知)
所有的细节我不是很清楚。现在关于纯OLE的资料不是很好找。希望那位com大师,能给我讲讲,最好写好了给我一份代码,我弄了好长的时间了。不胜感激。
测试文件可以从你的qq目录下获得。
dtianx@hotmail.com


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • QQ图文发送方式?可否将OCX控件当作OLE对象插入CRichEditCtrl?ADO如何读取XML中的记录集?寻求技术高人请进
  • 想做一个可插入到CRichEditCtrl中显示GIF动画的组件,遇到点问题,请朋友们帮忙指点谢谢
  • ATL做的一个控件,用于插入到CRichEditCtrl中显示GIF图片,控件中用一个线程显示GIF图片,
  • ATL写的ActiveX控件,在CRichEditCtrl容器里怎样控制ActiveX大小?
  • 如何开发一个OLE组件,可以插入到OLE容器中使用比如插入CRichEditCtrl?
  • 急问:CRichEditCtrl中StreamOut用法出错的问题???????????????
  • CRichEditCtrl插入ole图片与Ctrl+V插入图片不一样??
  • 请教CRichEditCtrl修改字间距问题
  • CRichEditCtrl和数据库交互!
  • CRichEditCtrl里无窗口的控件怎么添加窗口提示?

相关文章

  • 2017-06-05 调用ACTIVEX控件时,TSTCON32错误
  • 2017-06-05 可以知道系统当前其它进程的窗口句柄,怎样获得其执行文件的路径?
  • 2017-06-04 ActiveX控件中的消息传递
  • 2017-06-04 activex控件
  • 2017-06-04 不使用IDL如何定义一个接口?
  • 2017-06-04 VC下作ActiveX控件,内部调用Invalidate为什么不刷新?
  • 2017-06-04 关于一个服务端和数据库的连接问题。
  • 2017-06-04 加密用已知密钥急。。。。。。。。。100
  • 2017-06-05 dll中对话框为什么不响应按钮事件??
  • 2017-06-04 100分请教个IHTMLDocument2问题

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • CreateThread函数的问题?
    • 请教:ADO异常处理
    • bho劫持困惑,来自百度搜索结果!
    • 一个组件外部进程条的问题,急,请高手指教
    • vc6&newatlobject?
    • 使用setparent的奇怪问题
    • 用VC编写一个XP下的系统服务进程,为什么在里面不能调用WIN32API
    • MFC生成的OFFICEACTIVEX控件,如何在USER下注册
    • mfc开发的activex控件+第三方dll打包成cab的问题
    • 在一个应用程序中如何截获其他应用程序MESSAGEBOX发过来的消息?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有