我自己做了一个浏览器,用的是单文档的工程,视图类是用CHtmlView,现在想实现类似Internet Explorer浏览器文件菜单里的打开,保存,另存为,打印,打印设置等功能,该如何实现呢???谁有搞过,请帮帮忙。非常感谢。

解决方案 »

  1.   

    typedef enum  
    {
         OLECMDID_OPEN               =  1, 
         OLECMDID_NEW                =  2, 
         OLECMDID_SAVE               =  3, 
         OLECMDID_SAVEAS             =  4, 
         OLECMDID_SAVECOPYAS         =  5, 
         OLECMDID_PRINT              =  6, 
         OLECMDID_PRINTPREVIEW       =  7, 
         OLECMDID_PAGESETUP          =  8, 
         OLECMDID_SPELL              =  9, 
         OLECMDID_PROPERTIES         = 10, 
         OLECMDID_CUT                = 11, 
         OLECMDID_COPY               = 12, 
         OLECMDID_PASTE              = 13, 
         OLECMDID_PASTESPECIAL       = 14, 
         OLECMDID_UNDO               = 15, 
         OLECMDID_REDO               = 16, 
         OLECMDID_SELECTALL          = 17, 
         OLECMDID_CLEARSELECTION     = 18, 
         OLECMDID_ZOOM               = 19, 
         OLECMDID_GETZOOMRANGE       = 20  
         OLECMDID_UPDATECOMMANDS     = 21  
         OLECMDID_REFRESH            = 22  
         OLECMDID_STOP               = 23  
         OLECMDID_HIDETOOLBARS       = 24  
         OLECMDID_SETPROGRESSMAX     = 25  
         OLECMDID_SETPROGRESSPOS     = 26  
         OLECMDID_SETPROGRESSTEXT    = 27  
         OLECMDID_SETTITLE           = 28  
         OLECMDID_SETDOWNLOADSTATE   = 29  
         OLECMDID_STOPDOWNLOAD       = 30  
         OLECMDID_ONTOOLBARACTIVATED = 31,
         OLECMDID_FIND               = 32,
         OLECMDID_DELETE             = 33,
         OLECMDID_HTTPEQUIV          = 34,
         OLECMDID_HTTPEQUIV_DONE     = 35,
         OLECMDID_ENABLE_INTERACTION = 36,
         OLECMDID_ONUNLOAD           = 37
    } OLECMDID; 
      

  2.   

    很容易,给你我的几个例子代码就知道怎么办了
    ===
    void CRightViewBase::OnFilePrintPreview()
    {
    // TODO: 在此添加命令处理程序代码
    // ExecWB(OLECMDID_SHOWPAGESETUP, OLECMDEXECOPT_PROMPTUSER, NULL, NULL);
    ExecWB(OLECMDID_PRINTPREVIEW, OLECMDEXECOPT_PROMPTUSER, NULL, NULL);
    }void CRightViewBase::OnFilePrint()
    {
    // TODO: 在此添加命令处理程序代码
    IHTMLDocument2 * pIHtml;
    LPDISPATCH  lpDisp = GetHtmlDocument();
    if (lpDisp == NULL || FAILED(lpDisp->QueryInterface(IID_IHTMLDocument2, (void **)&pIHtml)))
    return;
    try
    {
    VARIANT_BOOL vbRet;
    VARIANT v;
    v.vt = VT_NULL;
    pIHtml->execCommand(SysAllocString(L"Print"), VARIANT_TRUE, v, &vbRet);
    }
    catch(COleException * e)
    {
    e->ReportError();
    e->Delete();
    }
    }
    void CRightViewBase::SaveDocument()
    {
    /*
    要保存HTML文档,通过使用ExecWB是不行的,原因可能是由于我们所操作的HTML文档是
    由about:blank 创建的。因此,要打印文档,只有调用IHTMLDocument2的接口execCommand
    来实现。
    */
    IHTMLDocument2 * pIHtml;
    LPDISPATCH  lpDisp = GetHtmlDocument();
    if (lpDisp == NULL || FAILED(lpDisp->QueryInterface(IID_IHTMLDocument2, (void **)&pIHtml)))
    return;
    try
    {
    VARIANT_BOOL vbRet;
    VARIANT v;
    v.vt = VT_BSTR;
    v.bstrVal = SysAllocString(L"机房使用情况报表");
    pIHtml->execCommand(SysAllocString(L"SaveAs"), VARIANT_TRUE, v, &vbRet);
    }
    catch(COleException * e)
    {
    e->ReportError();
    e->Delete();
    }
    pIHtml->Release();
    }
      

  3.   

    那么打开操作呢????????????
    我查了msdn,那里说IDM_OPEN ,Not currently supported. 
    这个该如何处理???
      

  4.   

    哦?没试过。
    不过打开简单阿!可以自己做个对话框,再Navigate2
      

  5.   

    看msdn:
    IDocHostUIHandler::ShowContextMenu
      

  6.   

    我是看到例子了,但是我不知道在哪里添加阿,我用的是CHtmlView的,该在哪里添加呢??
    麻烦在说说好吗?????????????????????
      

  7.   

    将"另存为"菜单打算不加在文件菜单中的,我想加在右键菜单中,该如何加进去呢????
    我用的是CHtmlView,谁知道的?可以说说吗????????
      

  8.   

    将"另存为"菜单打算不加在文件菜单中的,我想加在右键菜单中,该如何加进去呢????
    我用的是CHtmlView,谁知道的?可以说说吗????????
    谁知道??????请指教急用。。
      

  9.   

    第一种方法,完全不使用htmlview(事实上是webbrowser控件)的右键菜单,这时你怎么添加都可以第二种方法,像flashget之类的软件一样,把你的菜单项注册到IE的右键菜单上.
      

  10.   

    我不可能不用chtmlview,因为我很多东西已经写完了,就差一个修改这个htmlview视图里面的右键菜单,我就是想修改它,增加一些进去,而保存ie菜单里面原来的菜单项。具体说说可以吗?????????????麻烦你了,靓子。
      

  11.   

    我是说不使用htmlview的右键菜单,不是说不用htmlview.你只想在htmlview加一项菜单还是想在只要是IE控件的地方就有你那项菜单??
      

  12.   

    我只想在htmlview加一项我自己的菜单,并且包括原来的ie菜单在内的全部菜单内容。
    请具体指教一下谢谢
      

  13.   

    http://expert.csdn.net/Expert/topic/2978/2978037.xml
      

  14.   

    我得到这个htmlview视图里面的右键菜单的接口,然后修改增加我自己的菜单进去。
      

  15.   

    我想这不太可能.我现在知道的方法就是屏蔽原来的IE的菜单,然后弹出自己的菜单.事实上想做出一个像IE原来的菜单应该不是很麻烦,像前进后退打印刷新等都可以会
    ExecWB来转发.
    http://www.csdn.net/develop/article/18/18541.shtm