diff --git a/README.md b/README.md index d3477e66..1571d50d 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ In the ``GettingStarted`` folder you will find the starter code for its respecti - [WinUI Getting Started](https://docs.microsoft.com/microsoft-edge/webview2/gettingstarted/winui) In the ``Sample Apps`` folder you will find: -- [WebView2Samples.sln](SampleApps/WebView2Samples.sln) - a collective solution that includes [WebView2APISample.vcxproj](SampleApps/WebView2APISample/WebView2APISample.vcxproj), [WebView2WpfBrowser.csproj](SampleApps/WebView2WpfBrowser/WebView2WpfBrowser.csproj), [WebView2WindowsFormsBrowser.csproj](SampleApps/WebView2WindowsFormsBrowser/WebView2WindowsFormsBrowser.csproj), [WV2DeploymentWiXCustomActionSample](/SampleApps/WV2DeploymentWiXCustomActionSample/README.md), and [WV2DeploymentWiXBurnBundleSample](/SampleApps/WV2DeploymentWiXBurnBundleSample/README.md). +- [WebView2Samples.sln](SampleApps/WebView2Samples.sln) - a collective solution that includes [WebView2APISample.vcxproj](SampleApps/WebView2APISample/WebView2APISample.vcxproj), [WebView2SampleWinComp.vcxproj](SampleApps/WebView2SampleWinComp/WebView2SampleWinComp.vcxproj), [WebView2WpfBrowser.csproj](SampleApps/WebView2WpfBrowser/WebView2WpfBrowser.csproj), [WebView2WindowsFormsBrowser.csproj](SampleApps/WebView2WindowsFormsBrowser/WebView2WindowsFormsBrowser.csproj), [WV2DeploymentWiXCustomActionSample](/SampleApps/WV2DeploymentWiXCustomActionSample/README.md), and [WV2DeploymentWiXBurnBundleSample](/SampleApps/WV2DeploymentWiXBurnBundleSample/README.md). Please leave feedback in our [our feedback repo](https://aka.ms/webviewfeedback)! @@ -23,7 +23,7 @@ This will require downloading the [Getting Started Guide](https://github.com/Mic #### Comprehensive API Sample -The **Win32 C++ Sample** can be found in the [WebView2APISample](./SampleApps/WebView2APISample) directory. +The **Win32 C++ Sample** can be found in the [WebView2APISample](./SampleApps/WebView2APISample) directory and [WebView2SampleWinComp](./SampleApps/WebView2SampleWinComp) directory. #### Multiple WebViews Sample diff --git a/SampleApps/WebView2SampleWinComp/.clang-format b/SampleApps/WebView2SampleWinComp/.clang-format new file mode 100644 index 00000000..26ee2353 --- /dev/null +++ b/SampleApps/WebView2SampleWinComp/.clang-format @@ -0,0 +1,22 @@ +# Defines the coding style to apply. See: +# +Language: Cpp +BasedOnStyle: LLVM +AccessModifierOffset: -4 +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: None +AllowShortIfStatementsOnASingleLine: false +AllowShortLoopsOnASingleLine: false +AlwaysBreakAfterDefinitionReturnType: false +AlignAfterOpenBracket: AlwaysBreak +AlwaysBreakAfterReturnType: None +BreakBeforeBraces: Allman +ColumnLimit: 96 +DerivePointerAlignment: false +IndentWidth: 4 +PointerAlignment: Left +PenaltyReturnTypeOnItsOwnLine: 1000 +TabWidth: 4 +UseTab: Never +... + diff --git a/SampleApps/WebView2SampleWinComp/.gitignore b/SampleApps/WebView2SampleWinComp/.gitignore new file mode 100644 index 00000000..48e776e3 --- /dev/null +++ b/SampleApps/WebView2SampleWinComp/.gitignore @@ -0,0 +1,22 @@ +Debug/ +Release/ +ipch/ +x64/ +x86/ +ARM64/ +.vs/ +# Created by running event monitor +enc_temp_folder/ +packages/ + +# Override root .gitignore to ensure we pick up changes for the sample app +!*.sln +!*.vcxproj +!*.vcxproj.filters +!*.props + +# Ignore the binary generated version of the resource (.rc) file +*.aps + +# Make sure script debug config is checked in for vendor testing +!.vscode diff --git a/SampleApps/WebView2SampleWinComp/App.cpp b/SampleApps/WebView2SampleWinComp/App.cpp new file mode 100644 index 00000000..17274523 --- /dev/null +++ b/SampleApps/WebView2SampleWinComp/App.cpp @@ -0,0 +1,51 @@ +// Copyright (C) Microsoft Corporation. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "pch.h" +#include "framework.h" +#include "App.h" +#include "Appwindow.h" +#include "CompositionHost.h" +#define MAX_LOADSTRING 100 +#define WM_LBUTTONDOWN 0x0201 + +// Global Variables: +HINSTANCE hInst; // current instance +int nCmdShow; +int RunMessagePump(); + +int APIENTRY wWinMain(_In_ HINSTANCE hInstance, + _In_opt_ HINSTANCE hPrevInstance, + _In_ LPWSTR lpCmdLine, + _In_ int m_nCmdShow) +{ + hInst = hInstance; + UNREFERENCED_PARAMETER(hPrevInstance); + UNREFERENCED_PARAMETER(lpCmdLine); + nCmdShow = m_nCmdShow; + + AppWindow appWindow; + int retVal = RunMessagePump(); + return retVal; +} + +// Run the message pump for one thread. +int RunMessagePump() +{ + HACCEL hAccelTable = LoadAccelerators(hInst, MAKEINTRESOURCE(IDC_WEBVIEW2SAMPLEWINCOMP)); + + MSG msg; + + // Main message loop: + while (GetMessage(&msg, nullptr, 0, 0)) + { + if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + } + + return (int) msg.wParam; +} diff --git a/SampleApps/WebView2SampleWinComp/App.h b/SampleApps/WebView2SampleWinComp/App.h new file mode 100644 index 00000000..6adc910f --- /dev/null +++ b/SampleApps/WebView2SampleWinComp/App.h @@ -0,0 +1,9 @@ +// Copyright (C) Microsoft Corporation. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#pragma once + +#include "resource.h" +extern HINSTANCE hInst; +extern int nCmdShow; \ No newline at end of file diff --git a/SampleApps/WebView2SampleWinComp/AppWindow.cpp b/SampleApps/WebView2SampleWinComp/AppWindow.cpp new file mode 100644 index 00000000..0dfe7814 --- /dev/null +++ b/SampleApps/WebView2SampleWinComp/AppWindow.cpp @@ -0,0 +1,241 @@ +// Copyright (C) Microsoft Corporation. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "pch.h" + +#include "App.h" +#include "AppWindow.h" +#include "CheckFailure.h" +#include "CompositionHost.h" +#include + +static constexpr LPCWSTR s_subFolder = nullptr; +static constexpr WCHAR c_samplePath[] = L"WebView2SamplePage.html"; + +AppWindow::AppWindow() : m_winComp(std::make_unique()) +{ + WCHAR szTitle[MAX_LOADSTRING]; // The title bar text + CHECK_FAILURE(CoInitializeEx(NULL, COINIT_APARTMENTTHREADED)); + LoadStringW(hInst, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); + + // Perform application initialization: + m_mainWindow = CreateWindowW( + GetWindowClass(), szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, + nullptr, nullptr, hInst, nullptr); + SetWindowLongPtr(m_mainWindow, GWLP_USERDATA, (LONG_PTR)this); + ShowWindow(m_mainWindow, nCmdShow); + UpdateWindow(m_mainWindow); + + m_sampleUri = GetLocalUri(c_samplePath); + InitializeWebView(); +} + +// Register the Win32 window class for the app window. +PCWSTR AppWindow::GetWindowClass() +{ + // Only do this once + static PCWSTR windowClass = [] { + static WCHAR windowClass[MAX_LOADSTRING]; + LoadStringW(hInst, IDC_WEBVIEW2SAMPLEWINCOMP, windowClass, MAX_LOADSTRING); + + WNDCLASSEXW wcex; + + wcex.cbSize = sizeof(WNDCLASSEX); + + wcex.style = CS_HREDRAW | CS_VREDRAW; + wcex.lpfnWndProc = WndProcStatic; + wcex.cbClsExtra = 0; + wcex.cbWndExtra = 0; + wcex.hInstance = hInst; + wcex.hIcon = LoadIcon(hInst, MAKEINTRESOURCE(IDI_WEBVIEW2SAMPLEWINCOMP)); + wcex.hCursor = LoadCursor(nullptr, IDC_ARROW); + wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); + wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_WEBVIEW2SAMPLEWINCOMP); + wcex.lpszClassName = windowClass; + wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL)); + + RegisterClassExW(&wcex); + return windowClass; + }(); + return windowClass; +} + +LRESULT CALLBACK AppWindow::WndProcStatic(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) +{ + + if (auto app = (AppWindow*)GetWindowLongPtr(hWnd, GWLP_USERDATA)) + { + if (app->HandleWindowMessage(hWnd, message, wParam, lParam)) + { + return 0; + } + } + return DefWindowProc(hWnd, message, wParam, lParam); +} + +bool AppWindow::HandleWindowMessage(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) +{ + if (message >= WM_MOUSEFIRST && message <= WM_MOUSELAST) + { + m_winComp->OnMouseMessage(message, wParam, lParam); + return true; + } + + switch (message) + { + case WM_MOVE: + { + if (m_controller) + { + m_controller->NotifyParentWindowPositionChanged(); + } + return true; + } + case WM_SIZE: + { + RECT availableBounds = {0}; + GetClientRect(m_mainWindow, &availableBounds); + m_winComp->SetBounds(availableBounds); + return true; + } + case WM_COMMAND: + { + int wmId = LOWORD(wParam); + // Parse the menu selections: + switch (wmId) + { + case IDM_ABOUT: + DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); + return true; + case IDM_EXIT: + CloseAppWindow(); + return true; + } + break; + } + case WM_PAINT: + { + PAINTSTRUCT ps; + HDC hdc = BeginPaint(hWnd, &ps); + EndPaint(hWnd, &ps); + return true; + } + case WM_DESTROY: + PostQuitMessage(0); + return true; + } + return false; +} + +// Message handler for about box. +INT_PTR CALLBACK AppWindow::About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) +{ + UNREFERENCED_PARAMETER(lParam); + switch (message) + { + case WM_INITDIALOG: + return (INT_PTR)TRUE; + case WM_COMMAND: + if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) + { + EndDialog(hDlg, LOWORD(wParam)); + return (INT_PTR)TRUE; + } + break; + } + return (INT_PTR)FALSE; +} + +void AppWindow::InitializeWebView() +{ + auto options = Microsoft::WRL::Make(); + HRESULT hr = CreateCoreWebView2EnvironmentWithOptions( + s_subFolder, nullptr, options.Get(), + Callback( + [this](HRESULT result, ICoreWebView2Environment* environment) -> HRESULT { + m_webViewEnvironment = environment; + wil::com_ptr + webViewEnvironment3 = + m_webViewEnvironment.try_query(); + + if (webViewEnvironment3) + { + CHECK_FAILURE( + webViewEnvironment3->CreateCoreWebView2CompositionController( + m_mainWindow, + Callback< + ICoreWebView2CreateCoreWebView2CompositionControllerCompletedHandler>( + this, &AppWindow::OnCreateCoreWebView2ControllerCompleted) + .Get())); + } + return S_OK; + }) + .Get()); + assert(SUCCEEDED(hr)); +} + +HRESULT AppWindow::OnCreateCoreWebView2ControllerCompleted( + HRESULT result, ICoreWebView2CompositionController* compositionController) +{ + if (result == S_OK) + { + m_compositionController = compositionController; + CHECK_FAILURE(m_compositionController->QueryInterface(IID_PPV_ARGS(&m_controller))); + CHECK_FAILURE(m_controller->get_CoreWebView2(&m_webView)); + m_controller->put_IsVisible(true); + m_webView->Navigate(m_sampleUri.c_str()); + } + else + { + ShowFailure(result, L"Failed to create webview"); + } + m_winComp->Initialize(this); + return S_OK; +} + +void AppWindow::CloseWebView() +{ + if (m_controller) + { + m_controller->Close(); + m_controller = nullptr; + m_webView = nullptr; + } + m_webViewEnvironment = nullptr; +} + +void AppWindow::CloseAppWindow() +{ + CloseWebView(); + DestroyWindow(m_mainWindow); +} + +std::wstring AppWindow::GetLocalUri(std::wstring relativePath) +{ + std::wstring path = GetLocalPath(relativePath, false); + + wil::com_ptr uri; + CHECK_FAILURE(CreateUri(path.c_str(), Uri_CREATE_ALLOW_IMPLICIT_FILE_SCHEME, 0, &uri)); + + wil::unique_bstr uriBstr; + CHECK_FAILURE(uri->GetAbsoluteUri(&uriBstr)); + return std::wstring(uriBstr.get()); +} + +std::wstring AppWindow::GetLocalPath(std::wstring relativePath, bool keep_exe_path) +{ + WCHAR rawPath[MAX_PATH]; + GetModuleFileNameW(hInst, rawPath, MAX_PATH); + std::wstring path(rawPath); + if (keep_exe_path) + { + path.append(relativePath); + } + else + { + std::size_t index = path.find_last_of(L"\\") + 1; + path.replace(index, path.length(), relativePath); + } + return path; +} \ No newline at end of file diff --git a/SampleApps/WebView2SampleWinComp/AppWindow.h b/SampleApps/WebView2SampleWinComp/AppWindow.h new file mode 100644 index 00000000..91081cea --- /dev/null +++ b/SampleApps/WebView2SampleWinComp/AppWindow.h @@ -0,0 +1,65 @@ +// Copyright (C) Microsoft Corporation. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#pragma once +#include "pch.h" + +#include "framework.h" +#include + +using namespace Microsoft::WRL; + +#define MAX_LOADSTRING 100 + +class CompositionHost; + +class AppWindow +{ +public: + AppWindow(); + + ICoreWebView2Controller* GetWebViewController() + { + return m_controller.get(); + } + + ICoreWebView2CompositionController* GetWebViewCompositionController() + { + return m_compositionController.get(); + } + + ICoreWebView2* GetWebView() + { + return m_webView.get(); + } + + HWND GetMainWindow() + { + return m_mainWindow; + } + +private: + static LRESULT CALLBACK + WndProcStatic(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); + static INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); + static PCWSTR GetWindowClass(); + + bool HandleWindowMessage(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); + void InitializeWebView(); + HRESULT OnCreateCoreWebView2ControllerCompleted( + HRESULT result, ICoreWebView2CompositionController* compositionController); + void CloseWebView(); + void CloseAppWindow(); + std::wstring GetLocalUri(std::wstring relativePath); + std::wstring GetLocalPath(std::wstring relativePath, bool keep_exe_path); + + HWND m_mainWindow = nullptr; + std::unique_ptr m_winComp; + + wil::com_ptr m_webViewEnvironment; + wil::com_ptr m_compositionController; + wil::com_ptr m_controller; + wil::com_ptr m_webView; + std::wstring m_sampleUri; +}; diff --git a/SampleApps/WebView2SampleWinComp/CheckFailure.cpp b/SampleApps/WebView2SampleWinComp/CheckFailure.cpp new file mode 100644 index 00000000..341b61c1 --- /dev/null +++ b/SampleApps/WebView2SampleWinComp/CheckFailure.cpp @@ -0,0 +1,27 @@ +// Copyright (C) Microsoft Corporation. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "CheckFailure.h" +#include "pch.h" + +#include +#include + +// Notify the user of a failure with a message box. +void ShowFailure(HRESULT hr, const std::wstring& message) +{ + std::wstringstream formattedMessage; + formattedMessage << message << ": 0x" << std::hex << std::setw(8) << hr; + MessageBox(nullptr, formattedMessage.str().c_str(), nullptr, MB_OK); +} + +// If something failed, show the error code and fail fast. +void CheckFailure(HRESULT hr, const std::wstring& message) +{ + if (FAILED(hr)) + { + ShowFailure(hr, message); + FAIL_FAST(); + } +} diff --git a/SampleApps/WebView2SampleWinComp/CheckFailure.h b/SampleApps/WebView2SampleWinComp/CheckFailure.h new file mode 100644 index 00000000..e1581db6 --- /dev/null +++ b/SampleApps/WebView2SampleWinComp/CheckFailure.h @@ -0,0 +1,33 @@ +// Copyright (C) Microsoft Corporation. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "pch.h" + +#include + +// Notify the user of a failure with a message box. +void ShowFailure(HRESULT hr, const std::wstring& message = L"Error"); + +// If something failed, show the error code and fail fast. +void CheckFailure(HRESULT hr, const std::wstring& message = L"Error"); + +// Needs to be a separate macro because the preprocessor is weird +#define CHECK_FAILURE_STRINGIFY(arg) #arg + +// If we use a function-like macro to wrap a function call, the macro expansion covers the +// entire function call, and if that function call contains a lambda which spans many lines, +// it makes error messages, the __LINE__ macro, and debuggers less accurate. Instead, +// we make it a term-like macro which generates a partially-applied function. In effect, +// CHECK_FAILURE(MultiLineFunctionCall(...)); +// becomes +// ([](HRESULT hr){ CheckFailure(hr, "error message"); })(MultiLineFunctionCall(...)); +// so that MultiLineFunctionCall(...) doesn't have to be part of the macro expansion. +#define CHECK_FAILURE_FILE_LINE(file, line) \ + ([](HRESULT hr) { \ + CheckFailure( \ + hr, L"Failure at " CHECK_FAILURE_STRINGIFY(file) L"(" CHECK_FAILURE_STRINGIFY( \ + line) L")"); \ + }) +#define CHECK_FAILURE CHECK_FAILURE_FILE_LINE(__FILE__, __LINE__) +#define CHECK_FAILURE_BOOL(value) CHECK_FAILURE((value) ? S_OK : E_UNEXPECTED) diff --git a/SampleApps/WebView2SampleWinComp/CompositionHost.cpp b/SampleApps/WebView2SampleWinComp/CompositionHost.cpp new file mode 100644 index 00000000..ea544059 --- /dev/null +++ b/SampleApps/WebView2SampleWinComp/CompositionHost.cpp @@ -0,0 +1,239 @@ +// Copyright (C) Microsoft Corporation. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "pch.h" + +#include "CheckFailure.h" +#include "CompositionHost.h" +#include + +using namespace winrt; +using namespace winrt::Windows::System; +using namespace winrt::Windows::UI; +using namespace winrt::Windows::UI::Composition; +using namespace winrt::Windows::UI::Composition::Desktop; +using namespace winrt::Windows::Foundation::Numerics; + +// offset value for each visual, make sure to update this when modifying number of visuals to +// be created +static const std::vector kOffSetValues{ + {0, 0}, {1.25f, 0}, {0.5f, 0.5f}, {0, 1.25f}, {1.25f, 1.25f}}; +static const size_t kNumberOfVisuals = kOffSetValues.size(); + +CompositionHost::~CompositionHost() +{ + if (m_compositionController) + { + m_compositionController->put_RootVisualTarget(nullptr); + DestroyWinCompVisualTree(); + } +} + +void CompositionHost::Initialize(AppWindow* appWindow) +{ + if (appWindow) + { + m_appWindow = appWindow; + m_controller = m_appWindow->GetWebViewController(); + m_compositionController = m_appWindow->GetWebViewCompositionController(); + GetClientRect(m_appWindow->GetMainWindow(), &m_appBounds); + EnsureDispatcherQueue(); + if (m_dispatcherQueueController) + m_compositor = Compositor(); + + if (m_compositor && m_compositionController) + { + CreateDesktopWindowTarget(m_appWindow->GetMainWindow()); + CreateCompositionRoot(); + CreateVisuals(); + ResizeAllVisuals(); + } + } +} + +void CompositionHost::EnsureDispatcherQueue() +{ + namespace abi = ABI::Windows::System; + + if (m_dispatcherQueueController == nullptr) + { + DispatcherQueueOptions options{ + sizeof(DispatcherQueueOptions), /* dwSize */ + DQTYPE_THREAD_CURRENT, /* threadType */ + DQTAT_COM_ASTA /* apartmentType */ + }; + + winrt::Windows::System::DispatcherQueueController controller{nullptr}; + check_hresult(CreateDispatcherQueueController( + options, reinterpret_cast(put_abi(controller)))); + m_dispatcherQueueController = controller; + } +} + +void CompositionHost::CreateDesktopWindowTarget(HWND window) +{ + namespace abi = ABI::Windows::UI::Composition::Desktop; + + auto interop = m_compositor.as(); + check_hresult(interop->CreateDesktopWindowTarget( + window, false, reinterpret_cast(put_abi(m_target)))); +} + +void CompositionHost::CreateCompositionRoot() +{ + m_rootVisual = m_compositor.CreateContainerVisual(); + m_rootVisual.RelativeSizeAdjustment({1.0f, 1.0f}); + m_rootVisual.Offset({0, 0, 0}); + m_target.Root(m_rootVisual); +} + +void CompositionHost::OnMouseMessage(UINT message, WPARAM wParam, LPARAM lParam) +{ + if (m_rootVisual && m_compositionController) + { + POINT point; + point.x = GET_X_LPARAM(lParam); + point.y = GET_Y_LPARAM(lParam); + UpdateVisual(point, message, wParam); + } +} + +void CompositionHost::DestroyWinCompVisualTree() +{ + if (m_webViewVisual) + { + m_webViewVisual = nullptr; + + m_rootVisual.Children().RemoveAll(); + m_rootVisual = nullptr; + + m_target.Root(nullptr); + m_target = nullptr; + } +} + +void CompositionHost::CreateWebViewVisual() +{ + if (m_controller && m_rootVisual) + { + m_webViewVisual = m_compositor.CreateContainerVisual(); + m_rootVisual.Children().InsertAtTop(m_webViewVisual); + CHECK_FAILURE(m_compositionController->put_RootVisualTarget( + m_webViewVisual.as().get())); + } +} + +void CompositionHost::AddElement() +{ + if (m_rootVisual) + { + auto element = m_compositor.CreateSpriteVisual(); + element.Brush(m_compositor.CreateColorBrush(RandomBlue())); + m_rootVisual.Children().InsertAtTop(element); + } +} + +void CompositionHost::UpdateVisual(POINT point, UINT message, WPARAM wParam) +{ + ContainerVisual selectedVisual = FindVisual(point); + if (selectedVisual == nullptr) + return; + + if (selectedVisual != m_webViewVisual && message == WM_LBUTTONDOWN) + { + selectedVisual.as().Brush(m_compositor.CreateColorBrush(RandomBlue())); + } + else if (selectedVisual == m_webViewVisual) + { + auto offset = selectedVisual.Offset(); + point.x -= offset.x; + point.y -= offset.y; + CHECK_FAILURE(m_compositionController->SendMouseInput( + static_cast(message), + static_cast(GET_KEYSTATE_WPARAM(wParam)), 0, + point)); + } +} + +ContainerVisual CompositionHost::FindVisual(POINT point) +{ + ContainerVisual visual{nullptr}; + auto visuals = m_rootVisual.Children(); + for (auto v : visuals) + { + auto offset = v.Offset(); + auto size = v.Size(); + if ((point.x >= offset.x) && (point.x < offset.x + size.x) && (point.y >= offset.y) && + (point.y < offset.y + size.y)) + { + visual = v.as(); + } + } + return visual; +} + +void CompositionHost::CreateVisuals() +{ + // use kNumberOfVisuals to make sure we don't create more visuals than the total number of + // kOffSetValues provided + for (auto i = 0; i < kNumberOfVisuals; ++i) + { + // create webview visual in the middle with multiple overlays to better demonstrate + // interaction with these visual objects + if (i == kNumberOfVisuals / 2) + { + CreateWebViewVisual(); + } + else + { + AddElement(); + } + } +} + +Color CompositionHost::RandomBlue() +{ + uint8_t random = (double)(double)(rand() % 255); + return ColorHelper::FromArgb(255, 50, 120, random); +} + +void CompositionHost::SetBounds(RECT bounds) +{ + m_appBounds = bounds; + if (m_webViewVisual && m_rootVisual) + { + ResizeAllVisuals(); + } +} + +void CompositionHost::SetWebViewVisualBounds() +{ + RECT desiredBounds = m_appBounds; + desiredBounds.top += LONG(m_webViewVisual.Offset().y); + desiredBounds.left += LONG(m_webViewVisual.Offset().x); + desiredBounds.bottom = LONG(m_webViewVisual.Size().y + desiredBounds.top); + desiredBounds.right = LONG(m_webViewVisual.Size().x + desiredBounds.left); + m_controller->put_Bounds(desiredBounds); +} + +void CompositionHost::ResizeAllVisuals() +{ + const float2 webViewSize = { + ((m_appBounds.right - m_appBounds.left) / 2.0f), + ((m_appBounds.bottom - m_appBounds.top) / 2.0f)}; + const float2 otherVisualSize = {webViewSize.x / 1.25f, webViewSize.y / 1.25f}; + + auto visuals = m_rootVisual.Children(); + size_t index = 0; + for (auto v : visuals) + { + const float2 updatedSize = v == m_webViewVisual ? webViewSize : otherVisualSize; + // make sure index won't go out of kOffSetValues' bound + const float2 offset = kOffSetValues[index % kNumberOfVisuals]; + v.Size(updatedSize); + v.Offset({webViewSize.x * offset.x, webViewSize.y * offset.y, 0.0f}); + ++index; + } + SetWebViewVisualBounds(); +} \ No newline at end of file diff --git a/SampleApps/WebView2SampleWinComp/CompositionHost.h b/SampleApps/WebView2SampleWinComp/CompositionHost.h new file mode 100644 index 00000000..f67ec50f --- /dev/null +++ b/SampleApps/WebView2SampleWinComp/CompositionHost.h @@ -0,0 +1,47 @@ +// Copyright (C) Microsoft Corporation. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#pragma once +#include +#include +#include + +#include "Appwindow.h" +#include "WebView2EnvironmentOptions.h" +#include "WebView2Experimental.h" + +class CompositionHost +{ +public: + CompositionHost() = default; + ~CompositionHost(); + void Initialize(AppWindow* appWindow); + void OnMouseMessage(UINT message, WPARAM wParam, LPARAM lParam); + void SetBounds(RECT bounds); + +private: + void EnsureDispatcherQueue(); + void CreateDesktopWindowTarget(HWND window); + void CreateCompositionRoot(); + void CreateWebViewVisual(); + void DestroyWinCompVisualTree(); + void AddElement(); + void UpdateVisual(POINT point, UINT message, WPARAM wParam); + winrt::Windows::UI::Composition::ContainerVisual FindVisual(POINT point); + void CreateVisuals(); + winrt::Windows::UI::Color RandomBlue(); + void SetWebViewVisualBounds(); + void ResizeAllVisuals(); + + AppWindow* m_appWindow = nullptr; + wil::com_ptr m_controller; + wil::com_ptr m_compositionController; + + winrt::Windows::UI::Composition::Compositor m_compositor{nullptr}; + winrt::Windows::System::DispatcherQueueController m_dispatcherQueueController{nullptr}; + winrt::Windows::UI::Composition::Desktop::DesktopWindowTarget m_target{nullptr}; + winrt::Windows::UI::Composition::ContainerVisual m_rootVisual{nullptr}; + winrt::Windows::UI::Composition::ContainerVisual m_webViewVisual{nullptr}; + RECT m_appBounds = {}; +}; diff --git a/SampleApps/WebView2SampleWinComp/README.md b/SampleApps/WebView2SampleWinComp/README.md new file mode 100644 index 00000000..19df7b9c --- /dev/null +++ b/SampleApps/WebView2SampleWinComp/README.md @@ -0,0 +1,34 @@ +# WebView2 Sample WinComp + +This is a hybrid application built with the [Microsoft Edge WebView2](https://aka.ms/webview2) control. + +![Sample App Snapshot](/screenshots/WinComp-Sample-App-Screenshot.png) + +The WebView2SampleWinComp is an example of an application that embeds a WebView within a Win32 native application. It is built as a Win32 [Visual Studio 2019](https://visualstudio.microsoft.com/vs/) project and makes use of both C++ and HTML/CSS/JavaScript in the WebView2 environment. It also uses [Windows Runtime Composition APIs](https://docs.microsoft.com/en-us/uwp/api/windows.ui.composition?view=winrt-19041) (also called the Visual layer) to take avantage of the latest Windows 10 UI features and create better look, feel, and functionality in C++ Win32 applications. + +The API Sample showcases a selection of WebView2's event handlers and API methods that allow a native Win32 application to directly interact with a WebView and vice versa. + +If this is your first time using WebView, we recommend first following the [Getting Started](https://docs.microsoft.com/microsoft-edge/webview2/gettingstarted/win32) guide, which goes over how to create a WebView2 and walks through some basic WebView2 functionality. + +To learn more specifics about events and API Handlers in WebView2, you can refer to the [WebView2 Reference Documentation](https://docs.microsoft.com/microsoft-edge/webview2/webview2-api-reference). + +## Prerequisites + +- [Microsoft Edge (Chromium)](https://www.microsoftedgeinsider.com/download/) installed on a supported OS. Currently we recommend the latest version of the Edge Canary channel. +- [Visual Studio](https://visualstudio.microsoft.com/vs/) with C++ support installed. +- Latest pre-release version of our [WebView2 SDK](https://aka.ms/webviewnuget), which is included in this project. + +## Build the WebView2 Sample WinComp + +Clone the repository and open the solution in Visual Studio. WebView2 is already included as a NuGet package* in this project. + +- Clone this repository +- Open the solution in Visual Studio 2019** +- Set the target you want to build (Debug/Release, x86/x64/ARM64) +- Build the project file: _WebView2SampleWinComp.vcxproj_ + +That's it! Everything should be ready to just launch the app. + +*You can get the WebView2 NugetPackage through the Visual Studio NuGet Package Manager. + +**You can also use Visual Studio 2017 by changing the project's Platform Toolset in Project Properties/Configuration properties/General/Platform Toolset. You might also need to change the Windows SDK to the latest version available to you. diff --git a/SampleApps/WebView2SampleWinComp/Resource.h b/SampleApps/WebView2SampleWinComp/Resource.h new file mode 100644 index 00000000..eaafdd8c --- /dev/null +++ b/SampleApps/WebView2SampleWinComp/Resource.h @@ -0,0 +1,30 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by WebView2SampleWinComp.rc + +#define IDS_APP_TITLE 103 + +#define IDR_MAINFRAME 128 +#define IDD_WEBVIEW2SAMPLEWINCOMP_DIALOG 102 +#define IDD_ABOUTBOX 103 +#define IDM_ABOUT 104 +#define IDM_EXIT 105 +#define IDI_WEBVIEW2SAMPLEWINCOMP 107 +#define IDI_SMALL 108 +#define IDC_WEBVIEW2SAMPLEWINCOMP 109 +#define IDC_MYICON 2 +#ifndef IDC_STATIC +#define IDC_STATIC -1 +#endif +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS + +#define _APS_NO_MFC 130 +#define _APS_NEXT_RESOURCE_VALUE 129 +#define _APS_NEXT_COMMAND_VALUE 32771 +#define _APS_NEXT_CONTROL_VALUE 1000 +#define _APS_NEXT_SYMED_VALUE 110 +#endif +#endif diff --git a/SampleApps/WebView2SampleWinComp/WebView2SamplePage.html b/SampleApps/WebView2SampleWinComp/WebView2SamplePage.html new file mode 100644 index 00000000..047425b8 --- /dev/null +++ b/SampleApps/WebView2SampleWinComp/WebView2SamplePage.html @@ -0,0 +1,31 @@ + + + + + + Microsoft Edge WebView2 + + + + +

WebView sample page

+

This page demonstrates basic interactions with visual objects in sample app

+ +

Interact with WebView:

+ + + + + + + \ No newline at end of file diff --git a/SampleApps/WebView2SampleWinComp/WebView2SampleWinComp.ico b/SampleApps/WebView2SampleWinComp/WebView2SampleWinComp.ico new file mode 100644 index 00000000..b3ec03bd Binary files /dev/null and b/SampleApps/WebView2SampleWinComp/WebView2SampleWinComp.ico differ diff --git a/SampleApps/WebView2SampleWinComp/WebView2SampleWinComp.rc b/SampleApps/WebView2SampleWinComp/WebView2SampleWinComp.rc new file mode 100644 index 00000000..65fe54e6 Binary files /dev/null and b/SampleApps/WebView2SampleWinComp/WebView2SampleWinComp.rc differ diff --git a/SampleApps/WebView2SampleWinComp/WebView2SampleWinComp.sln b/SampleApps/WebView2SampleWinComp/WebView2SampleWinComp.sln new file mode 100644 index 00000000..4f5d94d6 --- /dev/null +++ b/SampleApps/WebView2SampleWinComp/WebView2SampleWinComp.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30523.141 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WebView2SampleWinComp", "WebView2SampleWinComp.vcxproj", "{ABAC8D87-C87B-455C-8340-0A9B0CD9A206}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {ABAC8D87-C87B-455C-8340-0A9B0CD9A206}.Debug|x64.ActiveCfg = Debug|x64 + {ABAC8D87-C87B-455C-8340-0A9B0CD9A206}.Debug|x64.Build.0 = Debug|x64 + {ABAC8D87-C87B-455C-8340-0A9B0CD9A206}.Debug|x86.ActiveCfg = Debug|Win32 + {ABAC8D87-C87B-455C-8340-0A9B0CD9A206}.Debug|x86.Build.0 = Debug|Win32 + {ABAC8D87-C87B-455C-8340-0A9B0CD9A206}.Release|x64.ActiveCfg = Release|x64 + {ABAC8D87-C87B-455C-8340-0A9B0CD9A206}.Release|x64.Build.0 = Release|x64 + {ABAC8D87-C87B-455C-8340-0A9B0CD9A206}.Release|x86.ActiveCfg = Release|Win32 + {ABAC8D87-C87B-455C-8340-0A9B0CD9A206}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {FE5EBFA9-48BE-4B08-B9AD-D1FEEE48F322} + EndGlobalSection +EndGlobal diff --git a/SampleApps/WebView2SampleWinComp/WebView2SampleWinComp.vcxproj b/SampleApps/WebView2SampleWinComp/WebView2SampleWinComp.vcxproj new file mode 100644 index 00000000..2b27150c --- /dev/null +++ b/SampleApps/WebView2SampleWinComp/WebView2SampleWinComp.vcxproj @@ -0,0 +1,219 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + Win32Proj + {abac8d87-c87b-455c-8340-0a9b0cd9a206} + WebView2SampleWinComp + 10.0.18362.0 + + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + $(ProjectDir)$(Configuration)\$(Platform)\ + $(VC_IncludePath);$(WindowsSDK_IncludePath) + $(Platform)\$(Configuration)\ + + + false + $(ProjectDir)$(Configuration)\$(Platform)\ + $(VC_IncludePath);$(WindowsSDK_IncludePath) + $(Platform)\$(Configuration)\ + + + true + $(ProjectDir)$(Configuration)\$(Platform)\ + $(VC_IncludePath);$(WindowsSDK_IncludePath) + $(Platform)\$(Configuration)\ + + + false + $(ProjectDir)$(Configuration)\$(Platform)\ + $(VC_IncludePath);$(WindowsSDK_IncludePath) + + + + Level3 + true + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + Use + pch.h + stdcpp17 + + + Windows + true + windowsapp.lib;Version.lib;urlmon.lib;onecore.lib + + + + + Level3 + true + true + true + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + Use + pch.h + stdcpp17 + + + Windows + true + true + true + windowsapp.lib;Version.lib;urlmon.lib;onecore.lib; + + + + + Level3 + true + _DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + Use + pch.h + stdcpp17 + + + Windows + true + windowsapp.lib;Version.lib;urlmon.lib;onecore.lib + %(AdditionalLibraryDirectories) + + + + + Level3 + true + true + true + NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + Use + pch.h + stdcpp17 + + + Windows + true + true + true + windowsapp.lib;Version.lib;urlmon.lib;onecore.lib; + + + + + + + + + + + + + + + + + + Create + Create + Create + Create + + + + + + + + + + + + + + + + + + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + \ No newline at end of file diff --git a/SampleApps/WebView2SampleWinComp/WebView2SampleWinComp.vcxproj.filters b/SampleApps/WebView2SampleWinComp/WebView2SampleWinComp.vcxproj.filters new file mode 100644 index 00000000..151278aa --- /dev/null +++ b/SampleApps/WebView2SampleWinComp/WebView2SampleWinComp.vcxproj.filters @@ -0,0 +1,82 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Resource Files + + + + + Resource Files + + + Resource Files + + + + + + + + + Resource Files + + + \ No newline at end of file diff --git a/SampleApps/WebView2SampleWinComp/WebViewStartPageBackground.png b/SampleApps/WebView2SampleWinComp/WebViewStartPageBackground.png new file mode 100644 index 00000000..21adb016 Binary files /dev/null and b/SampleApps/WebView2SampleWinComp/WebViewStartPageBackground.png differ diff --git a/SampleApps/WebView2SampleWinComp/framework.h b/SampleApps/WebView2SampleWinComp/framework.h new file mode 100644 index 00000000..9f718abe --- /dev/null +++ b/SampleApps/WebView2SampleWinComp/framework.h @@ -0,0 +1,15 @@ +// Copyright (C) Microsoft Corporation. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#pragma once + +#include "targetver.h" +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers +// Windows Header Files +#include +// C RunTime Header Files +#include +#include +#include +#include diff --git a/SampleApps/WebView2SampleWinComp/packages.config b/SampleApps/WebView2SampleWinComp/packages.config new file mode 100644 index 00000000..88a58b1e --- /dev/null +++ b/SampleApps/WebView2SampleWinComp/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/SampleApps/WebView2SampleWinComp/pch.cpp b/SampleApps/WebView2SampleWinComp/pch.cpp new file mode 100644 index 00000000..6c854890 --- /dev/null +++ b/SampleApps/WebView2SampleWinComp/pch.cpp @@ -0,0 +1,9 @@ +// Copyright (C) Microsoft Corporation. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// pch.cpp: source file corresponding to the pre-compiled header + +#include "pch.h" + +// When you are using pre-compiled headers, this source file is necessary for compilation to succeed. diff --git a/SampleApps/WebView2SampleWinComp/pch.h b/SampleApps/WebView2SampleWinComp/pch.h new file mode 100644 index 00000000..167e6940 --- /dev/null +++ b/SampleApps/WebView2SampleWinComp/pch.h @@ -0,0 +1,30 @@ +// Copyright (C) Microsoft Corporation. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// pch.h: This is a precompiled header file. +// Files listed below are compiled only once, improving build performance for future builds. +// This also affects IntelliSense performance, including code completion and many code browsing +// features. However, files listed here are ALL re-compiled if any one of them is updated +// between builds. Do not add files here that you will be updating frequently as this negates +// the performance advantage. + +#ifndef PCH_H +#define PCH_H + +// add headers that you want to pre-compile here +#include "framework.h" +#include +#include +#include +#include + +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers +// Windows Header Files: +#include + +#include +#include +#include +#include "WebView2.h" +#endif // PCH_H diff --git a/SampleApps/WebView2SampleWinComp/screenshots/WinComp-Sample-App-Screenshot.png b/SampleApps/WebView2SampleWinComp/screenshots/WinComp-Sample-App-Screenshot.png new file mode 100644 index 00000000..4b149470 Binary files /dev/null and b/SampleApps/WebView2SampleWinComp/screenshots/WinComp-Sample-App-Screenshot.png differ diff --git a/SampleApps/WebView2SampleWinComp/small.ico b/SampleApps/WebView2SampleWinComp/small.ico new file mode 100644 index 00000000..b3ec03bd Binary files /dev/null and b/SampleApps/WebView2SampleWinComp/small.ico differ diff --git a/SampleApps/WebView2SampleWinComp/targetver.h b/SampleApps/WebView2SampleWinComp/targetver.h new file mode 100644 index 00000000..a0fb1b1d --- /dev/null +++ b/SampleApps/WebView2SampleWinComp/targetver.h @@ -0,0 +1,10 @@ +// Copyright (C) Microsoft Corporation. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#pragma once + +// // Including SDKDDKVer.h defines the highest available Windows platform. +// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and +// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h. +#include diff --git a/SampleApps/WebView2Samples.sln b/SampleApps/WebView2Samples.sln index 00b36fb9..6badb64f 100644 --- a/SampleApps/WebView2Samples.sln +++ b/SampleApps/WebView2Samples.sln @@ -1,221 +1,251 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.30011.22 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WebView2APISample", "WebView2APISample\WebView2APISample.vcxproj", "{4F0CEEF3-12B3-425E-9BB0-105200411592}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebView2WindowsFormsBrowser", "WebView2WindowsFormsBrowser\WebView2WindowsFormsBrowser.csproj", "{59031776-19E7-442A-92DC-39165BD2DA0A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebView2WpfBrowser", "WebView2WpfBrowser\WebView2WpfBrowser.csproj", "{68762FAD-5D35-4D53-B15B-36B521C4494E}" -EndProject -Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "WV2DeploymentWiXCustomActionSample", "WV2DeploymentWiXCustomActionSample\WV2DeploymentWiXCustomActionSample.wixproj", "{3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}" -EndProject -Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "WV2DeploymentWiXBurnBundleSample", "WV2DeploymentWiXBurnBundleSample\WV2DeploymentWiXBurnBundleSample.wixproj", "{352113BF-FB17-4FD4-A47B-7D1013BFB8AE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WV2CDPExtensionWPFSample", "WV2CDPExtensionWPFSample\WV2CDPExtensionWPFSample.csproj", "{33C09167-E167-42FB-AECA-5BF6C24C3C40}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Debug|ARM64 = Debug|ARM64 - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 - Release|Any CPU = Release|Any CPU - Release|ARM64 = Release|ARM64 - Release|x64 = Release|x64 - Release|x86 = Release|x86 - Win7 Debug|Any CPU = Win7 Debug|Any CPU - Win7 Debug|ARM64 = Win7 Debug|ARM64 - Win7 Debug|x64 = Win7 Debug|x64 - Win7 Debug|x86 = Win7 Debug|x86 - Win7 Release|Any CPU = Win7 Release|Any CPU - Win7 Release|ARM64 = Win7 Release|ARM64 - Win7 Release|x64 = Win7 Release|x64 - Win7 Release|x86 = Win7 Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {4F0CEEF3-12B3-425E-9BB0-105200411592}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {4F0CEEF3-12B3-425E-9BB0-105200411592}.Debug|ARM64.ActiveCfg = Debug|ARM64 - {4F0CEEF3-12B3-425E-9BB0-105200411592}.Debug|ARM64.Build.0 = Debug|ARM64 - {4F0CEEF3-12B3-425E-9BB0-105200411592}.Debug|x64.ActiveCfg = Debug|x64 - {4F0CEEF3-12B3-425E-9BB0-105200411592}.Debug|x64.Build.0 = Debug|x64 - {4F0CEEF3-12B3-425E-9BB0-105200411592}.Debug|x86.ActiveCfg = Debug|Win32 - {4F0CEEF3-12B3-425E-9BB0-105200411592}.Debug|x86.Build.0 = Debug|Win32 - {4F0CEEF3-12B3-425E-9BB0-105200411592}.Release|Any CPU.ActiveCfg = Release|Win32 - {4F0CEEF3-12B3-425E-9BB0-105200411592}.Release|ARM64.ActiveCfg = Release|ARM64 - {4F0CEEF3-12B3-425E-9BB0-105200411592}.Release|ARM64.Build.0 = Release|ARM64 - {4F0CEEF3-12B3-425E-9BB0-105200411592}.Release|x64.ActiveCfg = Release|x64 - {4F0CEEF3-12B3-425E-9BB0-105200411592}.Release|x64.Build.0 = Release|x64 - {4F0CEEF3-12B3-425E-9BB0-105200411592}.Release|x86.ActiveCfg = Release|Win32 - {4F0CEEF3-12B3-425E-9BB0-105200411592}.Release|x86.Build.0 = Release|Win32 - {4F0CEEF3-12B3-425E-9BB0-105200411592}.Win7 Debug|Any CPU.ActiveCfg = Win7 Debug|Win32 - {4F0CEEF3-12B3-425E-9BB0-105200411592}.Win7 Debug|ARM64.ActiveCfg = Win7 Debug|ARM64 - {4F0CEEF3-12B3-425E-9BB0-105200411592}.Win7 Debug|ARM64.Build.0 = Win7 Debug|ARM64 - {4F0CEEF3-12B3-425E-9BB0-105200411592}.Win7 Debug|x64.ActiveCfg = Win7 Debug|x64 - {4F0CEEF3-12B3-425E-9BB0-105200411592}.Win7 Debug|x64.Build.0 = Win7 Debug|x64 - {4F0CEEF3-12B3-425E-9BB0-105200411592}.Win7 Debug|x86.ActiveCfg = Win7 Debug|Win32 - {4F0CEEF3-12B3-425E-9BB0-105200411592}.Win7 Debug|x86.Build.0 = Win7 Debug|Win32 - {4F0CEEF3-12B3-425E-9BB0-105200411592}.Win7 Release|Any CPU.ActiveCfg = Win7 Release|Win32 - {4F0CEEF3-12B3-425E-9BB0-105200411592}.Win7 Release|ARM64.ActiveCfg = Win7 Release|ARM64 - {4F0CEEF3-12B3-425E-9BB0-105200411592}.Win7 Release|ARM64.Build.0 = Win7 Release|ARM64 - {4F0CEEF3-12B3-425E-9BB0-105200411592}.Win7 Release|x64.ActiveCfg = Win7 Release|x64 - {4F0CEEF3-12B3-425E-9BB0-105200411592}.Win7 Release|x64.Build.0 = Win7 Release|x64 - {4F0CEEF3-12B3-425E-9BB0-105200411592}.Win7 Release|x86.ActiveCfg = Win7 Release|Win32 - {4F0CEEF3-12B3-425E-9BB0-105200411592}.Win7 Release|x86.Build.0 = Win7 Release|Win32 - {59031776-19E7-442A-92DC-39165BD2DA0A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {59031776-19E7-442A-92DC-39165BD2DA0A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {59031776-19E7-442A-92DC-39165BD2DA0A}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {59031776-19E7-442A-92DC-39165BD2DA0A}.Debug|ARM64.Build.0 = Debug|Any CPU - {59031776-19E7-442A-92DC-39165BD2DA0A}.Debug|x64.ActiveCfg = Debug|Any CPU - {59031776-19E7-442A-92DC-39165BD2DA0A}.Debug|x64.Build.0 = Debug|Any CPU - {59031776-19E7-442A-92DC-39165BD2DA0A}.Debug|x86.ActiveCfg = Debug|Any CPU - {59031776-19E7-442A-92DC-39165BD2DA0A}.Debug|x86.Build.0 = Debug|Any CPU - {59031776-19E7-442A-92DC-39165BD2DA0A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {59031776-19E7-442A-92DC-39165BD2DA0A}.Release|Any CPU.Build.0 = Release|Any CPU - {59031776-19E7-442A-92DC-39165BD2DA0A}.Release|ARM64.ActiveCfg = Release|Any CPU - {59031776-19E7-442A-92DC-39165BD2DA0A}.Release|ARM64.Build.0 = Release|Any CPU - {59031776-19E7-442A-92DC-39165BD2DA0A}.Release|x64.ActiveCfg = Release|Any CPU - {59031776-19E7-442A-92DC-39165BD2DA0A}.Release|x64.Build.0 = Release|Any CPU - {59031776-19E7-442A-92DC-39165BD2DA0A}.Release|x86.ActiveCfg = Release|Any CPU - {59031776-19E7-442A-92DC-39165BD2DA0A}.Release|x86.Build.0 = Release|Any CPU - {59031776-19E7-442A-92DC-39165BD2DA0A}.Win7 Debug|Any CPU.ActiveCfg = Win7 Debug|Any CPU - {59031776-19E7-442A-92DC-39165BD2DA0A}.Win7 Debug|Any CPU.Build.0 = Win7 Debug|Any CPU - {59031776-19E7-442A-92DC-39165BD2DA0A}.Win7 Debug|ARM64.ActiveCfg = Win7 Debug|Any CPU - {59031776-19E7-442A-92DC-39165BD2DA0A}.Win7 Debug|ARM64.Build.0 = Win7 Debug|Any CPU - {59031776-19E7-442A-92DC-39165BD2DA0A}.Win7 Debug|x64.ActiveCfg = Win7 Debug|Any CPU - {59031776-19E7-442A-92DC-39165BD2DA0A}.Win7 Debug|x64.Build.0 = Win7 Debug|Any CPU - {59031776-19E7-442A-92DC-39165BD2DA0A}.Win7 Debug|x86.ActiveCfg = Win7 Debug|Any CPU - {59031776-19E7-442A-92DC-39165BD2DA0A}.Win7 Debug|x86.Build.0 = Win7 Debug|Any CPU - {59031776-19E7-442A-92DC-39165BD2DA0A}.Win7 Release|Any CPU.ActiveCfg = Win7 Release|Any CPU - {59031776-19E7-442A-92DC-39165BD2DA0A}.Win7 Release|Any CPU.Build.0 = Win7 Release|Any CPU - {59031776-19E7-442A-92DC-39165BD2DA0A}.Win7 Release|ARM64.ActiveCfg = Win7 Release|Any CPU - {59031776-19E7-442A-92DC-39165BD2DA0A}.Win7 Release|ARM64.Build.0 = Win7 Release|Any CPU - {59031776-19E7-442A-92DC-39165BD2DA0A}.Win7 Release|x64.ActiveCfg = Win7 Release|Any CPU - {59031776-19E7-442A-92DC-39165BD2DA0A}.Win7 Release|x64.Build.0 = Win7 Release|Any CPU - {59031776-19E7-442A-92DC-39165BD2DA0A}.Win7 Release|x86.ActiveCfg = Win7 Release|Any CPU - {59031776-19E7-442A-92DC-39165BD2DA0A}.Win7 Release|x86.Build.0 = Win7 Release|Any CPU - {68762FAD-5D35-4D53-B15B-36B521C4494E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {68762FAD-5D35-4D53-B15B-36B521C4494E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {68762FAD-5D35-4D53-B15B-36B521C4494E}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {68762FAD-5D35-4D53-B15B-36B521C4494E}.Debug|ARM64.Build.0 = Debug|Any CPU - {68762FAD-5D35-4D53-B15B-36B521C4494E}.Debug|x64.ActiveCfg = Debug|Any CPU - {68762FAD-5D35-4D53-B15B-36B521C4494E}.Debug|x64.Build.0 = Debug|Any CPU - {68762FAD-5D35-4D53-B15B-36B521C4494E}.Debug|x86.ActiveCfg = Debug|Any CPU - {68762FAD-5D35-4D53-B15B-36B521C4494E}.Debug|x86.Build.0 = Debug|Any CPU - {68762FAD-5D35-4D53-B15B-36B521C4494E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {68762FAD-5D35-4D53-B15B-36B521C4494E}.Release|Any CPU.Build.0 = Release|Any CPU - {68762FAD-5D35-4D53-B15B-36B521C4494E}.Release|ARM64.ActiveCfg = Release|Any CPU - {68762FAD-5D35-4D53-B15B-36B521C4494E}.Release|ARM64.Build.0 = Release|Any CPU - {68762FAD-5D35-4D53-B15B-36B521C4494E}.Release|x64.ActiveCfg = Release|Any CPU - {68762FAD-5D35-4D53-B15B-36B521C4494E}.Release|x64.Build.0 = Release|Any CPU - {68762FAD-5D35-4D53-B15B-36B521C4494E}.Release|x86.ActiveCfg = Release|Any CPU - {68762FAD-5D35-4D53-B15B-36B521C4494E}.Release|x86.Build.0 = Release|Any CPU - {68762FAD-5D35-4D53-B15B-36B521C4494E}.Win7 Debug|Any CPU.ActiveCfg = Win7 Debug|Any CPU - {68762FAD-5D35-4D53-B15B-36B521C4494E}.Win7 Debug|Any CPU.Build.0 = Win7 Debug|Any CPU - {68762FAD-5D35-4D53-B15B-36B521C4494E}.Win7 Debug|ARM64.ActiveCfg = Win7 Debug|Any CPU - {68762FAD-5D35-4D53-B15B-36B521C4494E}.Win7 Debug|ARM64.Build.0 = Win7 Debug|Any CPU - {68762FAD-5D35-4D53-B15B-36B521C4494E}.Win7 Debug|x64.ActiveCfg = Win7 Debug|Any CPU - {68762FAD-5D35-4D53-B15B-36B521C4494E}.Win7 Debug|x64.Build.0 = Win7 Debug|Any CPU - {68762FAD-5D35-4D53-B15B-36B521C4494E}.Win7 Debug|x86.ActiveCfg = Win7 Debug|Any CPU - {68762FAD-5D35-4D53-B15B-36B521C4494E}.Win7 Debug|x86.Build.0 = Win7 Debug|Any CPU - {68762FAD-5D35-4D53-B15B-36B521C4494E}.Win7 Release|Any CPU.ActiveCfg = Win7 Release|Any CPU - {68762FAD-5D35-4D53-B15B-36B521C4494E}.Win7 Release|Any CPU.Build.0 = Win7 Release|Any CPU - {68762FAD-5D35-4D53-B15B-36B521C4494E}.Win7 Release|ARM64.ActiveCfg = Win7 Release|Any CPU - {68762FAD-5D35-4D53-B15B-36B521C4494E}.Win7 Release|ARM64.Build.0 = Win7 Release|Any CPU - {68762FAD-5D35-4D53-B15B-36B521C4494E}.Win7 Release|x64.ActiveCfg = Win7 Release|Any CPU - {68762FAD-5D35-4D53-B15B-36B521C4494E}.Win7 Release|x64.Build.0 = Win7 Release|Any CPU - {68762FAD-5D35-4D53-B15B-36B521C4494E}.Win7 Release|x86.ActiveCfg = Win7 Release|Any CPU - {68762FAD-5D35-4D53-B15B-36B521C4494E}.Win7 Release|x86.Build.0 = Win7 Release|Any CPU - {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Debug|Any CPU.ActiveCfg = Debug|x86 - {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Debug|ARM64.ActiveCfg = Debug|x86 - {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Debug|x64.ActiveCfg = Debug|x86 - {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Debug|x86.ActiveCfg = Debug|x86 - {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Debug|x86.Build.0 = Debug|x86 - {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Release|Any CPU.ActiveCfg = Release|x86 - {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Release|ARM64.ActiveCfg = Release|x86 - {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Release|x64.ActiveCfg = Release|x86 - {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Release|x86.ActiveCfg = Release|x86 - {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Release|x86.Build.0 = Release|x86 - {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Win7 Debug|Any CPU.ActiveCfg = Debug|x86 - {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Win7 Debug|Any CPU.Build.0 = Debug|x86 - {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Win7 Debug|ARM64.ActiveCfg = Debug|x86 - {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Win7 Debug|ARM64.Build.0 = Debug|x86 - {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Win7 Debug|x64.ActiveCfg = Debug|x86 - {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Win7 Debug|x64.Build.0 = Debug|x86 - {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Win7 Debug|x86.ActiveCfg = Debug|x86 - {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Win7 Debug|x86.Build.0 = Debug|x86 - {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Win7 Release|Any CPU.ActiveCfg = Release|x86 - {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Win7 Release|Any CPU.Build.0 = Release|x86 - {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Win7 Release|ARM64.ActiveCfg = Release|x86 - {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Win7 Release|ARM64.Build.0 = Release|x86 - {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Win7 Release|x64.ActiveCfg = Release|x86 - {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Win7 Release|x64.Build.0 = Release|x86 - {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Win7 Release|x86.ActiveCfg = Release|x86 - {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Win7 Release|x86.Build.0 = Release|x86 - {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Debug|Any CPU.ActiveCfg = Debug|x86 - {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Debug|ARM64.ActiveCfg = Debug|x86 - {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Debug|x64.ActiveCfg = Debug|x86 - {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Debug|x86.ActiveCfg = Debug|x86 - {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Debug|x86.Build.0 = Debug|x86 - {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Release|Any CPU.ActiveCfg = Release|x86 - {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Release|ARM64.ActiveCfg = Release|x86 - {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Release|x64.ActiveCfg = Release|x86 - {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Release|x86.ActiveCfg = Release|x86 - {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Release|x86.Build.0 = Release|x86 - {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Win7 Debug|Any CPU.ActiveCfg = Debug|x86 - {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Win7 Debug|Any CPU.Build.0 = Debug|x86 - {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Win7 Debug|ARM64.ActiveCfg = Debug|x86 - {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Win7 Debug|ARM64.Build.0 = Debug|x86 - {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Win7 Debug|x64.ActiveCfg = Debug|x86 - {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Win7 Debug|x64.Build.0 = Debug|x86 - {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Win7 Debug|x86.ActiveCfg = Debug|x86 - {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Win7 Debug|x86.Build.0 = Debug|x86 - {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Win7 Release|Any CPU.ActiveCfg = Release|x86 - {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Win7 Release|Any CPU.Build.0 = Release|x86 - {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Win7 Release|ARM64.ActiveCfg = Release|x86 - {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Win7 Release|ARM64.Build.0 = Release|x86 - {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Win7 Release|x64.ActiveCfg = Release|x86 - {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Win7 Release|x64.Build.0 = Release|x86 - {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Win7 Release|x86.ActiveCfg = Release|x86 - {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Win7 Release|x86.Build.0 = Release|x86 - {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Debug|Any CPU.Build.0 = Debug|Any CPU - {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Debug|ARM64.Build.0 = Debug|Any CPU - {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Debug|x64.ActiveCfg = Debug|Any CPU - {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Debug|x64.Build.0 = Debug|Any CPU - {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Debug|x86.ActiveCfg = Debug|Any CPU - {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Debug|x86.Build.0 = Debug|Any CPU - {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Release|Any CPU.ActiveCfg = Release|Any CPU - {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Release|Any CPU.Build.0 = Release|Any CPU - {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Release|ARM64.ActiveCfg = Release|Any CPU - {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Release|ARM64.Build.0 = Release|Any CPU - {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Release|x64.ActiveCfg = Release|Any CPU - {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Release|x64.Build.0 = Release|Any CPU - {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Release|x86.ActiveCfg = Release|Any CPU - {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Release|x86.Build.0 = Release|Any CPU - {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Win7 Debug|Any CPU.ActiveCfg = Debug|Any CPU - {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Win7 Debug|Any CPU.Build.0 = Debug|Any CPU - {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Win7 Debug|ARM64.ActiveCfg = Debug|Any CPU - {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Win7 Debug|ARM64.Build.0 = Debug|Any CPU - {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Win7 Debug|x64.ActiveCfg = Debug|Any CPU - {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Win7 Debug|x64.Build.0 = Debug|Any CPU - {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Win7 Debug|x86.ActiveCfg = Debug|Any CPU - {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Win7 Debug|x86.Build.0 = Debug|Any CPU - {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Win7 Release|Any CPU.ActiveCfg = Release|Any CPU - {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Win7 Release|Any CPU.Build.0 = Release|Any CPU - {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Win7 Release|ARM64.ActiveCfg = Release|Any CPU - {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Win7 Release|ARM64.Build.0 = Release|Any CPU - {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Win7 Release|x64.ActiveCfg = Release|Any CPU - {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Win7 Release|x64.Build.0 = Release|Any CPU - {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Win7 Release|x86.ActiveCfg = Release|Any CPU - {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Win7 Release|x86.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {1267B10C-4298-4F27-ADC5-FE558436C6D4} - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30011.22 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WebView2APISample", "WebView2APISample\WebView2APISample.vcxproj", "{4F0CEEF3-12B3-425E-9BB0-105200411592}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebView2WindowsFormsBrowser", "WebView2WindowsFormsBrowser\WebView2WindowsFormsBrowser.csproj", "{59031776-19E7-442A-92DC-39165BD2DA0A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebView2WpfBrowser", "WebView2WpfBrowser\WebView2WpfBrowser.csproj", "{68762FAD-5D35-4D53-B15B-36B521C4494E}" +EndProject +Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "WV2DeploymentWiXCustomActionSample", "WV2DeploymentWiXCustomActionSample\WV2DeploymentWiXCustomActionSample.wixproj", "{3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}" +EndProject +Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "WV2DeploymentWiXBurnBundleSample", "WV2DeploymentWiXBurnBundleSample\WV2DeploymentWiXBurnBundleSample.wixproj", "{352113BF-FB17-4FD4-A47B-7D1013BFB8AE}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WV2CDPExtensionWPFSample", "WV2CDPExtensionWPFSample\WV2CDPExtensionWPFSample.csproj", "{33C09167-E167-42FB-AECA-5BF6C24C3C40}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WebView2SampleWinComp", "WebView2SampleWinComp\WebView2SampleWinComp.vcxproj", "{ABAC8D87-C87B-455C-8340-0A9B0CD9A206}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|ARM64 = Debug|ARM64 + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|ARM64 = Release|ARM64 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + Win7 Debug|Any CPU = Win7 Debug|Any CPU + Win7 Debug|ARM64 = Win7 Debug|ARM64 + Win7 Debug|x64 = Win7 Debug|x64 + Win7 Debug|x86 = Win7 Debug|x86 + Win7 Release|Any CPU = Win7 Release|Any CPU + Win7 Release|ARM64 = Win7 Release|ARM64 + Win7 Release|x64 = Win7 Release|x64 + Win7 Release|x86 = Win7 Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {4F0CEEF3-12B3-425E-9BB0-105200411592}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {4F0CEEF3-12B3-425E-9BB0-105200411592}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {4F0CEEF3-12B3-425E-9BB0-105200411592}.Debug|ARM64.Build.0 = Debug|ARM64 + {4F0CEEF3-12B3-425E-9BB0-105200411592}.Debug|x64.ActiveCfg = Debug|x64 + {4F0CEEF3-12B3-425E-9BB0-105200411592}.Debug|x64.Build.0 = Debug|x64 + {4F0CEEF3-12B3-425E-9BB0-105200411592}.Debug|x86.ActiveCfg = Debug|Win32 + {4F0CEEF3-12B3-425E-9BB0-105200411592}.Debug|x86.Build.0 = Debug|Win32 + {4F0CEEF3-12B3-425E-9BB0-105200411592}.Release|Any CPU.ActiveCfg = Release|Win32 + {4F0CEEF3-12B3-425E-9BB0-105200411592}.Release|ARM64.ActiveCfg = Release|ARM64 + {4F0CEEF3-12B3-425E-9BB0-105200411592}.Release|ARM64.Build.0 = Release|ARM64 + {4F0CEEF3-12B3-425E-9BB0-105200411592}.Release|x64.ActiveCfg = Release|x64 + {4F0CEEF3-12B3-425E-9BB0-105200411592}.Release|x64.Build.0 = Release|x64 + {4F0CEEF3-12B3-425E-9BB0-105200411592}.Release|x86.ActiveCfg = Release|Win32 + {4F0CEEF3-12B3-425E-9BB0-105200411592}.Release|x86.Build.0 = Release|Win32 + {4F0CEEF3-12B3-425E-9BB0-105200411592}.Win7 Debug|Any CPU.ActiveCfg = Win7 Debug|Win32 + {4F0CEEF3-12B3-425E-9BB0-105200411592}.Win7 Debug|ARM64.ActiveCfg = Win7 Debug|ARM64 + {4F0CEEF3-12B3-425E-9BB0-105200411592}.Win7 Debug|ARM64.Build.0 = Win7 Debug|ARM64 + {4F0CEEF3-12B3-425E-9BB0-105200411592}.Win7 Debug|x64.ActiveCfg = Win7 Debug|x64 + {4F0CEEF3-12B3-425E-9BB0-105200411592}.Win7 Debug|x64.Build.0 = Win7 Debug|x64 + {4F0CEEF3-12B3-425E-9BB0-105200411592}.Win7 Debug|x86.ActiveCfg = Win7 Debug|Win32 + {4F0CEEF3-12B3-425E-9BB0-105200411592}.Win7 Debug|x86.Build.0 = Win7 Debug|Win32 + {4F0CEEF3-12B3-425E-9BB0-105200411592}.Win7 Release|Any CPU.ActiveCfg = Win7 Release|Win32 + {4F0CEEF3-12B3-425E-9BB0-105200411592}.Win7 Release|ARM64.ActiveCfg = Win7 Release|ARM64 + {4F0CEEF3-12B3-425E-9BB0-105200411592}.Win7 Release|ARM64.Build.0 = Win7 Release|ARM64 + {4F0CEEF3-12B3-425E-9BB0-105200411592}.Win7 Release|x64.ActiveCfg = Win7 Release|x64 + {4F0CEEF3-12B3-425E-9BB0-105200411592}.Win7 Release|x64.Build.0 = Win7 Release|x64 + {4F0CEEF3-12B3-425E-9BB0-105200411592}.Win7 Release|x86.ActiveCfg = Win7 Release|Win32 + {4F0CEEF3-12B3-425E-9BB0-105200411592}.Win7 Release|x86.Build.0 = Win7 Release|Win32 + {59031776-19E7-442A-92DC-39165BD2DA0A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {59031776-19E7-442A-92DC-39165BD2DA0A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {59031776-19E7-442A-92DC-39165BD2DA0A}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {59031776-19E7-442A-92DC-39165BD2DA0A}.Debug|ARM64.Build.0 = Debug|Any CPU + {59031776-19E7-442A-92DC-39165BD2DA0A}.Debug|x64.ActiveCfg = Debug|Any CPU + {59031776-19E7-442A-92DC-39165BD2DA0A}.Debug|x64.Build.0 = Debug|Any CPU + {59031776-19E7-442A-92DC-39165BD2DA0A}.Debug|x86.ActiveCfg = Debug|Any CPU + {59031776-19E7-442A-92DC-39165BD2DA0A}.Debug|x86.Build.0 = Debug|Any CPU + {59031776-19E7-442A-92DC-39165BD2DA0A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {59031776-19E7-442A-92DC-39165BD2DA0A}.Release|Any CPU.Build.0 = Release|Any CPU + {59031776-19E7-442A-92DC-39165BD2DA0A}.Release|ARM64.ActiveCfg = Release|Any CPU + {59031776-19E7-442A-92DC-39165BD2DA0A}.Release|ARM64.Build.0 = Release|Any CPU + {59031776-19E7-442A-92DC-39165BD2DA0A}.Release|x64.ActiveCfg = Release|Any CPU + {59031776-19E7-442A-92DC-39165BD2DA0A}.Release|x64.Build.0 = Release|Any CPU + {59031776-19E7-442A-92DC-39165BD2DA0A}.Release|x86.ActiveCfg = Release|Any CPU + {59031776-19E7-442A-92DC-39165BD2DA0A}.Release|x86.Build.0 = Release|Any CPU + {59031776-19E7-442A-92DC-39165BD2DA0A}.Win7 Debug|Any CPU.ActiveCfg = Win7 Debug|Any CPU + {59031776-19E7-442A-92DC-39165BD2DA0A}.Win7 Debug|Any CPU.Build.0 = Win7 Debug|Any CPU + {59031776-19E7-442A-92DC-39165BD2DA0A}.Win7 Debug|ARM64.ActiveCfg = Win7 Debug|Any CPU + {59031776-19E7-442A-92DC-39165BD2DA0A}.Win7 Debug|ARM64.Build.0 = Win7 Debug|Any CPU + {59031776-19E7-442A-92DC-39165BD2DA0A}.Win7 Debug|x64.ActiveCfg = Win7 Debug|Any CPU + {59031776-19E7-442A-92DC-39165BD2DA0A}.Win7 Debug|x64.Build.0 = Win7 Debug|Any CPU + {59031776-19E7-442A-92DC-39165BD2DA0A}.Win7 Debug|x86.ActiveCfg = Win7 Debug|Any CPU + {59031776-19E7-442A-92DC-39165BD2DA0A}.Win7 Debug|x86.Build.0 = Win7 Debug|Any CPU + {59031776-19E7-442A-92DC-39165BD2DA0A}.Win7 Release|Any CPU.ActiveCfg = Win7 Release|Any CPU + {59031776-19E7-442A-92DC-39165BD2DA0A}.Win7 Release|Any CPU.Build.0 = Win7 Release|Any CPU + {59031776-19E7-442A-92DC-39165BD2DA0A}.Win7 Release|ARM64.ActiveCfg = Win7 Release|Any CPU + {59031776-19E7-442A-92DC-39165BD2DA0A}.Win7 Release|ARM64.Build.0 = Win7 Release|Any CPU + {59031776-19E7-442A-92DC-39165BD2DA0A}.Win7 Release|x64.ActiveCfg = Win7 Release|Any CPU + {59031776-19E7-442A-92DC-39165BD2DA0A}.Win7 Release|x64.Build.0 = Win7 Release|Any CPU + {59031776-19E7-442A-92DC-39165BD2DA0A}.Win7 Release|x86.ActiveCfg = Win7 Release|Any CPU + {59031776-19E7-442A-92DC-39165BD2DA0A}.Win7 Release|x86.Build.0 = Win7 Release|Any CPU + {68762FAD-5D35-4D53-B15B-36B521C4494E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {68762FAD-5D35-4D53-B15B-36B521C4494E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {68762FAD-5D35-4D53-B15B-36B521C4494E}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {68762FAD-5D35-4D53-B15B-36B521C4494E}.Debug|ARM64.Build.0 = Debug|Any CPU + {68762FAD-5D35-4D53-B15B-36B521C4494E}.Debug|x64.ActiveCfg = Debug|Any CPU + {68762FAD-5D35-4D53-B15B-36B521C4494E}.Debug|x64.Build.0 = Debug|Any CPU + {68762FAD-5D35-4D53-B15B-36B521C4494E}.Debug|x86.ActiveCfg = Debug|Any CPU + {68762FAD-5D35-4D53-B15B-36B521C4494E}.Debug|x86.Build.0 = Debug|Any CPU + {68762FAD-5D35-4D53-B15B-36B521C4494E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {68762FAD-5D35-4D53-B15B-36B521C4494E}.Release|Any CPU.Build.0 = Release|Any CPU + {68762FAD-5D35-4D53-B15B-36B521C4494E}.Release|ARM64.ActiveCfg = Release|Any CPU + {68762FAD-5D35-4D53-B15B-36B521C4494E}.Release|ARM64.Build.0 = Release|Any CPU + {68762FAD-5D35-4D53-B15B-36B521C4494E}.Release|x64.ActiveCfg = Release|Any CPU + {68762FAD-5D35-4D53-B15B-36B521C4494E}.Release|x64.Build.0 = Release|Any CPU + {68762FAD-5D35-4D53-B15B-36B521C4494E}.Release|x86.ActiveCfg = Release|Any CPU + {68762FAD-5D35-4D53-B15B-36B521C4494E}.Release|x86.Build.0 = Release|Any CPU + {68762FAD-5D35-4D53-B15B-36B521C4494E}.Win7 Debug|Any CPU.ActiveCfg = Win7 Debug|Any CPU + {68762FAD-5D35-4D53-B15B-36B521C4494E}.Win7 Debug|Any CPU.Build.0 = Win7 Debug|Any CPU + {68762FAD-5D35-4D53-B15B-36B521C4494E}.Win7 Debug|ARM64.ActiveCfg = Win7 Debug|Any CPU + {68762FAD-5D35-4D53-B15B-36B521C4494E}.Win7 Debug|ARM64.Build.0 = Win7 Debug|Any CPU + {68762FAD-5D35-4D53-B15B-36B521C4494E}.Win7 Debug|x64.ActiveCfg = Win7 Debug|Any CPU + {68762FAD-5D35-4D53-B15B-36B521C4494E}.Win7 Debug|x64.Build.0 = Win7 Debug|Any CPU + {68762FAD-5D35-4D53-B15B-36B521C4494E}.Win7 Debug|x86.ActiveCfg = Win7 Debug|Any CPU + {68762FAD-5D35-4D53-B15B-36B521C4494E}.Win7 Debug|x86.Build.0 = Win7 Debug|Any CPU + {68762FAD-5D35-4D53-B15B-36B521C4494E}.Win7 Release|Any CPU.ActiveCfg = Win7 Release|Any CPU + {68762FAD-5D35-4D53-B15B-36B521C4494E}.Win7 Release|Any CPU.Build.0 = Win7 Release|Any CPU + {68762FAD-5D35-4D53-B15B-36B521C4494E}.Win7 Release|ARM64.ActiveCfg = Win7 Release|Any CPU + {68762FAD-5D35-4D53-B15B-36B521C4494E}.Win7 Release|ARM64.Build.0 = Win7 Release|Any CPU + {68762FAD-5D35-4D53-B15B-36B521C4494E}.Win7 Release|x64.ActiveCfg = Win7 Release|Any CPU + {68762FAD-5D35-4D53-B15B-36B521C4494E}.Win7 Release|x64.Build.0 = Win7 Release|Any CPU + {68762FAD-5D35-4D53-B15B-36B521C4494E}.Win7 Release|x86.ActiveCfg = Win7 Release|Any CPU + {68762FAD-5D35-4D53-B15B-36B521C4494E}.Win7 Release|x86.Build.0 = Win7 Release|Any CPU + {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Debug|Any CPU.ActiveCfg = Debug|x86 + {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Debug|ARM64.ActiveCfg = Debug|x86 + {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Debug|x64.ActiveCfg = Debug|x86 + {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Debug|x86.ActiveCfg = Debug|x86 + {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Debug|x86.Build.0 = Debug|x86 + {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Release|Any CPU.ActiveCfg = Release|x86 + {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Release|ARM64.ActiveCfg = Release|x86 + {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Release|x64.ActiveCfg = Release|x86 + {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Release|x86.ActiveCfg = Release|x86 + {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Release|x86.Build.0 = Release|x86 + {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Win7 Debug|Any CPU.ActiveCfg = Debug|x86 + {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Win7 Debug|Any CPU.Build.0 = Debug|x86 + {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Win7 Debug|ARM64.ActiveCfg = Debug|x86 + {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Win7 Debug|ARM64.Build.0 = Debug|x86 + {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Win7 Debug|x64.ActiveCfg = Debug|x86 + {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Win7 Debug|x64.Build.0 = Debug|x86 + {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Win7 Debug|x86.ActiveCfg = Debug|x86 + {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Win7 Debug|x86.Build.0 = Debug|x86 + {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Win7 Release|Any CPU.ActiveCfg = Release|x86 + {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Win7 Release|Any CPU.Build.0 = Release|x86 + {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Win7 Release|ARM64.ActiveCfg = Release|x86 + {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Win7 Release|ARM64.Build.0 = Release|x86 + {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Win7 Release|x64.ActiveCfg = Release|x86 + {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Win7 Release|x64.Build.0 = Release|x86 + {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Win7 Release|x86.ActiveCfg = Release|x86 + {3494E3E2-CB03-4283-B8F8-E1158CDBAF3F}.Win7 Release|x86.Build.0 = Release|x86 + {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Debug|Any CPU.ActiveCfg = Debug|x86 + {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Debug|ARM64.ActiveCfg = Debug|x86 + {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Debug|x64.ActiveCfg = Debug|x86 + {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Debug|x86.ActiveCfg = Debug|x86 + {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Debug|x86.Build.0 = Debug|x86 + {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Release|Any CPU.ActiveCfg = Release|x86 + {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Release|ARM64.ActiveCfg = Release|x86 + {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Release|x64.ActiveCfg = Release|x86 + {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Release|x86.ActiveCfg = Release|x86 + {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Release|x86.Build.0 = Release|x86 + {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Win7 Debug|Any CPU.ActiveCfg = Debug|x86 + {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Win7 Debug|Any CPU.Build.0 = Debug|x86 + {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Win7 Debug|ARM64.ActiveCfg = Debug|x86 + {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Win7 Debug|ARM64.Build.0 = Debug|x86 + {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Win7 Debug|x64.ActiveCfg = Debug|x86 + {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Win7 Debug|x64.Build.0 = Debug|x86 + {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Win7 Debug|x86.ActiveCfg = Debug|x86 + {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Win7 Debug|x86.Build.0 = Debug|x86 + {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Win7 Release|Any CPU.ActiveCfg = Release|x86 + {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Win7 Release|Any CPU.Build.0 = Release|x86 + {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Win7 Release|ARM64.ActiveCfg = Release|x86 + {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Win7 Release|ARM64.Build.0 = Release|x86 + {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Win7 Release|x64.ActiveCfg = Release|x86 + {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Win7 Release|x64.Build.0 = Release|x86 + {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Win7 Release|x86.ActiveCfg = Release|x86 + {352113BF-FB17-4FD4-A47B-7D1013BFB8AE}.Win7 Release|x86.Build.0 = Release|x86 + {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Debug|Any CPU.Build.0 = Debug|Any CPU + {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Debug|ARM64.Build.0 = Debug|Any CPU + {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Debug|x64.ActiveCfg = Debug|Any CPU + {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Debug|x64.Build.0 = Debug|Any CPU + {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Debug|x86.ActiveCfg = Debug|Any CPU + {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Debug|x86.Build.0 = Debug|Any CPU + {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Release|Any CPU.ActiveCfg = Release|Any CPU + {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Release|Any CPU.Build.0 = Release|Any CPU + {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Release|ARM64.ActiveCfg = Release|Any CPU + {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Release|ARM64.Build.0 = Release|Any CPU + {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Release|x64.ActiveCfg = Release|Any CPU + {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Release|x64.Build.0 = Release|Any CPU + {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Release|x86.ActiveCfg = Release|Any CPU + {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Release|x86.Build.0 = Release|Any CPU + {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Win7 Debug|Any CPU.ActiveCfg = Debug|Any CPU + {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Win7 Debug|Any CPU.Build.0 = Debug|Any CPU + {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Win7 Debug|ARM64.ActiveCfg = Debug|Any CPU + {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Win7 Debug|ARM64.Build.0 = Debug|Any CPU + {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Win7 Debug|x64.ActiveCfg = Debug|Any CPU + {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Win7 Debug|x64.Build.0 = Debug|Any CPU + {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Win7 Debug|x86.ActiveCfg = Debug|Any CPU + {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Win7 Debug|x86.Build.0 = Debug|Any CPU + {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Win7 Release|Any CPU.ActiveCfg = Release|Any CPU + {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Win7 Release|Any CPU.Build.0 = Release|Any CPU + {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Win7 Release|ARM64.ActiveCfg = Release|Any CPU + {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Win7 Release|ARM64.Build.0 = Release|Any CPU + {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Win7 Release|x64.ActiveCfg = Release|Any CPU + {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Win7 Release|x64.Build.0 = Release|Any CPU + {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Win7 Release|x86.ActiveCfg = Release|Any CPU + {33C09167-E167-42FB-AECA-5BF6C24C3C40}.Win7 Release|x86.Build.0 = Release|Any CPU + {ABAC8D87-C87B-455C-8340-0A9B0CD9A206}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {ABAC8D87-C87B-455C-8340-0A9B0CD9A206}.Debug|ARM64.ActiveCfg = Debug|Win32 + {ABAC8D87-C87B-455C-8340-0A9B0CD9A206}.Debug|x64.ActiveCfg = Debug|x64 + {ABAC8D87-C87B-455C-8340-0A9B0CD9A206}.Debug|x64.Build.0 = Debug|x64 + {ABAC8D87-C87B-455C-8340-0A9B0CD9A206}.Debug|x86.ActiveCfg = Debug|Win32 + {ABAC8D87-C87B-455C-8340-0A9B0CD9A206}.Debug|x86.Build.0 = Debug|Win32 + {ABAC8D87-C87B-455C-8340-0A9B0CD9A206}.Release|Any CPU.ActiveCfg = Release|Win32 + {ABAC8D87-C87B-455C-8340-0A9B0CD9A206}.Release|ARM64.ActiveCfg = Release|Win32 + {ABAC8D87-C87B-455C-8340-0A9B0CD9A206}.Release|x64.ActiveCfg = Release|x64 + {ABAC8D87-C87B-455C-8340-0A9B0CD9A206}.Release|x64.Build.0 = Release|x64 + {ABAC8D87-C87B-455C-8340-0A9B0CD9A206}.Release|x86.ActiveCfg = Release|Win32 + {ABAC8D87-C87B-455C-8340-0A9B0CD9A206}.Release|x86.Build.0 = Release|Win32 + {ABAC8D87-C87B-455C-8340-0A9B0CD9A206}.Win7 Debug|Any CPU.ActiveCfg = Debug|Win32 + {ABAC8D87-C87B-455C-8340-0A9B0CD9A206}.Win7 Debug|Any CPU.Build.0 = Debug|Win32 + {ABAC8D87-C87B-455C-8340-0A9B0CD9A206}.Win7 Debug|ARM64.ActiveCfg = Debug|Win32 + {ABAC8D87-C87B-455C-8340-0A9B0CD9A206}.Win7 Debug|ARM64.Build.0 = Debug|Win32 + {ABAC8D87-C87B-455C-8340-0A9B0CD9A206}.Win7 Debug|x64.ActiveCfg = Debug|x64 + {ABAC8D87-C87B-455C-8340-0A9B0CD9A206}.Win7 Debug|x64.Build.0 = Debug|x64 + {ABAC8D87-C87B-455C-8340-0A9B0CD9A206}.Win7 Debug|x86.ActiveCfg = Debug|Win32 + {ABAC8D87-C87B-455C-8340-0A9B0CD9A206}.Win7 Debug|x86.Build.0 = Debug|Win32 + {ABAC8D87-C87B-455C-8340-0A9B0CD9A206}.Win7 Release|Any CPU.ActiveCfg = Debug|Win32 + {ABAC8D87-C87B-455C-8340-0A9B0CD9A206}.Win7 Release|Any CPU.Build.0 = Debug|Win32 + {ABAC8D87-C87B-455C-8340-0A9B0CD9A206}.Win7 Release|ARM64.ActiveCfg = Debug|Win32 + {ABAC8D87-C87B-455C-8340-0A9B0CD9A206}.Win7 Release|ARM64.Build.0 = Debug|Win32 + {ABAC8D87-C87B-455C-8340-0A9B0CD9A206}.Win7 Release|x64.ActiveCfg = Release|x64 + {ABAC8D87-C87B-455C-8340-0A9B0CD9A206}.Win7 Release|x64.Build.0 = Release|x64 + {ABAC8D87-C87B-455C-8340-0A9B0CD9A206}.Win7 Release|x86.ActiveCfg = Release|Win32 + {ABAC8D87-C87B-455C-8340-0A9B0CD9A206}.Win7 Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {1267B10C-4298-4F27-ADC5-FE558436C6D4} + EndGlobalSection +EndGlobal