当前位置: 首页 > 图文教程 > 开发语言 > VC++ > CAnimateCtrl::Open的使用问题

VC++
用VC++创建自定义向导程序
自定义 CRichEditCtrl 控件
Office 2000 风格的停泊、智能型菜单
黑客攻击手段之偷梁换柱
完善 CPopupText 类
让工具条显示256色图像
定制编辑框的上下文菜单
列表控件排序功能的实现
一个优秀的网格控件CGridCtrl
如何用代码动态添加控件
如何在编辑框中使用IAutoComplete接口
应用程序中添加“Coolbars”的简单方法
介绍一个有Toolbar功能的可重用类 CPopupText
在工具栏按钮上添加文本标签
类似Dreamweaver的颜色选择器
如何设置ListView控件的完全行(Full Row)选项
如何enable/disable菜单项
关于CEdit控件的透明 --作者:monsoon
动态菜单项、状态条提示、工具条提示问题
CAnimateCtrl::Open的使用问题

VC++ 中的 CAnimateCtrl::Open的使用问题


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 106 ::
收藏到网摘: n/a

CAnimateCtrl::Open的使用问题
VCKBASE
提出问题:使用CAnimateCtrl::Open( LPCTSTR lpszFileName )时,参数lpszFileName 是个字符串,表示AVI文件名。因此在分发应用程序时,除了分发可执行程序外,还必须单独分发AVI文件。是否有办法从资源中得到AVI文件?

    在这个程序中,如果要从外部获取文件是相当不方便的,万一谁不小心将文件删除或改名的话。。。。所以最好的方法是将文件作为资源存储在可执行文件中。幸亏CAnimateCtrl类有一个成员函数 CAnimateCtrl::Open 以UINT为参数,也就是说,它UINT可以是资源的ID号。

    但是如何将AVI文件放入EXE文件呢?这是需要技巧的。animation控件寻找AVI类型的资源,所以你要做的事情是在资源文件(.rc)中加入代码:

IDR_MYANIMATION AVI DISCARDABLE "res\\myanim.avi" 

    事先必须定义IDR_MYANIMATION为一个整型数,(注意不能使用一个串名作为资源)并且AVI文件要放在工程目录下的RES目录中。资源编译器会一个字节一个字节地将myanim.avi拷贝到可执行文件中,以便动画控件能找到它。

另外,使用相同的方法可以将任何文件作为资源放入EXE文件。方法是:

IDR_MYFOOFILE FOO DISCARDABLE "res\\myanim.foo" 

一旦在EXE文件中包含了foo类型文件,如何访问它呢?那就需要自己写一些代码。首先,你必须调用FindResource函数来获得资源句柄。

HINSTANCE hInst = AfxGetResourceHandle(); 
HRSRC hRsrc = ::FindResource(hInst,
MAKEINTRESOURCE(IDR_MYFOOFILE), // ID
"FOO"); // type 
ASSERT(hRsrc); 

假设hRsrc非空,再调用两个函数来获得资源(FOO文件)的大小及数据本身。

DWORD len = SizeofResource(hInst, hRsrc); 
BYTE* lpRsrc = (BYTE*)LoadResource(hInst, hRsrc); 
ASSERT(lpRsrc); 

现在,在内存中lpRsrc指向FOO文件,如果你想要象访问普通磁盘文件一样访问这个内存,可以使用类库的CMemFile,它将一块存储区域当作CFile来对待。

CMemFile file(lpRsrc, len); 
file.Read(...); // etc. 

你甚至可以象重载OnOpenDocument打开磁盘文件一样用CDocument打开资源。