我的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文件。我已经能够使用此函数在运行时更改主体部分的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;
}
但我似乎找不到与头部相同的方法。
你有任何提示吗?
答案 0 :(得分:1)
使用API调用::GetModuleFileName()
获取可执行文件的名称并删除路径。
使用某种转义序列(如“$(FileName)”)引用HTML中可执行文件的名称:
<img src="res://$(FileName)/JPG/PROGRAMLOGO"/>
在设置HTML文档的内容之前,将所有转义序列的出现替换为GetModuleFileName()API调用的结果。
答案 1 :(得分:0)
经过一段时间干预IHTMLElement
后,我找到了一种更简单的方法。由于我的HTML文件本身就在程序资源中,我发现我可以做相对引用。所以我的例子转向:
<script language="javascript" type="text/javascript" src="../JS/IDR_JQUERY"></script>
<img src="../JPG/PROGRAMLOGO"/>