МАУ не может получить совместимые точки для работы между выделением текста и диапазоном документов в Internet Explorer

Главная проблема:
Невозможно получить CompareEndpoints, чтобы дать какое-либо значение, кроме «1», при сравнении текстовой области выделенного текста с документной строкой на текущем сайте (отображается в IE).

//Initialize range variables
IUIAutomationTextRange* documentRange = NULL;
IUIAutomationTextRange* selectionRange = NULL;
IUIAutomationTextRangeArray* selectionRangeArray = NULL;

//Get entire text document range
m_pTextPattern->get_DocumentRange(&documentRange);

//Get selection range
m_pTextPattern->GetSelection(&selectionRangeArray);
selectionRangeArray->GetElement(0, &selectionRange);

Диапазоны действительны, а выделенный текст находится внутри диапазона документа. Когда мы пытаемся получить количество ходов / символов, выделенный текст с начала документа / начала сайта, мы получаем только возвращаемое значение 1.

selectionRange->CompareEndpoints(
TextPatternRangeEndpoint::TextPatternRangeEndpoint_Start,
documentRange,
TextPatternRangeEndpoint::TextPatternRangeEndpoint_Start,
&rv);

Ex. сайт:
http://www.cplusplus.com/reference/string/string/

Мы извлекаем текстовый шаблон из узла с именем «string — C ++ Reference». Затем мы получаем диапазон документов всего документа «documentRange», выделяем мышкой некоторый текст и сохраняем этот диапазон в selectionRange ex. «объекты, которые представляют» (выделение текста с сайта … строка 3 под std :: string).

Мы пробовали то же самое для окна блокнота, где compareendpoints возвращали правильное / правильное расстояние между точками textranges.

Пример:

if (SUCCEEDED(hr))
{
IUIAutomationTextRange* documentRange = NULL;
IUIAutomationTextRangeArray* selectionRangeArray = NULL;
IUIAutomationTextRange* selectionRange = NULL;
hr = E_FAIL;

hr = m_pTextPattern->get_DocumentRange(&documentRange);
if (SUCCEEDED(hr) && documentRange != NULL)
{
hr = m_pTextPattern->GetSelection(&selectionRangeArray);
if (SUCCEEDED(hr) && selectionRangeArray != NULL)
{
int length;
hr = selectionRangeArray->get_Length(&length);
if (SUCCEEDED(hr) && length > 0)
{
hr = selectionRangeArray->GetElement(0, &selectionRange);
if (SUCCEEDED(hr) && selectionRange != NULL)
{
hr =  selectionRange->CompareEndpoints(TextPatternRangeEndpoint::TextPatternRangeEndpoint_Start,
documentRange, TextPatternRangeEndpoint::TextPatternRangeEndpoint_Start, &rv);
wprintf(L"getSelectionStart rv: %d\n", rv);
}
}
}
}
if (documentRange != NULL)
{
documentRange->Release();
documentRange = NULL;
}
if (selectionRangeArray != NULL)
{
selectionRangeArray->Release();
selectionRangeArray = NULL;
}
if (selectionRange != NULL)
{
selectionRange->Release();
selectionRange = NULL;
}

}
}

8

Решение

Документы утверждают, что возвращается отрицательное, положительное или нулевое значение. Это не возвращает расстояние обязательно.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]