В моем расширении IE я пытаюсь получить координаты экрана элемента в C++/MSHTML. С моей IHTMLDocument2, я следующее:getBoundingClientRect IHTMLElement2 - расширение IE
IHTMLDocument2:: pDoc->get_all(&pElemColl);
IHTMLElementCollection::pElemColl->item(varID, varIdx, &pElemDisp);
где
_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);
затем
IDispatch::pElemDisp->QueryInterface(IID_IHTMLElement, (void**) &pElem);
IHTMLElement::pElem->QueryInterface(IID_IHTMLElement2, (void**) &pElem2);
IHTMLElement2::pElem2->getBoundingClientRect(&childRect);//Defined as IHTMLRect *childRect;
Для каждого запроса, который я сделал, я проверил возвращаемое значение гарантии того, что его S_OK. Вызов getBoundingClientRect также успешный, т. Е. Возвращает S_OK, но все компоненты childRect (например, сверху, снизу, слева, справа) возвращают 0. Я не ошибаюсь. Есть идеи?
Редактировать: Я преобразовал координаты, которые я получаю из getBoundingClientRect, в координаты экрана. Таким образом, координата, которую я получаю для верхнего левого, соответствует верхнему левому углу моего окна IE, а координаты для нижнего правого то же самое, что и верхний левый. Это происходит для любого элемента DOM на странице. Например, на странице «Задать вопрос» stackoverflow, если я попытаюсь получить ограничивающие координаты для идентификатора текстового поля: wmd-input (большой квадрат, где вы описываете вопрос), я получаю тот же результат, что и выше.
Имеет ли это значение, когда вы это называете? Возможно, у документа не было возможности полностью выложить? – EricLaw
Нет, я вызываю его после того, как документ полностью загружен. т. е. я называю этот фрагмент кода своей функцией OnDocumentComplete() – GotAmye