我要做一个电子书生成软件 
但搞不清楚里面的文件是怎么存储的 我现在是一个个网页文件当作资源文件写进EXE  访问到哪个文件再写出来打开这样不好  htm里面的相对链接用不了 htm里面用到的图片也显示不了  要全部文件写出来才行 我也考虑整个文件夹压缩后写进exe  访问前先全部解压  但效率太低 人家打开电子书还要等半天我见人家不是这么做的 
像ada99 eBook workshop  显示001.htm网页的URL地址是  ada99:001.htm 复制到浏览器可以打不开面chm的电子书却是  mk:@MSITStore:D:\福艳天下.chm::/chm/000001/List.htm 复制到浏览器可以打得开
 文件名后面::/chm/000001/List.htm 是原来文件的相对路径 到底它们是怎么存储的呢非常感谢!!!!
本想给多点分 但好像最高100

解决方案 »

  1.   

    网页文件当作资源文件写进EXE是可以的,相对链接和图片都是可以用的,只是要按一定的规则。比如图片都是在images目录里面,那么你把图片加进资源的时候必须自定义一个类型“images”,JS文件都在js目录,那么把JS文件加进资源的时候就自定义一个类型“JS”,不过多级目录好象不支持。
      

  2.   

    谢写进去是可以  关键是怎么读  网页文件它根据图片路径找到图片显出来 如果要写出硬盘先的话 我又不知这个网页具体包含哪些图片  像ada99:001.htm 这种形式好像又不是写出硬盘  不知怎么弄的
      

  3.   

    你自己的连接打不开肯定是因为连接路径有问题,可以自己弄个html的模板,
      

  4.   

    不是  是因为文件没有全部释放(软件启动时就全部释放的话太花时间) 我现在是点到一个文件就释放一个的
    如果htm内部的链接是链向还没释放出来的文件 那就打不开了
      

  5.   

    晕,HTML文件作为资源写进EXE不需要释放啊,你在IE输入网址就能访问,比如你的程序放在c:\book.exe,里面有个资源index.htm,那么IE里输入res://c:\book.exe/index.htm就能访问。
      

  6.   

    谢谢ringphone
    res://c:\book.exe/index.htm  还有这样读法的呀 可是加入资源的时候没有文件名呀 访问不了  
    修改exe的时候是写入字节集的 是要找到那段字节集写出文件才能访问
     我不是用VC做的 是用易语言
      

  7.   

    请问qiandayong 你认为应该怎么操作好呢
      

  8.   

    ada99 eBook workshop用了HtmlView控件,chm是一个类似复合文件的结构,只知道这么多了.给几个链接供你参考:
    调用HHA_CompileHHP编译chm工程:http://www.vckbase.com/document/viewdoc/?id=1751
    Microsoft's ITOL/ITLS format:http://hi.baidu.com/wobash/blog/item/16e95b0e0934a9ed37d122de.html
    Microsoft's HTML Help (.chm) format:http://hi.baidu.com/wobash/blog/item/7c2d18ed4cbefe4579f055d8.html
      

  9.   


    感谢  
    HtmlView控件只是用来显示网页的吧 我只想知道它的文件怎么读取
    我要做的是exe的电子书 chm暂时不关心
      

  10.   

    下面是在e书工场的介绍看到的 
      
    《e书工场》(英文名:eBook Workshop)是将 HTML 页面文件、图片、Flash等捆绑成 EXE 电子文档的制作软件。本软件可以说是吸收了目前其他同类软件的优点,采用文件流技术,所有文件都在内存中释放和读取,不产生垃圾文件; 
      
    请问文件流是什么东东 
    所有文件都在内存中释放和读取是如何实现的 
    我就是想实现这个 
    WebBrowser控件怎么读取内存呢
      

  11.   

    WebBrowser控件读取内存:
    1、首先通过 IWebBrowser2::Navigate2() 显示一个网页,其目的是产生有效的对象,从而得到 IHTMLDocument2 接口;
    2、IWebBrowser2::get_Document() 得到 IHTMLDocument2 接口指针;
    3、IHTMLDocument2::QueryInterface() 得到 IPersistStreamInit 接口指针;
    4、IPersistStreamInit::InitNew() 初始化接口对象;
    5、IPersistStreamInit::Load() 装载内存中的 HTML 数据流(IStream *);
    内存指针转换为流的方法是:
    I、   GlobalAlloc() 申请内存;
    II、  复制 HTML 字符串内容到上述的内存中;
    III、 CreateStreamFromHGlobal() 转换内存为 IStream 指针;
    原理性代码如下:
    // 显示一个空白网页
    m_ie.Navigate2( &CComVariant(_T("about:blank")),NULL,NULL,NULL,NULL);
    // 得到 IHTMLDocument2 指针
    CComPtr< IDispatch > spDoc(m_ie.GetDocument());
    // 得到 IPersistStreamInit 指针
    CComQIPtr< IPersistStreamInit, &IID_IPersistStreamInit > spPSI( spDoc );
    // 申请内存,复制 HTML 字符串
    LPTSTR lpMem = (LPTSTR)::GlobalAlloc( GPTR, ::lstrlen( lpHtml )+1 );
    lstrcpy( lpMem, "xxx xxx" );
    // 转换内存为流对象指针
    CComPtr< IStream > spStream;
    CreateStreamOnHGlobal( lpMem, TRUE, &spStream );
    // 初始化后,装载显示
    spPSI->InitNew();
    spPSI->Load( spStream );详细内容请见:http://www.vckbase.com/document/viewdoc/?id=1472
      

  12.   

    非常感谢ringphone(临风) 兄弟 提供了这个例子 赶紧研究一下先