2017-03-21 58 views
0

在我的Windows窗体应用程序(WinForms)中,我使用CEFSharp来打开网页。我想修改右键单击上下文以允许用户显示已打开的URL。目前,上下文有“返回”,“转发”,“打印...”和“查看源文件”可以使用CEFSharp将URI显示给用户吗?

+1

可以使用http://cefsharp.github.io/api/55.0.0/html/T_CefSharp_IContextMenuHandler.htm – amaitland

+0

CEF已经调试支持自定义快捷菜单!这个答案给了我足够的我需要的 http://stackoverflow.com/a/31577099/139689 – MADCookie

回答

1

@amaitland的评论让小球滚动。这是我的实现。我希望这可以帮助别人。

初始化WinForms.ChromiumWebBrowser的实例时,将其属性MenuHandler设置为IContextMenuHandler的实例。

chromeBrowser = New WinForms.ChromiumWebBrowser(uri) 
    chromeBrowser.MenuHandler = New Classes.CefBasicMenuHandler() 
    Controls.Add(chromeBrowser) 

您的IContextMenuHandler实现是您可以控制上下文菜单的地方。

Public Class CefBasicMenuHandler 
Implements IContextMenuHandler 

private const ShowDevTools as Integer = 26501 
private const CloseDevTools as Integer = 26502 
Private Const CopyUrlAddress as Integer = 26503 

Public Sub OnBeforeContextMenu(browserControl As IWebBrowser, browser As IBrowser, frame As IFrame, parameters As IContextMenuParams, model As IMenuModel) Implements IContextMenuHandler.OnBeforeContextMenu 
    '//To disable the menu then call clear 
    model.Clear() 

    '//Add new custom menu items 
    model.AddItem(CType(CopyUrlAddress, CefMenuCommand), "Copy URL address") 
    model.AddSeparator() 
    model.AddItem(CType(ShowDevTools, CefMenuCommand), "Show DevTools") 
    model.AddItem(CType(CloseDevTools, CefMenuCommand), "Close DevTools") 
    model.AddSeparator() 
    model.AddItem(CefMenuCommand.Reload, "Reload") 
    model.AddItem(CefMenuCommand.Copy, "Copy") 
End Sub 

Public Function OnContextMenuCommand(browserControl As IWebBrowser, browser As IBrowser, frame As IFrame, parameters As IContextMenuParams, commandId As CefMenuCommand, eventFlags As CefEventFlags) As Boolean Implements IContextMenuHandler.OnContextMenuCommand 
    Dim commandId1 As Integer = CType(commandId, Integer) 

    If commandId1 = ShowDevTools Then 
     browser.ShowDevTools() 
    End If 
    If commandId1 = CloseDevTools Then 
     browser.CloseDevTools() 
    End If 
    If commandId1 = CopyUrlAddress Then 
     Clipboard.SetText(parameters.PageUrl) 
    End If 

    Return False 
End Function 

Public Sub OnContextMenuDismissed(browserControl As IWebBrowser, browser As IBrowser, frame As IFrame) Implements IContextMenuHandler.OnContextMenuDismissed 
End Sub 

Public Function RunContextMenu(browserControl As IWebBrowser, browser As IBrowser, frame As IFrame, parameters As IContextMenuParams, model As IMenuModel, callback As IRunContextMenuCallback) As Boolean Implements IContextMenuHandler.RunContextMenu 
    Return False 
End Function 
End Class 
相关问题