Saltar al contenido principal

Introducción de FlutterEngine::ProcessExternalWindowMessage

Las ventanas externas deben llamar a ProcessExternalWindowMessage para ser tomadas en cuenta en los eventos del ciclo de vida de la aplicación.

Resumen

#

Cuando añades ventanas externas a tu aplicación de Flutter, debes incluirlas en la lógica del ciclo de vida de la aplicación de Windows. Para incluir la ventana, su función WndProc debe invocar FlutterEngine::ProcessExternalWindowMessage.

Quiénes se ven afectados

#

Aplicaciones de Windows creadas con Flutter 3.13 o posterior que abren ventanas que no son de Flutter.

Descripción del cambio

#

La implementación del ciclo de vida de la aplicación en Windows implica escuchar los mensajes de la ventana para actualizar el estado del ciclo de vida. Para que las ventanas adicionales que no son de Flutter afecten al estado del ciclo de vida, deben reenviar sus mensajes de ventana a FlutterEngine::ProcessExternalWindowMessage desde sus funciones WndProc. Esta función devuelve un std::optional<LRESULT>, el cual es std::nullopt cuando se recibe el mensaje pero no se consume. Cuando el resultado devuelto tiene un valor, el mensaje ha sido consumido, y el procesamiento adicional en WndProc debe cesar.

Guía de migración

#

El siguiente procedimiento WndProc de ejemplo invoca FlutterEngine::ProcessExternalWindowMessage:

cpp
LRESULT Window::Messagehandler(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) {
    std::optional<LRESULT> result = flutter_controller_->engine()->ProcessExternalWindowMessage(hwnd, msg, wparam, lparam);
    if (result.has_value()) {
        return *result;
    }
    // Original contents of WndProc...
}

Timeline

#

Introducido en la versión: 3.14.0-3.0.pre
En la versión estable: 3.16

Referencias

#

PRs relevantes: