Функция CRichEditCtrl :: GetLine не работает для символов & lt; 4

В Visual Studio 2015, когда я пытаюсь написать менее 4 символов в Rich Text Box, это дает исключение (ниже приложение)

После отладки мы узнали, что Ensure () вызывает исключение:

int CRichEditCtrl::GetLine(_In_ int nIndex, _Out_writes_to_(nMaxLength, return) LPTSTR lpszBuffer, _In_ int nMaxLength) const
{
ASSERT(::IsWindow(m_hWnd));
ENSURE(sizeof(nMaxLength)<=nMaxLength*sizeof(TCHAR)&&nMaxLength>0);
*(LPINT)lpszBuffer = nMaxLength;
return (int)::SendMessage(m_hWnd, EM_GETLINE, nIndex, (LPARAM)lpszBuffer);
}

Когда мы даем менее 4 символов в Rich Text Box,

sizeof(nMaxLength)<=nMaxLength*sizeof(TCHAR)

в этом случае sizeof (nMaxLength) = 4 и nMaxLength * sizeof (TCHAR) = 3
Итак, 3<4 вызывает исключение.

Теперь мне нужна помощь, каким образом я должен дать менее 4 символов в расширенном текстовом поле, чтобы эта функция работала и не давала исключения.

0

Решение

Конечно, это работает.

Эта функция получает строку. Вы должны предложить буфер, достаточно большой, чтобы запустить содержимое. Наименьший размер буфера, который вам разрешено передавать сообщению, — это размер целого числа (4 байта).

Размер того, что вы получаете, возвращается функцией.

Этот код всегда работает для любой длины

CString strTemp;
nMinLength = min(nLineLength,sizeof(int));
int iLen = m_ItemTextCtrl.GetLine(k, strtemp.GetBuffer(nMinLength), nLineLength);
strTetmp.ReleaseBuffer(iLen);

Передача данных в управление RTF выполняется потоковая передача данных или используя WM_SETTEXT или же SetWindowText

0

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

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

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