=============== Windows资源文件的读取 =============== Windows资源操作函数 12 LoadAccelerators 加载快捷键资源 14 LoadBitmap 加载位图资源 16 LoadCursor 加载光标资源 18 LoadIcon 加载图标资源 20 LoadMenu 加载菜单资源 22 LoadString 加载字符串资源 Windows资源操作函数 29 FindResource 从指定模块中加载指定名称、类型的资源 31 SizeofResource 获取资源数据的长度 33 LoadResource 加载指定的资源至内存 35 LockResource 锁定指定的资源,并返回指向资源数据的指针 37 FreeResource 释放指定的资源 39 我们通常加载某个资源的步骤如下所示: 41 使用LoadLibrary()加载模块,或者获取当前应用程序的模块。 43 调用FindResource()从指定模块中查找指定的资源,返回该资源的句柄。 45 调用SizeofResource ()获取资源数据的长度。 47 调用LoadResource()将资源加载至内存。 49 调用LockResource()锁定资源,并返回指向资源数据的指针。 51 通过数据指针操作数据。 53 使用完毕,调用FreeResource()释放指定的资源。 57 如下例程序演示了如何在当前程序中添加一个Word资源,并在运行时读取它,请读者仔细体验。 58 59 选择【Win32】→【Win32项目】→【控制台程序】命令,创建ResLoader。 60 61 打开资源视图,导入一个Word文档,资源类型定义为"WORD",资源名为IDR_WORD1,如图6-22所示。 62 64 (点击查看大图)图6-22 将一个Word文件当做资源导入 65 编写主程序如下: 66 67 【程序 6-6】从资源中加载自定义数据 68 69 01 #include "stdafx.h" 70 02 #include "ResLoader.h" 71 03 72 04 CWinApp theApp; 73 05 74 06 int _tmain() 75 07 { 76 08 int nRetCode = 0; 77 09 78 10 if (!AfxWinInit(::GetModuleHandle(NULL),NULL, ::GetCommandLine(), 0)) 80 11 { 81 12 _tprintf(_T("错误: MFC 初始化失败\n")); 82 13 nRetCode = 1; 83 14 } 84 15 else 85 16 { 86 17 HRSRC hRes = FindResource(theApp.m_hInstance, MAKEINTRESOURCE(IDR_WORD1), _T("WORD")); 88 18 //获取长度 89 19 DWORD len = SizeofResource(theApp.m_hInstance, hRes); 90 20 HGLOBAL hg = LoadResource(theApp.m_hInstance, hRes); 91 21 LPVOID lp = (LPSTR)LockResource(hg); 92 22 93 23 //将资源中的内容保存至某个Word文件中 94 24 CFile file; 95 25 file.Open(_T("out.doc"), CFile::modeWrite | CFile::modeCreate); 98 27 char * cp = (char *)lp; 99 28 for(int i = 0; i < len; i++) 100 29 { 101 30 file.Write(cp++, 1); 102 31 } 103 32 104 33 CString filePath = file.GetFilePath(); 105 34 file.Close(); 106 35 107 36 //打开该文件 108 37 ShellExecute(NULL,_T("open"),filePath, NULL, NULL, SW_SHOW); 110 38 FreeResource(hg); 111 39 } 112 40 113 41 return nRetCode; 42 } 114 程序运行时,会自动在当前目录下生成一个out.doc文件,并自动启动Word打开它,如图6-23所示。 117 (点击查看大图)图6-23 运行结果 118 提示 119 120 注意ShellExecute()函数的使用,它用以执行一条系统命令,如打开某个文件。 121 122 光盘导读 123 124 该项目对应于光盘中的目录"\ch06\ResLoader"。
原文地址:http://book.51cto.com/art/200908/145793.htm
时间: 2024-12-15 01:44:02