есть мой контрол на базе HTMLayout (у того div'а где юзеру надо выбирать behavior htmlarea стоит, текст выбирается без проблем)
у этого него надо получать тот текст что выбрал юзер.делаю так:
(в messages-list и форматирование используется и графика вставляется,etc)
element l_root(element::root_element(m_hWnd));
element l_messages(l_root.get_element_by_id(L"messages-list"));
TEXT_EDIT_SELECTION_PARAMS tsel_params;
::HTMLayoutCallBehaviorMethod(l_messages,&tsel_params);
TEXT_VALUE_PARAMS tvalue_params;
::HTMLayoutCallBehaviorMethod(l_messages,&tvalue_params);
и использую tsel_params.selection_begin/end для копирования текста из
tvalue_params.text
std::wstring result;
for (UINT i=tsel_params.selection_start;i<tsel_params.selection_end;i++)
{
wchar_t ch=*(tvalue_params.text+i);
//safeguard for special formatting sometimes inserted by HTMLayout
if (ch>=L' ')
{
result+=ch;
}
}
проблем две:
1)selection_end может быть больше selection_begin(если юзер выбирал с конца)-я просто переставлю местами end и begin.Правильно?
2)периодически selection_begin/end возврающают значения с отклонением в несколько символов, если одна-две строки текста-то все правильно-иначе-периодически едет.
---
Dmitriy Kazimirov,
C++/C# Developer,
dkazimirov at issart.com
http://www.issart.com
... << RSDN@Home 1.2.0 alpha rev. 685>