65.9K
CodeProject 正在变化。 阅读更多。
Home

如何从 HTML 资源中提取文本

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.69/5 (26投票s)

2005年6月10日

2分钟阅读

viewsIcon

78937

downloadIcon

1612

本文说明了如何从 HTML 资源中提取文本。

引言

本文将引导初学者了解将 HTML 资源添加到他们的项目并通过代码访问该资源的过程。我在这里提供一个简单的函数,它将用 HTML 资源的全部内容填充一个 CString

背景

几天前,我正在编写一个生成 HTML 报告的应用程序,并希望将报告的模板添加到我的代码中。我不想硬编码任何 HTML,也不想引用外部文件作为模板。因此,我决定通过将 HTML 模板作为资源添加到我的项目中来解决这个难题。结果,我能够加载资源并获得它的 HANDLE,但无法弄清楚如何将内容放入 CString 中。我的根本问题是我没有意识到 HANDLE 实际上是指向我加载的 HTML 的裸指针。

这个看似简单的任务让我绞尽脑汁近一个小时,直到在 VC++ 论坛上得到了帮助。然后我决定把这些东西整理起来,作为任何可能遇到此问题的人的参考。

将 HTML 资源添加到您的项目中

创建项目后,您可以右键单击资源选项卡中找到的项目,然后选择“添加资源”,如以下所示

Add Resource

然后系统将提示您选择资源类型。选择 HTML,您可以选择创建一个新的或导入一个现有文件。

Select Resource Type

将 HTML 添加到您的项目中后,您就可以通过您的程序访问它了。

GetHTML() 函数

static bool GetHTML(const int& idrHTML, CString& rString)
{
   bool retVal = false;
   try
   {      
      HRSRC hSrc = FindResource(NULL, MAKEINTRESOURCE(idrHTML), RT_HTML);
      if (hSrc != NULL)
      {
         HGLOBAL hHeader = LoadResource(NULL, hSrc);
         if (hHeader != NULL)
         {
            LPCTSTR lpcHtml = static_cast<LPCTSTR>(LockResource(hHeader));
            if (lpcHtml != NULL)
            {
               rString = CString(lpcHtml);
               retVal = true;
            }
            UnlockResource(hHeader);
         }
         FreeResource(hHeader);
      }
   }
   catch (CMemoryException* e)
   {
      SetLastError(ERROR_FUNCTION_FAILED);
      e->ReportError();
      e->Delete();
      retVal = false;
   }
   catch (CResourceException* e)
   {
      SetLastError(ERROR_FUNCTION_FAILED);
      e->ReportError();
      e->Delete();
      retVal = false;
   }
   catch (CException* e)
   {
      SetLastError(ERROR_FUNCTION_FAILED);
      e->ReportError();
      e->Delete();
      retVal = false;
   }
   catch (...)
   {
      SetLastError(ERROR_FUNCTION_FAILED);
      retVal = false;
   }
   return retVal;
}

好吧,这就是全部内容。

结论

我知道,所有这些对许多经验丰富的开发人员来说可能都显得理所当然,但有时显而易见的事情却并不那么明显。希望这个小片段能帮助您完成项目。

历史

  • 2005年7月10日

    初始发布。

© . All rights reserved.