如果我使用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);
答案 0 :(得分:0)
调用ExecWb
的基本答案是:
使用WinForms WebBrowser控件
然后像htmlView.Document.ExecCommand
传递如下命令:
SelectAll
Copy
表示剪贴板项目。
有显示打印对话等的原生方法。
只认为似乎不支持:
ExecWB(OLECMDID_OPTICAL_ZOOM, OLECMDEXECOPT_DONTPROMPTUSER, &vZoom, NULL);