В 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 символов в расширенном текстовом поле, чтобы эта функция работала и не давала исключения.
Конечно, это работает.
Эта функция получает строку. Вы должны предложить буфер, достаточно большой, чтобы запустить содержимое. Наименьший размер буфера, который вам разрешено передавать сообщению, — это размер целого числа (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
Других решений пока нет …