CRichEditCtrl
От: tuborg Россия  
Дата: 20.08.07 15:51
Оценка:
Помогите пожалуйста с форматом RTF.
На диалоге есть CRichEditCtrl. Туда читаю по-строчно файл (в hex'е). Строка, к примеру, 48 штук WORD значений.
Пытаюсь каждую строку выразить табличной строкой (48 колонок).

Вот мой код:

void CWin_CCHexPad::AddValueFrame(BYTE word_size, BYTE val_len, DWORD* frame_string){
        // val_len      - количество значений в строке и одновременно длина массива frame_string
        // word_size    - размер в байтах одного значения выводимого в одну колонку
        // frame_string - массив прочитанных значений из файла которые надо вывести в табличную строку
    
        char tmp[1024];
    CString val;    // результирующая строка выводимая в CRichEdiCtrl
    DWORD i, value;

        // Начало RTF строки
    val="{\\rtf1{\\fonttbl{\\f0\\fmodern\\fprq1\\fs20{\\*\\fname Courier New;}Courier New CYR;}}{\\colortbl;\\red0\\blue0\\green0;\\red255\\blue255\\green255;\\red128\\green128\\blue255;}";
    val+="\\trgaph10\\intbl\\trautofit1";
    
        for(i=0;i<val_len;i++){                      // val_len к примеру равен 48 (количество значений в строке)
        itoa(600*(i+1), tmp,10);             // ширина ячейки 
        val=val+"\\cellx"+tmp+" ";           // для i=0, "..\\cellx600 "
        val+="\\f0\\fg1\\highlight2 ";       //цвет, подсветка и шрифт выводимого значения в колонку
        sprintf(tmp,"%.4X",frame_string[i]); // Преобразуем i-тое значение из массива в строковый hex-вид
        val=val+tmp+" \\cell";               // закрываем ячейку

    }
    val+="\\row\\par}";                          // закрываем строку
    mViewLimitText+=val.GetLength();
    mView.LimitText(mViewLimitText);             // увеличиваеm LimitText на размер сформированной строки
    

        EDITSTREAM es;                               // заполняем структуру для StreamIN CallBack-функции
        es.dwCookie = (DWORD)&val;
        es.pfnCallback = HexPadStreamInCallback; 

    mView.SetSel(-1,-1);                         // перед выводом помещаем курсор в конец (для режима добавления текста)
    mView.StreamIn(SF_RTF|SFF_SELECTION, es);
}


Что и где я пропустил в описании формата выводимой строки? Беда в том что таблица выводится следующим образом:
1) прорисовываются только 31 ячейка
2) вторая ячейка — пустая
3) все значения оставшиеся после прорисованной ячейки имеют неодинаковый отступ между собой... то плотнее стоят... то разряженее...

Прошу о помощи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.