Вопрос

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 устанавливает что-то неправильно?Есть ли стиль Create, относящийся к этому?Или, поскольку мы создаем CFont для рассматриваемого элемента управления, можно ли что нафиг это?

Это было полезно?

Решение

Это неправильный исходный код MFC, вы его редактировали?Использование CStringA и LPSTR совершенно неуместно, реальный код использует CString и LPTSTR, чтобы Unicode обрабатывался правильно.Да, как было опубликовано, код будет возвращать только один символ.


Просмотр версии помог.Ошибка описана здесь статья обратной связи. Если у вас нет разумной возможности перейти на VS2008 SP1, вы можете получить свой собственный класс от CRichEditCtrl и заменить функцию.Например:

CString CRichEditCtrlFix::GetSelText() const
{
    ASSERT(::IsWindow(m_hWnd));
    CHARRANGE cr;
    cr.cpMin = cr.cpMax = 0;
    ::SendMessage(m_hWnd, EM_EXGETSEL, 0, (LPARAM)&cr);
    CString strText;
    LPTSTR 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);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top