CAnimateCtrl::Open的使用问题

关键我就爱你昂

关键我就爱你昂

2016-01-29 12:00

CAnimateCtrl::Open的使用问题,CAnimateCtrl::Open的使用问题
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打开资源。
展开更多 50%)
分享

猜你喜欢

CAnimateCtrl::Open的使用问题

C语言教程 C语言函数
CAnimateCtrl::Open的使用问题

Open the sound volume

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
Open the sound volume

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Windows2000新型Open对话框的使用

C语言教程 C语言函数
Windows2000新型Open对话框的使用

liverpool one now open

平面设计 海报设计 广告设计 画报设计 签名设计 服装设计 名片设计 画册设计 版式设计 商标设计
liverpool one now open

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

Open and Print a Word Document

Web开发
Open and Print a Word Document

window.open的功能全解析

Web开发
window.open的功能全解析

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

用CSS控制网页总体风格

用CSS控制网页总体风格

如何用代码动态添加控件

如何用代码动态添加控件
下拉加载更多内容 ↓