Файл MFC: winctrl4.cpp
(C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ atlmfc \ src \ mfc)
CString CRichEditCtrl::GetSelText() const
{
ASSERT(::IsWindow(m_hWnd));
CHARRANGE cr;
cr.cpMin = cr.cpMax = 0;
::SendMessage(m_hWnd, EM_EXGETSEL, 0, (LPARAM)&cr);
CStringA strText;
LPSTR lpsz=strText.GetBufferSetLength((cr.cpMax - cr.cpMin + 1)*2);
lpsz[0] = NULL;
::SendMessage(m_hWnd, EM_GETSELTEXT, 0, (LPARAM)lpsz);
strText.ReleaseBuffer();
return CString(strText);
}
У меня странная проблема, когда я вызываю это, он возвращает только первый символ выбранной строки. cr
устанавливается правильно, но после ::SendMessage(m_hWnd, EM_GETSELTEXT,...
вся строка отсутствует.
Я видел подобное поведение в моем пользовательском коде из-за проблем WCHAR
(двухбайтовый символ, содержащий ноль в одном байте), когда ожидалось CHAR
. Но это часть MFC / Win32! Возможно ли, что мой файл .rc устанавливает что-то не так? Есть ли для этого стиль создания? Или, поскольку мы создаем CFont для рассматриваемого элемента управления, может что испортить его?