vc资源 Windows资源 文件资源 自定义文件资源的读取

http://book.51cto.com/art/200908/145793.htm

Windows资源是一种特殊的存储形式,它通常存在于EXE和DLL模块中,常使用资源来存储程序需要的图标、工具栏等信息

注意到当前运行的程序其资源文件在运行时期是只读的,所以说资源文件不适合那些需要动态更新的信息,必须在设计阶段就能确定的信息举个例子,一些下拉框的信息可能来自于某些字典表,而这些字典项的内容在程序的运行期间是不变的(比如,性别包含两项:男、女),这个时候我们可以考虑采用资源文件。
另外一种场合,如果在程序中创建一个Word文件,可能需要一个Word模板,或者说我们的Access数据库可能需要一个空白的模板,而我们又不希望在程序发布时多带一个文件,那么这个时候,就需要使用资源文件了。

资源就存在当前正在运行的程序中,我们让这个程序读取自己的资源,这犹如一个高明的医生给自己做腹腔手术。

/***************************************************************
Windows提供的API函数


这里面仅仅列出常见类型(快捷键、位图、光标、图标、菜单、字符串)的资源的加载。下面是加载所有类型的资源的函数。
 

我们通常加载某个资源的步骤如下所示:

使用LoadLibrary()加载模块,或者获取当前应用程序的模块。

调用FindResource()从指定模块中查找指定的资源,返回该资源的句柄。

调用SizeofResource ()获取资源数据的长度。

调用LoadResource()将资源加载至内存。

调用LockResource()锁定资源,并返回指向资源数据的指针。

通过数据指针操作数据。

使用完毕,调用FreeResource()释放指定的资源。

/***************************************************************

现在动手
在当前程序中添加一个Word资源,并在运行时读取它。
选择【Win32】→【Win32项目】→【控制台程序】命令,创建ResLoader。
打开资源视图,导入一个Word文档(只要word就可以,将来程序读的就是该word中的文字),资源类型定义为"WORD",资源名为IDR_WORD1

  
 
从资源中加载自定义数据,编辑ResLoader.cpp
 
 
                

/***************************

由于这是win32控制台应用程序,添加了资源后,

在stafx.h中要#include "resource.h"

并且该程序用到了MFC中的类

选择工程(项目)属性,修改一下MFC的使用,在共享dll中使用MFC

项目 ---- 属性 ---- 配置属性 ---- 常规 -----MFC使用 ---在共享DLL中使用MFC

然后还需要包含头文件afxwin.h

最后程序就可以运行了

程序运行时,会自动在当前目录下生成一个out.doc文件,并自动启动Word打开它。

注意ShellExecute()函数的使用,它用以执行一条系统命令,如打开某个文件。

***************************/ #include "stdafx.h" #include CWinApp theApp; int _tmain(int argc, _TCHAR* argv[]) { int nRetCode = 0; if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) { _tprintf(_T("错误: MFC 初始化失败\n")); nRetCode = 1; } else { HRSRC hRes = FindResource(theApp.m_hInstance, MAKEINTRESOURCE(IDR_WORD1), _T("WORD")); DWORD len = SizeofResource(theApp.m_hInstance, hRes); HGLOBAL hg = LoadResource(theApp.m_hInstance, hRes); LPVOID lp = (LPSTR)LockResource(hg); //将资源中的内容保存至某个Word文件中 CFile file; file.Open(_T("out.doc"), CFile::modeWrite | CFile::modeCreate); char * cp = (char *)lp; for(int i = 0; i < len; i++) { file.Write(cp++, 1); } CString filePath = file.GetFilePath(); file.Close(); //打开该文件 ShellExecute(NULL, _T("open"), filePath, NULL, NULL, SW_SHOW); FreeResource(hg); } return nRetCode; }

 
 
 
marginwidth="0" marginheight="0" class="ztag adv-iframe" width="300" height="250" frameborder="0" scrolling="no" allowtransparency="true" src="http://g.163.com/r?site=netease&affiliate=blog&cat=homepage&type=logo300x250&location=10" style="margin: 0px; padding: 0px; border-width: 0px; border-style: initial; display: block;">

你可能感兴趣的:(MFC)