get_CoreWebView2(webview.GetAddressOf()); if (!webview) { ShowErrorMessage(hWnd, L"Failed to get WebView2 instance."); return E_FAIL; } // Configure WebView settings ComPtr settings; if (SUCCEEDED(webview->get_Settings(&settings))) { settings->put_IsScriptEnabled(TRUE); settings->put_AreDefaultScriptDialogsEnabled(TRUE); settings->put_IsWebMessageEnabled(TRUE); settings->put_AreHostObjectsA"> get_CoreWebView2(webview.GetAddressOf()); if (!webview) { ShowErrorMessage(hWnd, L"Failed to get WebView2 instance."); return E_FAIL; } // Configure WebView settings ComPtr settings; if (SUCCEEDED(webview->get_Settings(&settings))) { settings->put_IsScriptEnabled(TRUE); settings->put_AreDefaultScriptDialogsEnabled(TRUE); settings->put_IsWebMessageEnabled(TRUE); settings->put_AreHostObjectsA"> get_CoreWebView2(webview.GetAddressOf()); if (!webview) { ShowErrorMessage(hWnd, L"Failed to get WebView2 instance."); return E_FAIL; } // Configure WebView settings ComPtr settings; if (SUCCEEDED(webview->get_Settings(&settings))) { settings->put_IsScriptEnabled(TRUE); settings->put_AreDefaultScriptDialogsEnabled(TRUE); settings->put_IsWebMessageEnabled(TRUE); settings->put_AreHostObjectsA">

image.png

// Handle WebView2 controller creation
HRESULT OnControllerCreated(            //
    HWND hWnd,                          //
    HRESULT result,                     //
    ICoreWebView2Controller *controller //
)
{
    if (!controller)
    {
        OutputDebugString(L"Controller is null");
    }
    if (!controller || FAILED(result))
    {
        ShowErrorMessage(hWnd, L"Failed to create WebView2 controller.");
        return E_FAIL;
    }

    webviewController = controller;
    webviewController->get_CoreWebView2(webview.GetAddressOf());

    if (!webview)
    {
        ShowErrorMessage(hWnd, L"Failed to get WebView2 instance.");
        return E_FAIL;
    }

    // Configure WebView settings
    ComPtr<ICoreWebView2Settings> settings;
    if (SUCCEEDED(webview->get_Settings(&settings)))
    {
        settings->put_IsScriptEnabled(TRUE);
        settings->put_AreDefaultScriptDialogsEnabled(TRUE);
        settings->put_IsWebMessageEnabled(TRUE);
        settings->put_AreHostObjectsAllowed(TRUE);
        /* Disable context menu */
        settings->put_AreDefaultContextMenusEnabled(FALSE);
    }

    // Configure virtual host path
    // if (SUCCEEDED(webview->QueryInterface(IID_PPV_ARGS(&webview3))))
    // {
    //     webview3->SetVirtualHostNameToFolderMapping(         //
    //         L"appassets",                                    //
    //         ::LocalAssetsPath.c_str(),                       //
    //         COREWEBVIEW2_HOST_RESOURCE_ACCESS_KIND_DENY_CORS //
    //     );                                                   //
    // }

    // Set transparent background
    if (SUCCEEDED(
            controller->QueryInterface(IID_PPV_ARGS(&webviewController2))))
    {
        COREWEBVIEW2_COLOR backgroundColor = {0, 0, 0, 0};
        webviewController2->put_DefaultBackgroundColor(backgroundColor);
    }

    // Adjust to window size
    RECT bounds;
    GetClientRect(hWnd, &bounds);
    webviewController->put_Bounds(bounds);

    // Navigate to HTML
    HRESULT hr = webview->NavigateToString(HTMLString.c_str());
    if (FAILED(hr))
    {
        ShowErrorMessage(hWnd, L"Failed to navigate to string.");
    }

    // webview->OpenDevToolsWindow();

    return S_OK;
}