加载html资源调用
LoadFromResource(资源ID);
发现原来Html资源加载的根目录是当前程序执行的根目录。对于Html页面,如何可以方便的设置一个Html资源加载根目录的位置?
LoadFromResource(资源ID);
发现原来Html资源加载的根目录是当前程序执行的根目录。对于Html页面,如何可以方便的设置一个Html资源加载根目录的位置?
解决方案 »
- SYSTEMTIME转换成UNIX时间戳
- CHTMLView 或其它的方式可以让超链接打开的是一个Dialog(VC)吗?
- 多线程问题,多天研究无果
- 用VC调用本地的页面时,如何向页面传入参数
- 在VC++用ADO方式如何共享访问放在局域网FTP服务器上的ACCESS库(散分)
- 如何高效的将界面上的数据写到一个定义好的结构里去?
- 使用nmake的路径设置问题
- 菜鸟问一个问题,请高手帮助
- 帮我解释一下!
- 如何在 MFC ActiveX 里使用定时器?急!!!
- 要在vc6下面开发gdi+的程序,需要安装哪个开发包啊?
- 要用atl写个控件,涉及到界面的,怎么将wtl和atl结合起来用呐?用wtl来做控件的界面
======================================
在CDHtmlDialog类使用中,总是会遇到HTML不能正确解析资源的问题。我的经验如下:1。使用绝对路径在资源里引入HTML网页和图片资源:
使用RES://应用程序名称/资源类型/#资源号,
例如:如果你的应用程序名为c.exe,html网页或资源保存在HTML类型下。并且查看资源标示号为133,便可以这样引用:res://c.exe/html/#133。或这样引用:res
://c:/c.exe/html/#1332。使用相对路径引用:
如果使用方法1,总得去寻找应用程序名称,如果引入的是html中的图片,有诸多不便,譬如:应用程序如果改变了名称,那调用便会无效。为了防止这些纠葛,有一个非常好的办法就是:把所有使用的资源(图片,CSS,JS等),统统放到HTML资源类型下,引用的时候写成 res://#资源号就可以了。譬如上例便可以这样引用:res:/#133。当然好像res:/ 和res:// 是通用的。3。FLASH控件的支持:
我没有在资源里引用flash成功,看了看flash的官方文档,好像必须为绝对路径才可以。例如movie=“d:\\flash\\test.swf”是可以成功的。4。不在资源里引用HTML,直接在本地文件里使用。可以在CDHtmlDialog的继承类里添加一个函数来处理。
void CDHtmlViewSpec::GotoUrl(LPCTSTR pszUrl)
...{
CString strPath,str;
DWORD dwSize=MAX_PATH;
::GetModuleFileName(NULL,strPath.GetBuffer(MAX_PATH),dwSize); //AfxGetResourceHandle()
strPath.ReleaseBuffer(dwSize);
str=strPath.Left(strPath.ReverseFind('\\')+1);
ASSERT(pszUrl!=NULL);
if(pszUrl!=NULL)
...{
CString strUrl;
strUrl=str+pszUrl;
Navigate(_T("file:///")+strUrl);
}
}
本函数为了方便没有对路径进行更多处理,在使用的时候,可以以exe文件所在的目录为当前目录,以相对路径表示pszUrl。调用方法:
gotoUrl("html\\test.html")
gotoUrl("..\\html2\test.htm")
这样载入HTML网页,网页内的资源定位都是相对路径定义即可。图片和flash都可以正常载入。
不过这样的话,就有个问题,用户可以随时修改你的html文件。如果你有消息处理的话,很容易就使你的程序崩溃。
我一般的做法就是修改html的扩展名,迫使一般用户不轻易修改它,譬如改称.dat。