Wrapper Win32 autour de WebView2 pour affichage HTML embarqué.
Plus de détails...
#include <WebViewPanel.h>
|
| | WebViewPanel (Logger &logger) |
| | Construit un WebViewPanel avec un logger pour les messages d'erreur et d'information.
|
| |
| | ~WebViewPanel () |
| | Destructeur — ferme proprement le WebView et libère les ressources associées.
|
| |
| | WebViewPanel (const WebViewPanel &)=delete |
| | Interdit la copie — chaque instance gère ses propres ressources COM.
|
| |
| WebViewPanel & | operator= (const WebViewPanel &)=delete |
| | Interdit l'affectation — chaque instance gère ses propres ressources COM.
|
| |
| void | create (HWND parentHwnd) |
| | Initialise WebView2 dans une fenêtre Win32 existante.
|
| |
| void | resize () |
| | Redimensionne le WebView pour s'adapter à la fenêtre.
|
| |
| void | navigate (const std::wstring &url) |
| | Navigue vers une URL.
|
| |
| void | navigateToString (const std::wstring &htmlContent) |
| | Injecte du HTML directement.
|
| |
| bool | isInitialized () const |
| | Vérifie si le WebView est prêt.
|
| |
| void | executeScript (const std::wstring &script) |
| | Exécute un script JavaScript dans le contexte de la page chargée.
|
| |
| void | setOnInitialized (std::function< void()> callback) |
| | Définit un callback à appeler une fois l'initialisation terminée.
|
| |
| void | close () |
| | Ferme le WebView et libère les ressources associées.
|
| |
| void | setVirtualHostMapping (const std::wstring &hostname, const std::wstring &folderPath) |
| | Mappe un nom d'hôte virtuel vers un dossier local. Permet de servir des fichiers locaux via https://hostname/...
|
| |
| void | setOnMessageReceived (std::function< void(const std::string &)> callback) |
| | Enregistre le handler des messages JS entrants.
|
| |
|
| void | initializeWebView () |
| | Initialise l'environnement WebView2 de manière asynchrone.
|
| |
| void | onEnvironmentCreated (HRESULT result, ICoreWebView2Environment *env) |
| | Callback déclenché à la fin de la création de l'environnement WebView2.
|
| |
| void | onControllerCreated (HRESULT result, ICoreWebView2Controller *controller) |
| | Callback déclenché à la fin de la création du contrôleur WebView2.
|
| |
| HRESULT | onWebMessageReceived (ICoreWebView2 *sender, ICoreWebView2WebMessageReceivedEventArgs *args) |
| | Callback statique déclenché à la réception d'un message JavaScript.
|
| |
Wrapper Win32 autour de WebView2 pour affichage HTML embarqué.
Responsabilités :
- Initialisation du runtime WebView2
- Gestion du cycle de vie (controller + webview)
- Resize automatique dans une fenêtre Win32
- Navigation (URL / HTML string)
Usage typique :
panel.create(hwndParent);
panel.navigate("https://google.com");
Wrapper Win32 autour de WebView2 pour affichage HTML embarqué.
Definition WebViewPanel.h:29
◆ WebViewPanel() [1/2]
| WebViewPanel::WebViewPanel |
( |
Logger & |
logger | ) |
|
|
explicit |
Construit un WebViewPanel avec un logger pour les messages d'erreur et d'information.
Le logger doit être fourni par le module parent (ex. MainWindow) pour centraliser les logs.
- Paramètres
-
| logger | Référence à un Logger déjà initialisé, utilisé pour journaliser les événements du WebViewPanel. Doit rester valide pendant toute la durée de vie du WebViewPanel. |
◆ ~WebViewPanel()
| WebViewPanel::~WebViewPanel |
( |
| ) |
|
Destructeur — ferme proprement le WebView et libère les ressources associées.
Appelle close() pour s'assurer que le WebView est fermé et que les ressources COM sont libérées. Après destruction, le WebViewPanel ne doit plus être utilisé.
Note : Si la fenêtre parent est détruite avant le WebViewPanel, assurez-vous d'appeler close() manuellement pour éviter les fuites de ressources.
◆ WebViewPanel() [2/2]
Interdit la copie — chaque instance gère ses propres ressources COM.
Chaque WebViewPanel est unique et gère ses propres ressources COM. La copie pourrait entraîner des fuites ou des conflits de ressources. Par conséquent, l'opérateur d'affectation est supprimé pour garantir que chaque instance est non copiable.
- Paramètres
-
| other | L'autre instance de WebViewPanel à copier (non utilisé). |
- Renvoie
- Référence à l'instance actuelle (non utilisée).
◆ close()
| void WebViewPanel::close |
( |
| ) |
|
Ferme le WebView et libère les ressources associées.
Doit être appelé avant la destruction de la fenêtre parent pour éviter les fuites. Après appel, le WebViewPanel ne doit plus être utilisé.
◆ create()
| void WebViewPanel::create |
( |
HWND |
parentHwnd | ) |
|
Initialise WebView2 dans une fenêtre Win32 existante.
- Paramètres
-
| parentHwnd | Handle de la fenêtre parent. |
◆ executeScript()
| void WebViewPanel::executeScript |
( |
const std::wstring & |
script | ) |
|
Exécute un script JavaScript dans le contexte de la page chargée.
Permet d'interagir dynamiquement avec le contenu HTML, par exemple pour manipuler la carte Leaflet ou récupérer des données depuis la page.
Log erreur si le WebView n'est pas encore initialisé ou si l'exécution échoue.
- Paramètres
-
| script | Code JavaScript à exécuter. Doit être une expression valide. Le résultat de l'exécution est ignoré (void). |
◆ initializeWebView()
| void WebViewPanel::initializeWebView |
( |
| ) |
|
|
private |
Initialise l'environnement WebView2 de manière asynchrone.
Lance CreateCoreWebView2EnvironmentWithOptions avec les options par défaut (runtime Evergreen installé sur le système).Le résultat est traité dans onEnvironmentCreated via un callback WRL.
◆ isInitialized()
| bool WebViewPanel::isInitialized |
( |
| ) |
const |
Vérifie si le WebView est prêt.
◆ navigate()
| void WebViewPanel::navigate |
( |
const std::wstring & |
url | ) |
|
◆ navigateToString()
| void WebViewPanel::navigateToString |
( |
const std::wstring & |
htmlContent | ) |
|
Injecte du HTML directement.
◆ onControllerCreated()
| void WebViewPanel::onControllerCreated |
( |
HRESULT |
result, |
|
|
ICoreWebView2Controller * |
controller |
|
) |
| |
|
private |
Callback déclenché à la fin de la création du contrôleur WebView2.
Initialise le contrôleur et la vue, enregistre le handler de messages, redimensionne la vue et notifie l'appelant via m_onInitialized.
- Paramètres
-
| result | Code HRESULT retourné par l'API WebView2. |
| controller | Pointeur vers le contrôleur créé (nullptr en cas d'échec). |
◆ onEnvironmentCreated()
| void WebViewPanel::onEnvironmentCreated |
( |
HRESULT |
result, |
|
|
ICoreWebView2Environment * |
env |
|
) |
| |
|
private |
Callback déclenché à la fin de la création de l'environnement WebView2.
Vérifie que l'environnement est valide puis lance la création du contrôleur.
- Paramètres
-
| result | Code HRESULT retourné par l'API WebView2. |
| env | Pointeur vers l'environnement créé (nullptr en cas d'échec). |
◆ onWebMessageReceived()
| HRESULT WebViewPanel::onWebMessageReceived |
( |
ICoreWebView2 * |
sender, |
|
|
ICoreWebView2WebMessageReceivedEventArgs * |
args |
|
) |
| |
|
private |
Callback statique déclenché à la réception d'un message JavaScript.
Récupère le message UTF-16 envoyé depuis la page web, le convertit en std::string puis l'affiche dans une boîte de dialogue.
- Note
- La conversion wstring → string est naïve (ASCII uniquement). Utiliser WideCharToMultiByte si les messages peuvent contenir de l'Unicode.
- Paramètres
-
| sender | Interface WebView2 émettrice du message. |
| args | Arguments contenant le message brut. |
- Renvoie
- S_OK dans tous les cas (les erreurs sont silencieuses).
◆ operator=()
Interdit l'affectation — chaque instance gère ses propres ressources COM.
Chaque WebViewPanel est unique et gère ses propres ressources COM. La copie pourrait entraîner des fuites ou des conflits de ressources. Par conséquent, l'opérateur d'affectation est supprimé pour garantir que chaque instance est non copiable.
- Paramètres
-
| other | L'autre instance de WebViewPanel à copier (non utilisé). |
- Renvoie
- Référence à l'instance actuelle (non utilisée).
◆ resize()
| void WebViewPanel::resize |
( |
| ) |
|
Redimensionne le WebView pour s'adapter à la fenêtre.
◆ setOnInitialized()
| void WebViewPanel::setOnInitialized |
( |
std::function< void()> |
callback | ) |
|
Définit un callback à appeler une fois l'initialisation terminée.
- Paramètres
-
| callback | Fonction à appeler après initialisation. |
◆ setOnMessageReceived()
| void WebViewPanel::setOnMessageReceived |
( |
std::function< void(const std::string &)> |
callback | ) |
|
Enregistre le handler des messages JS entrants.
Appelé par MainWindow::create() AVANT l'initialisation du WebView. Le callback reçoit le message brut UTF-8 envoyé depuis Leaflet via : window.chrome.webview.postMessage(JSON.stringify({...}))
Exécuté sur le thread UI — accès aux objets Win32 et au modèle sûr. Si non enregistré, les messages JS sont ignorés silencieusement.
- Paramètres
-
| callback | Handler à appeler avec le message JSON en paramètre. |
◆ setVirtualHostMapping()
| void WebViewPanel::setVirtualHostMapping |
( |
const std::wstring & |
hostname, |
|
|
const std::wstring & |
folderPath |
|
) |
| |
Mappe un nom d'hôte virtuel vers un dossier local. Permet de servir des fichiers locaux via https://hostname/...
◆ m_controller
| Microsoft::WRL::ComPtr<ICoreWebView2Controller> WebViewPanel::m_controller |
|
private |
◆ m_isInitialized
| bool WebViewPanel::m_isInitialized = false |
|
private |
◆ m_logger
| Logger& WebViewPanel::m_logger |
|
private |
◆ m_onInitialized
| std::function<void()> WebViewPanel::m_onInitialized |
|
private |
◆ m_onMessageReceived
| std::function<void(const std::string&)> WebViewPanel::m_onMessageReceived |
|
private |
Handler des messages JS. Nullptr si non enregistré.
◆ m_parentHwnd
| HWND WebViewPanel::m_parentHwnd = nullptr |
|
private |
◆ m_webview
| Microsoft::WRL::ComPtr<ICoreWebView2> WebViewPanel::m_webview |
|
private |
La documentation de cette classe a été générée à partir des fichiers suivants :