2015-09-01 45 views
0

我需要在Windows应用程序容器中嵌入标准webapp。这个容器只需要是一个webkit或类似的渲染引擎的包装(如果可能的话,我想避免使用IE渲染引擎),它会包含一些最小的窗口管理逻辑 - 例如没有标题栏的无边框,能够固定位置和大小,以及基于当前聚焦的窗口定制叠加/始终在顶规则。如何将web应用程序嵌入到具有自定义行为的Windows应用程序中

我一直在看node-webkit,它似乎符合含有webapp的法案,但我不确定我能做到后者。

这可以用node-webkit完成吗,还有其他一些方法能更好地适合我的用例吗?我完全不知道Windows应用程序开发是如何完成的,所以我希望得到一些帮助。

+0

看一看的[web浏览器]( https://msdn.microsoft.com/en-us/library/aa752040.aspx)控制。由于您使用了[tag:c#]标记,因此以下链接指向[Visual Basic参考](https://msdn.microsoft.com/zh-cn/library/aa752043.aspx)。 – IInspectable

回答

2

如果您正在使用WPF,您可以创建你像这样的东西(XAML)窗口:

<Window x:Class="WpfApplication2.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     WindowStyle="None" 
     Title="MainWindow" Left="100" Top="200" Height="350" Width="525" PreviewKeyDown="Window_PreviewKeyDown"> 
    <Grid x:Name="grdBrowserHost"> 
    </Grid> 
</Window> 

WindowStyle ATTR None意味着窗口 “没有标题栏无国界”。 LeftTop用于定位,并且WidthHeight是不言自明的。所有这些属性都可以通过简单的this.Width等代码隐藏来访问...... PreviewKeyDown我把这里放在这里,因为在这个例子中(正如你将会看到的),Topmost属性将从后面的代码(动态地)改变。

代码隐藏应该看起来像 使用系统;

using System.Windows; 
using System.Windows.Input; 

namespace WpfApplication2 
{ 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 

      System.Windows.Controls.WebBrowser browser = new System.Windows.Controls.WebBrowser(); 
      // you can put any other uri here, or better make browser field and navigate to desired uri on some event 
      browser.Navigate(new Uri("http://www.blic.rs/")); 
      grdBrowserHost.Children.Add(browser); 
     } 

     private void Window_PreviewKeyDown(object sender, KeyEventArgs e) 
     { 
      if (e.Key == Key.Escape) 
      { 
       this.Close(); 
      } 
      else 
      { 
       this.Topmost = !this.Topmost; 
      } 
     } 
    } 
} 

在这个例子中我已经创建默认WebBrowser控制用于显示HTML。如果你想要一些其他的网页渲染引擎,你必须找到第三方控件并将其包含在你的参考文献中。对于webkit,您可以检查How to use WebKit browser control in WPF

+0

嘿,谢谢,这看起来完全像我需要的!还有一件事我不是很清楚 - 我怎样才能挂钩系统窗口管理事件(例如,窗口失去焦点),并且我可以查询窗口管理器以给我当前聚焦的窗口? – moljac024

+0

关闭窗口eq的事件this.Deactivated + =(sender,e)=> {...} 对于当前关注的窗口,您可以使用WINAPI函数,如http://stackoverflow.com/questions/115868/how- DO-I-得到最冠军的最当前活跃的窗口,使用-C – Igor

相关问题