代码之家  ›  专栏  ›  技术社区  ›  djeidot

通过HTML访问程序资源时如何获取可执行文件名?

  •  1
  • djeidot  · 技术社区  · 14 年前

    我在我的MFC程序中有一个HTMLVIEW,我在其中以HTML格式显示一些数据。HTML利用了可执行文件中包含的一些资源,因此,通常,我的HTML文件包括以下内容:

    <script language="javascript" type="text/javascript" src="res://MyProgram.exe/JS/IDR_JQUERY"></script>
    

    <img src="res://MyProgram.exe/JPG/PROGRAMLOGO"/>
    

    问题是,如果用户将程序名从myprogram.exe更改为其他名称,则HTML将不再正常工作。

    我正在使用 CHtmlView::LoadFromResource 加载HTML文件。我已经能够在运行时使用以下函数更改body部分的HTML:

    BOOL DHtmlView::PutBodyContent(LPSTR lpstrContent)
    {
     //check if HtmlDocument initialized
     if( m_pHtmlDoc2)
     {
      HRESULT hr = S_OK;
      IHTMLElement *pBodyElement;
      //get body element
      hr=m_pHtmlDoc2->get_body( &pBodyElement);
      //put content to body element
      _bstr_t pbBody( lpstrContent);
      hr=pBodyElement->put_innerHTML( pbBody);
    
      if( hr==S_FALSE) return FALSE;
      else return TRUE;
     }
     else return FALSE;
    }
    

    但我似乎找不到一种方法来做同样的头部部分。

    你有什么提示吗?

    2 回复  |  直到 14 年前
        1
  •  1
  •   Moo-Juice    14 年前

    使用API调用获取可执行文件的名称 ::GetModuleFileName() 把这条路拆掉。

    使用某种转义序列(如“$(文件名)”)引用HTML中的可执行文件名:

    <img src="res://$(FileName)/JPG/PROGRAMLOGO"/>
    

    在设置HTML文档的内容之前,用getModuleFileName()API调用的结果替换所有出现的转义序列。

        2
  •  0
  •   djeidot    14 年前

    一段时间之后 IHTMLElement 我找到了一个更简单的方法。因为我的HTML文件本身就在程序资源中,所以我发现我可以做相对引用。所以我的例子是:

    <script language="javascript" type="text/javascript" src="../JS/IDR_JQUERY"></script>
    
    <img src="../JPG/PROGRAMLOGO"/>