Dans mon extension IE, j'essaie d'obtenir les coordonnées de l'écran d'un élément en C++/MSHTML. De mon IHTMLDocument2, je fais ce qui suit:getBoundingClientRect IHTMLElement2 - Extension IE
IHTMLDocument2:: pDoc->get_all(&pElemColl);
IHTMLElementCollection::pElemColl->item(varID, varIdx, &pElemDisp);
où
_variant_t varID = ("myID", VT_BSTR);
//myID is the tag name of the element I'm trying to get. In this case it it an id of a input field
//I've also tried getting bounded area of div's and textarea
_variant_t varIdx = (0, VT_I4);
puis
IDispatch::pElemDisp->QueryInterface(IID_IHTMLElement, (void**) &pElem);
IHTMLElement::pElem->QueryInterface(IID_IHTMLElement2, (void**) &pElem2);
IHTMLElement2::pElem2->getBoundingClientRect(&childRect);//Defined as IHTMLRect *childRect;
Pour chaque requête que je l'ai fait, je l'ai vérifié la valeur de retour assurant que son S_OK. L'appel à getBoundingClientRect réussit également, c'est-à-dire qu'il renvoie S_OK, mais tous les composants de childRect (c'est-à-dire top, bottom, left, right) renvoient 0. Je ne sais pas ce qui s'est mal passé. Des idées? Editer: J'ai converti les coordonnées que j'obtiens de getBoundingClientRect en coordonnées d'écran. Donc la coordonnée que je reçois pour le coin supérieur gauche correspond au coin en haut à gauche de ma fenêtre IE, et les coordonnées pour le coin inférieur droit sont les mêmes qu'en haut à gauche. Cela arrive pour n'importe quel élément DOM de la page. Par exemple, dans la page "Poser une question" de stackoverflow, si j'essaie d'obtenir des coordonnées de délimitation pour l'identifiant de textbox: wmd-input (la grosse boîte où vous décrivez la question), j'obtiens le même résultat que précédemment.
Est-ce important quand vous l'appelez? Peut-être que le document n'a pas encore eu l'occasion d'être entièrement exposé? – EricLaw
Non, je l'appelle après le chargement complet du document. c'est-à-dire que j'appelle ce morceau de code dans ma fonction OnDocumentComplete() – GotAmye