Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Помогите разобраться в формате RTF


Автор: tuborg 23.8.2007, 16:56
Помогите пожалуйста с форматом 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) все значения оставшиеся после прорисованной ячейки имеют неодинаковый отступ между собой... то плотнее стоят... то разряженее...

Прошу о помощи!  smile 

Автор: The Thing 24.8.2007, 13:23
попробуй почитать здесь:
описание формата RTF
http://www.codenet.ru/progr/formt/rtf1.php

Автор: tuborg 24.8.2007, 13:52
Я описание формата выучил наизусть. Выкачивал его в MSDN. И все мои пляски с бубном соотвесттвует официальному описанию стандарта... но результат получается всё равно не удовлетворительный

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)