0

If I use WPF syntax:

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

Or if I add a WindowsFormsHost:

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

And in the CS file:

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");
    }
}

Either way, the ExecWB method is not exposed. So I can't port this code over from my MFC C++ CHtmlView derived class:

ExecWB(OLECMDID_PAGESETUP, OLECMDEXECOPT_DONTPROMPTUSER, NULL, NULL);

Am I missing something? At this point in time I can't implement my print preview / page setup / zoom functionality because I can't use ExecWB.

I have tried deriving my own class from the Winforms browser but it is still not listed.

Thank you.

I don't understand why in this question:

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

It refers to ShowPrintDialog but even that is not listed.

Partial success! I don't know why, but now, when I use the hosted Winforms version, I can atleast see some of the methods:

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();
    }
}

But ExecWb is still missing for managing things like zooming. I found this:

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

One of the answers:

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

But even if I add a reference to the mshtml library the compiler will not let me convert from HtmlDocument to IHtmlDocument2. Eventually I got this:

Clearing the selection in a webbrowser control

So now I know how to select all and copy to clipboard again (as long as I use the Winforms edition). However, having looked here:

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

There seems to be no match for Optical Zoom:

ExecWB(OLECMDID_OPTICAL_ZOOM, OLECMDEXECOPT_DONTPROMPTUSER, &vZoom, NULL);
Andrew Truckle
  • 17,769
  • 16
  • 66
  • 164

1 Answers1

0

The basic answer for calling ExecWb is to do this:

  1. Use the WinForms WebBrowser control

  2. Then something like htmlView.Document.ExecCommand

Pass in commands like:

SelectAll
Copy

for clipboard items.

There are native methods for displaying the print dialogues etc..

Only thing that does not seem to be supported is:

ExecWB(OLECMDID_OPTICAL_ZOOM, OLECMDEXECOPT_DONTPROMPTUSER, &vZoom, NULL);
Andrew Truckle
  • 17,769
  • 16
  • 66
  • 164