ExecWB在哪里?

时间:2016-06-17 12:41:46

标签: wpf webbrowser-control

如果我使用WPF语法:

<WebBrowser Grid.Row="1" Grid.Column="1" x:Name="htmlView"></WebBrowser>

或者,如果我添加一个WindowsFormsHost:

<WindowsFormsHost x:Name="formsHost" Grid.Row="1" Grid.Column="1">
</WindowsFormsHost>

在CS文件中:

public partial class MainWindow : Window
{
    System.Windows.Forms.WebBrowser htmlView= new System.Windows.Forms.WebBrowser();

    public MainWindow()
    {
        InitializeComponent();

        formsHost.Child = htmlView;
        htmlView.Navigate("d:\\test.xml");
    }

    private void menuFilePageSetup_Click(object sender, RoutedEventArgs e)
    {
        MessageBox.Show("Do do");
    }
}

无论哪种方式,都不会公开 ExecWB 方法。所以我无法从我的MFC C ++ CHtmlView派生类中删除此代码:

ExecWB(OLECMDID_PAGESETUP, OLECMDEXECOPT_DONTPROMPTUSER, NULL, NULL);

我错过了什么吗?此时我无法实现打印预览/页面设置/缩放功能,因为我无法使用 ExecWB

我尝试从Winforms浏览器派生我自己的类,但它仍未列出。

谢谢。

我不明白为什么在这个问题上:

How do I programatically change printer settings with the WebBrowser control?

它指的是ShowPrintDialog,但即便没有列出。

部分成功!我不知道为什么,但现在,当我使用托管的Winforms版本时,我至少可以看到一些方法:

public partial class MainWindow : Window
{
    System.Windows.Forms.WebBrowser htmlView= new System.Windows.Forms.WebBrowser();

    public MainWindow()
    {
        InitializeComponent();

        formsHost.Child = htmlView;
        htmlView.Navigate("d:\\test.xml");
    }

    private void menuFilePageSetup_Click(object sender, RoutedEventArgs e)
    {
        htmlView.ShowPageSetupDialog();
    }

    private void MenuItem_Click(object sender, RoutedEventArgs e)
    {
        htmlView.ShowPrintPreviewDialog();
    }
}

但是,管理像缩放这样的东西仍然缺少ExecWb。我发现了这个:

How do I print from the wpf WebBrowser available in .net 3.5 SP1?

其中一个答案:

mshtml.IHTMLDocument2 doc = webBrowser.Document as mshtml.IHTMLDocument2;
doc.execCommand("Print", true, null);

但即使我添加对mshtml库的引用,编译器也不会让我从HtmlDocument转换为IHtmlDocument2。最终我得到了这个:

Clearing the selection in a webbrowser control

所以现在我知道如何选择所有并再次复制到剪贴板(只要我使用winforms版本)。但是,看了这里:

https://msdn.microsoft.com/en-us/library/ms533049(v=vs.85).aspx

光学变焦似乎没有匹配:

ExecWB(OLECMDID_OPTICAL_ZOOM, OLECMDEXECOPT_DONTPROMPTUSER, &vZoom, NULL);

1 个答案:

答案 0 :(得分:0)

调用ExecWb的基本答案是:

  1. 使用WinForms WebBrowser控件

  2. 然后像htmlView.Document.ExecCommand

  3. 传递如下命令:

    SelectAll
    Copy
    

    表示剪贴板项目。

    有显示打印对话等的原生方法。

    只认为似乎不支持:

    ExecWB(OLECMDID_OPTICAL_ZOOM, OLECMDEXECOPT_DONTPROMPTUSER, &vZoom, NULL);