2015-07-07 3 views
-1

Я пытаюсь читать из богатого текстового поля по строкам в Visual C++, но не знаю, как это сделать. Может ли кто-нибудь дать небольшой пример того, как он работает? Я действительно новичок в визуальной студии и Visual C++. Что я хотел бы сделать, это сохранить каждую строку из текстового поля в строке, используя цикл for. Скажем, в богатом текстовом поле у ​​меня есть: text1 text2 text3 Цикл for будет в значительной степени читать каждую строку, и я буду выполнять другие операции с ним.Visual C++ как читать из богатого текстового поля

ответ

0

Вы не сказали, какое богатое текстовое поле вы используете.

Если вы используете класс .NET RichTextBox, вы можете перебирать его Lines собственности:

array<String^>^ lines = textBox->Lines; 
int count = lines->Length; 

for (int idx = 0; idx < count; ++idx) 
{ 
    // use lines[idx] as needed... 
} 

Если вы используете MFC CRichEditCtrl класс, вы можете назвать его GetLineCount(), LineLength() и GetLine() методы:

int count = textBox.GetLineCount(); 

for (int idx = 0; idx < count; ++idx) 
{ 
    std::basic_string<TCHAR> line; 

    int len = textBox.LineLength(idx); 
    if (len > 0) 
    { 
     line.resize(len+1); 
     len = textBox.GetLine(idx, &line[0], len); 
     line.resize(len); 
    } 

    // use line as needed... 
} 

Если вы используете Rich Edit управления Win32, вы можете отправить его EM_GETLINECOUNT, EM_LINELENGTH И EM_GETLINE сообщения:

int count = SendMessage(hTextBox, EM_GETLINECOUNT, 0, 0); 

for (int idx = 0; idx < count; ++idx) 
{ 
    std::basic_string<TCHAR> line; 

    int len = SendMessage(hTextBox, EM_LINELENGTH, idx, 0); 
    if (len > 0) 
    { 
     line.resize(len+1); 
     *(reinterpret_cast<WORD*>(&line[0])) = (WORD)len; 
     len = SendMessage(hTextBox, EM_GETLINE, idx, reinterpret_cast<LPARAM>(&line[0])); 
     line.resize(len); 
    } 

    // use line as needed... 
} 
+0

Im получаю эту ошибку при попытке добавить извлеченную строку из богатого ящика в файл: двоичный «<<»: ни один оператор не найден, который принимает правый операнд типа «System :: String^'(или нет приемлемого преобразования. Я использую этот файл commad << lines [idx] << endl; – Cata

+0

Я использую поле NET rich, и пример работает, попробовал его с помощью простого окна сообщений, но я получаю эту ошибку при попытке написать ее, как этот «файл << lines [idx] << endl; – Cata

+0

Теперь что мы установили, что вы используете .NET (C++ - CLI?), для оператора 'String ^' не определен оператор '<<', и даже если вы разыщите указатель (который вам нужно будет), оператор '' '' '' '' '' 'определен для значения' String'. Кроме того, такой оператор не будет работать в любом случае, если 'file' не определен как' std :: wofstream' или другой выходной поток 'wchar_t', String' использует символы 'wchar_t'. В этом случае вы можете выполнить итерацию свойства [' Chars [] '] (https://msdn.microsoft.com/en-us/library/system.string.chars.aspx) строки , записывая каждый 'wchar_t' в поток ... –

Смежные вопросы