interface ICoreWebView2Controller3
interface ICoreWebView2Controller3
: public ICoreWebView2Controller2
A continuation of the ICoreWebView2Controller2 interface.
Summary
Members | Descriptions |
---|---|
add_RasterizationScaleChanged | Add an event handler for the RasterizationScaleChanged event. |
get_BoundsMode | BoundsMode affects how setting the Bounds and RasterizationScale properties work. |
get_RasterizationScale | The rasterization scale for the WebView. |
get_ShouldDetectMonitorScaleChanges | ShouldDetectMonitorScaleChanges property determines whether the WebView attempts to track monitor DPI scale changes. |
put_BoundsMode | Set the BoundsMode property. |
put_RasterizationScale | Set the rasterization scale property. |
put_ShouldDetectMonitorScaleChanges | Set the ShouldDetectMonitorScaleChanges property. |
remove_RasterizationScaleChanged | Remove an event handler previously added with add_RasterizationScaleChanged. |
Applies to
Product | Introduced |
---|---|
WebView2 Win32 | 1.0.774.44 |
WebView2 Win32 Prerelease | 1.0.824 |
Members
add_RasterizationScaleChanged
Add an event handler for the RasterizationScaleChanged event.
public HRESULT add_RasterizationScaleChanged(ICoreWebView2RasterizationScaleChangedEventHandler * eventHandler, EventRegistrationToken * token)
The event is raised when the WebView detects that the monitor DPI scale has changed, ShouldDetectMonitorScaleChanges is true, and the WebView has changed the RasterizationScale property.
CHECK_FAILURE(m_controller3->add_RasterizationScaleChanged(
Callback<ICoreWebView2RasterizationScaleChangedEventHandler>(
[this](ICoreWebView2Controller* sender, IUnknown* args) -> HRESULT {
double rasterizationScale;
CHECK_FAILURE(m_controller3->get_RasterizationScale(&rasterizationScale));
UpdateDocumentTitle(
m_appWindow, L" (RasterizationScale: ", rasterizationScale);
return S_OK;
})
.Get(), &m_rasterizationScaleChangedToken));
get_BoundsMode
BoundsMode affects how setting the Bounds and RasterizationScale properties work.
public HRESULT get_BoundsMode(COREWEBVIEW2_BOUNDS_MODE * boundsMode)
Bounds mode can either be in COREWEBVIEW2_BOUNDS_MODE_USE_RAW_PIXELS mode or COREWEBVIEW2_BOUNDS_MODE_USE_RASTERIZATION_SCALE mode.
When the mode is in COREWEBVIEW2_BOUNDS_MODE_USE_RAW_PIXELS, setting the bounds property will set the size of the WebView in raw screen pixels. Changing the rasterization scale in this mode won't change the raw pixel size of the WebView and will only change the rasterization scale.
When the mode is in COREWEBVIEW2_BOUNDS_MODE_USE_RASTERIZATION_SCALE, setting the bounds property will change the logical size of the WebView which can be described by the following equation:
Logical size * rasterization scale = Raw Pixel size
In this case, changing the rasterization scale will keep the logical size the same and change the raw pixel size.
void ViewComponent::SetBoundsMode(COREWEBVIEW2_BOUNDS_MODE boundsMode)
{
if (m_controller3)
{
m_boundsMode = boundsMode;
CHECK_FAILURE(m_controller3->put_BoundsMode(boundsMode));
ResizeWebView();
}
}
get_RasterizationScale
The rasterization scale for the WebView.
public HRESULT get_RasterizationScale(double * scale)
The rasterization scale is the combination of the monitor DPI scale and text scaling set by the user. This value should be updated when the DPI scale of the app's top level window changes (i.e. monitor DPI scale changes or window changes monitor) or when the text scale factor of the system changes.
case WM_DPICHANGED:
{
m_toolbar.UpdateDpiAndTextScale();
if (auto view = GetComponent<ViewComponent>())
{
view->UpdateDpiAndTextScale();
}
RECT* const newWindowSize = reinterpret_cast<RECT*>(lParam);
SetWindowPos(
hWnd, nullptr, newWindowSize->left, newWindowSize->top,
newWindowSize->right - newWindowSize->left,
newWindowSize->bottom - newWindowSize->top, SWP_NOZORDER | SWP_NOACTIVATE);
return true;
}
break;
if (winrt::try_get_activation_factory<winrt::Windows::UI::ViewManagement::UISettings>())
{
m_uiSettings = winrt::Windows::UI::ViewManagement::UISettings();
m_uiSettings.TextScaleFactorChanged({this, &AppWindow::OnTextScaleChanged});
}
void AppWindow::OnTextScaleChanged(
winrt::Windows::UI::ViewManagement::UISettings const& settings,
winrt::Windows::Foundation::IInspectable const& args)
{
RunAsync(
[this]
{
m_toolbar.UpdateDpiAndTextScale();
if (auto view = GetComponent<ViewComponent>())
{
view->UpdateDpiAndTextScale();
}
});
}
Rasterization scale applies to the WebView content, as well as popups, context menus, scroll bars, and so on. Normal app scaling scenarios should use the ZoomFactor property or SetBoundsAndZoomFactor API which only scale the rendered HTML content and not popups, context menus, scroll bars, and so on.
void ViewComponent::SetRasterizationScale(float additionalScale)
{
if (m_controller3)
{
CHECK_FAILURE(m_controller3->put_ShouldDetectMonitorScaleChanges(FALSE));
m_webviewAdditionalRasterizationScale = additionalScale;
double rasterizationScale =
additionalScale * m_appWindow->GetDpiScale() * m_appWindow->GetTextScale();
CHECK_FAILURE(m_controller3->put_RasterizationScale(rasterizationScale));
}
}
get_ShouldDetectMonitorScaleChanges
ShouldDetectMonitorScaleChanges property determines whether the WebView attempts to track monitor DPI scale changes.
public HRESULT get_ShouldDetectMonitorScaleChanges(BOOL * value)
When true, the WebView will track monitor DPI scale changes, update the RasterizationScale property, and raises RasterizationScaleChanged event. When false, the WebView will not track monitor DPI scale changes, and the app must update the RasterizationScale property itself. RasterizationScaleChanged event will never raise when ShouldDetectMonitorScaleChanges is false. Apps that want to set their own rasterization scale should set this property to false to avoid the WebView2 updating the RasterizationScale property to match the monitor DPI scale.
put_BoundsMode
Set the BoundsMode property.
public HRESULT put_BoundsMode(COREWEBVIEW2_BOUNDS_MODE boundsMode)
put_RasterizationScale
Set the rasterization scale property.
public HRESULT put_RasterizationScale(double scale)
put_ShouldDetectMonitorScaleChanges
Set the ShouldDetectMonitorScaleChanges property.
public HRESULT put_ShouldDetectMonitorScaleChanges(BOOL value)
remove_RasterizationScaleChanged
Remove an event handler previously added with add_RasterizationScaleChanged.
public HRESULT remove_RasterizationScaleChanged(EventRegistrationToken token)