Visit Mozilla.org

Extraits de code:Trouver les gestionnaires de fenêtres

Un article de MDC.


Lorsque vous travaillez sur des plates-formes Windows, la plupart des APIs et framework ont besoin d'un gestionnaire de fenêtre (type HWND). Puisque Mozilla essaye d'être multi plates-formes, il peut être difficile d'obtenir le gestionnaire dont vous avez besoin.

Voici un exemple simple de code pour obtenir des gestionnaires de fenêtres de Mozilla. Ce code peut être utilisé depuis une application externe ou depuis un composant XPCOM dans une extension.

[modifier] Trouver le gestionnaire de fenêtres

 HWND hContent = 0;

 // Tout d'abord, nous essayons de trouver la fenêtre principale du navigateur
 HWND hFF = ::FindWindowEx(0, 0, "MozillaUIWindowClass", 0);
 if (hFF) {
    // Ensuite, nous descendons à travers une structure fixée
    HWND hTemp;
    hTemp = ::FindWindowEx(hFF, 0, "MozillaWindowClass", 0);
    hTemp = ::FindWindowEx(hTemp, 0, "MozillaWindowClass", 0);

    // Nous supposons avoir ici 1 fenêtre avec des enfants
    // et que celle avec des enfants est celle cherchée
    HWND hChild = ::GetWindow(hTemp, GW_CHILD);
    while (hTemp && !hChild) {
      hTemp = ::GetWindow(hTemp, GW_HWNDNEXT);
      hChild = ::GetWindow(hTemp, GW_CHILD);
    }

    // Avons nous trouvé une fenêtre avec des enfants ?
    // Cet enfant est heureusement la fenêtre de contenu
    if (hTemp) {
      hTemp = ::GetWindow(hTemp, GW_CHILD);
      hContent = ::FindWindowEx(hTemp, 0, "MozillaContentWindowClass", 0);
    }
 }

 // À ce stade, hContent est soit NULL, soit le HWND de la fenêtre de contenu