gpt4 book ai didi

c++ - WinRT W8 C++创建WebView并添加到主视图

转载 作者:太空宇宙 更新时间:2023-11-04 13:59:30 24 4
gpt4 key购买 nike

我目前正在尝试在 WinRT 应用程序(不使用 C#)中显示 Web View 。首先,这可能吗?

我目前正在尝试这样做:

Windows::UI::Xaml::Controls::WebView^ webView = ref new Windows::UI::Xaml::Controls::WebView();
webView->NavigateToString("http://www.google.com");

但是因为我希望这段代码在主线程中运行(我认为,创建一个 UI 元素是强制性的)我是这样运行的:

Windows::ApplicationModel::Core::CoreApplication::MainView->CoreWindow->GetForCurrentThread()->Dispatcher->RunAsync(Windows::UI::Core::CoreDispatcherPriority::Normal, ref new Windows::UI::Core::DispatchedHandler(
[]
{
Windows::UI::Xaml::Controls::WebView^ webView = ref new Windows::UI::Xaml::Controls::WebView();
webView->NavigateToString("http://www.google.com");
}
));

不好的一点是这一行:

webView->NavigateToString("http://www.google.com");

从未达到。在输出控制台中,我在该行引发了三个异常(在逐步调试时):

Windows::UI::Xaml::Controls::WebView^ webView = ref new Windows::UI::Xaml::Controls::WebView();

引发的异常如下:

First-chance exception at 0x763B4B32 in Direct3DApp1.exe: Microsoft C++ exception: Platform::WrongThreadException ^ at memory location 0x0320EFE4. HRESULT:0x8001010E
First-chance exception at 0x763B4B32 in Direct3DApp1.exe: Microsoft C++ exception: Platform::WrongThreadException ^ at memory location 0x0320EFE4. HRESULT:0x8001010E
First-chance exception at 0x763B4B32 (KernelBase.dll) in Direct3DApp1.exe: 0x40080201: WinRT originate error (parameters: 0x8001010E, 0x00000051, 0x0320E494).

如果您知道如何在 Windows 8(而非 Windows Phone 8)上创建 Web View 并将其显示在纯 C++ 应用程序中,那就太好了。同时,我强烈考虑将 webkit 集成到我的应用程序中,如果它可以帮助我仅在 C++ 中显示 webkit webview。

谢谢

最佳答案

像这样使用 XAML:

<Page
x:Class="Win81CPlusPlus.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Win81CPlusPlus"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
x:Name="grid">

</Grid>
</Page>

C++ 代码如下:

MainPage::MainPage()
{
InitializeComponent();
auto webView = ref new Windows::UI::Xaml::Controls::WebView();

Grid^ grid = safe_cast<Grid^>(this->FindName("grid"));
grid->Children->Append(webView);

auto uri = ref new Uri(L"http://www.stackoverflow.com");
webView->Navigate(uri);
// or you could ...
//webView->NavigateToString(L"<html><body><h1>Hello</h1></body></html>");
}

您可以构建、添加到父级并导航到 URL(或字符串)。

您也可以使用 Dispatcher:

Windows::ApplicationModel::Core::CoreApplication::MainView->CoreWindow->GetForCurrentThread()->Dispatcher->RunAsync(Windows::UI::Core::CoreDispatcherPriority::Normal, 
ref new Windows::UI::Core::DispatchedHandler(
[this] /* the this won't likely make sense from another thread */
{
auto webView = ref new Windows::UI::Xaml::Controls::WebView();
// will need to get access to the grid
auto grid = safe_cast<Grid^>(this->FindName("grid"));
grid->Children->Append(webView);
auto uri = ref new Uri(L"http://www.google.com");
webView->Navigate(uri);
//webView->NavigateToString("http://www.google.com");
}
));

问题是您需要访问将添加 WebView 实例的父元素。

关于c++ - WinRT W8 C++创建WebView并添加到主视图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19837650/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com