我运行环境是VC6.0,现在WebBrowser控件打开网页时候,我想禁止在打开的网页上的右键操作。
  希望得到指点  谢谢!~

解决方案 »

  1.   

    网上搜索点资料
    方法是获取IDocHostUIHandler接口,然后调用ShowContextMenu函数但是具体如何操作还不清楚。我对这方面近乎文盲
      

  2.   

    MSDN上也有IDocHostUIHandler::ShowContextMenu的貌似。不记得了通过实现这一个方法, 你获得在当一个用户右击时被浏览器控件显示的快捷菜单的控制。你能通过在这个方法中返回S_OK 阻止IE显示它的默认快捷菜单。返回一些其他的数值 , 像S_FALSE或E_NOTIMPL,允许IE继续执行它的默认快捷菜单行为。如果你仅仅在这个方法中返回S_OK, 你能避免任何浏览器控件的右击行为。 这可能是你在许多场合中的全部需求,但是你能做到更多。通常,你使用这一个方法在返回 S_OK 之前产生并且显示你自己的快捷菜单。如果你知道浏览器控件显示的菜单的资源,而且它如何选择他们,你能也有效地自定义默认的浏览器控件快捷菜单。让我们看看它如何工作。浏览器控件由Shdoclc.dll获得它的快捷菜单资源。这个知识和一些 #define给予你一个机会操纵浏览器的菜单。让我们举例来说,假定你对默认菜单感到满意,除了你想要除去查看源代码项之外。下列代码载入来自Shdoclc.dll的浏览器控件快捷菜单资源,根据环境选择正确的菜单,移除IDM_VIEWSOURCE命令对应的菜单项,然后显示菜单。例子HRESULT CBrowserHost::ShowContextMenu(DWORD dwID,    POINT *ppt,    IUnknown *pcmdTarget,    IDispatch *pdispObject) {    #define IDR_BROWSE_CONTEXT_MENU 24641    #define IDR_FORM_CONTEXT_MENU 24640    #define SHDVID_GETMIMECSETMENU 27    #define SHDVID_ADDMENUEXTENSIONS 53    HRESULT hr;    HINSTANCE hinstSHDOCLC;    HWND hwnd;    HMENU hMenu;    CComPtr<IOleCommandTarget> spCT;    CComPtr<IOleWindow> spWnd;    MENUITEMINFO mii={0};    CComVariant var, var1, var2;    hr = pcmdTarget->QueryInterface(IID_IOleCommandTarget, (void**)&spCT);    hr = pcmdTarget->QueryInterface(IID_IOleWindow, (void**)&spWnd);    hr = spWnd->GetWindow(&hwnd);    hinstSHDOCLC = LoadLibrary(TEXT("SHDOCLC.DLL"));     if (hinstSHDOCLC == NULL)    {        // 载入模块错误 -- 尽可能安全地失败        return;    }    hMenu=LoadMenu(hinstSHDOCLC,        MAKEINTRESOURCE(IDR_BROWSE_CONTEXT_MENU));    hMenu=GetSubMenu(hMenu,dwID);    //获得语言子菜单    hr = spCT->Exec(&CGID_ShellDocView, SHDVID_GETMIMECSETMENU, 0, NULL, &var);    mii.cbSize = sizeof(mii);    mii.fMask = MIIM_SUBMENU;    mii.hSubMenu = (HMENU) var.byref;    //加入语言子菜单到编码上下文菜单    SetMenuItemInfo(hMenu, IDM_LANGUAGE, FALSE, &mii);    //插入来自注册表的快捷菜单扩展    V_VT(&var1) = VT_INT_PTR;    V_BYREF(&var1) = hMenu;    V_VT(&var2) = VT_I4;    V_I4(&var2) = dwID;    hr = spCT->Exec(&CGID_ShellDocView, SHDVID_ADDMENUEXTENSIONS, 0, &var1, &var2);    //删除查看源代码    DeleteMenu(hMenu, IDM_VIEWSOURCE, MF_BYCOMMAND);    //显示快捷菜单    int iSelection = ::TrackPopupMenu(hMenu,        TPM_LEFTALIGN | TPM_RIGHTBUTTON | TPM_RETURNCMD,        ppt->x,        ppt->y,        0,        hwnd,        (RECT*)NULL);    //发送选定的快捷菜单项目指令到外壳    LRESULT lr = ::SendMessage(hwnd, WM_COMMAND, iSelection, NULL);    FreeLibrary(hinstSHDOCLC);    return S_OK;}安全警告:不正确地使用LoadLibrary能载入错误的动态链接库(DLL)来威胁你的应用程序的安全。关于该如何正确地用微软Windows 的不同版本载入DLL的信息,参照LoadLibrary的文档。这个资料你看过没?
      

  3.   

    已经解决了 
    是ShowContextMenu函数返回s_OK即可
    谢谢了