Простейшая печать/просмотр
От: Аноним  
Дата: 24.10.03 11:08
Оценка:
Сделал простейшее приложение AppWizard-ом на основе CRichEditView. Отображаю простой тектовый файл.
Ширина строк такова, что при печати не помещается на странице. При этом при выводе как на принтер так и в предв. просмотр непоместившаяся строка как-бы переносится на следующую строку. Ставлю фармат "Альбомный" вместо "Книжного".
Строки также "заворачиваются", причем то место, где начинается заворот строки примерно соответствует ширине страницы при ее вертикальном положении (как при Книжном формате). В OnPrint пытаюсь изменить размеры области вывода. Все безуспешно.
Что делать?
Re: Простейшая печать/просмотр
От: Аноним  
Дата: 06.09.05 13:32
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Сделал простейшее приложение AppWizard-ом на основе CRichEditView. Отображаю простой тектовый файл.

А>Ширина строк такова, что при печати не помещается на странице. При этом при выводе как на принтер так и в предв. просмотр непоместившаяся строка как-бы переносится на следующую строку. Ставлю фармат "Альбомный" вместо "Книжного".
А>Строки также "заворачиваются", причем то место, где начинается заворот строки примерно соответствует ширине страницы при ее вертикальном положении (как при Книжном формате). В OnPrint пытаюсь изменить размеры области вывода. Все безуспешно.
А>Что делать?

Столкнулся с этой же проблемой. Помогите, несколько дней бьюсь.
Re[2]: Простейшая печать/просмотр
От: Владимир Беларусь  
Дата: 08.09.05 07:35
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Аноним, Вы писали:


А>>Сделал простейшее приложение AppWizard-ом на основе CRichEditView. Отображаю простой тектовый файл.

А>>Ширина строк такова, что при печати не помещается на странице. При этом при выводе как на принтер так и в предв. просмотр непоместившаяся строка как-бы переносится на следующую строку. Ставлю фармат "Альбомный" вместо "Книжного".
А>>Строки также "заворачиваются", причем то место, где начинается заворот строки примерно соответствует ширине страницы при ее вертикальном положении (как при Книжном формате). В OnPrint пытаюсь изменить размеры области вывода. Все безуспешно.
А>>Что делать?

А>Столкнулся с этой же проблемой. Помогите, несколько дней бьюсь.


Неужели никто не сталкивался? Может у кого есть просто идеи или соображения по этому поводу. Буду рад любой помощи.
Re: Простейшая печать/просмотр
От: Андрей Россия  
Дата: 08.09.05 07:51
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Сделал простейшее приложение AppWizard-ом на основе CRichEditView. Отображаю простой тектовый файл.

А>Ширина строк такова, что при печати не помещается на странице. При этом при выводе как на принтер так и в предв. просмотр непоместившаяся строка как-бы переносится на следующую строку. Ставлю фармат "Альбомный" вместо "Книжного".
А>Строки также "заворачиваются", причем то место, где начинается заворот строки примерно соответствует ширине страницы при ее вертикальном положении (как при Книжном формате). В OnPrint пытаюсь изменить размеры области вывода. Все безуспешно.
А>Что делать?

А как ты пытаешься изменить размеры? Кусок кода приведи
Re[2]: Простейшая печать/просмотр
От: Владимир Беларусь  
Дата: 08.09.05 10:29
Оценка:
Здравствуйте, Андрей, Вы писали:

А>А как ты пытаешься изменить размеры? Кусок кода приведи


Спасибо что отозвались.

Вот кусок:
class CChildView : public CRichEditView
..............................................



void CChildView::OnInitialUpdate()
{
    CRichEditView::OnInitialUpdate();

    SetMargins(CRect(720, 720, 720, 720));

    PRINTDLG pd;
    pd.lStructSize=(DWORD)sizeof(PRINTDLG);
    BOOL bRet=AfxGetApp()->GetPrinterDeviceDefaults(&pd);
    if(bRet)
    {
        DEVMODE FAR *pDevMode=(DEVMODE FAR *)::GlobalLock(pd.hDevMode);
        pDevMode->dmOrientation=DMORIENT_LANDSCAPE;
        pDevMode->dmPaperSize=DMPAPER_A4;
        pDevMode->dmDuplex=DMDUP_VERTICAL;
        ::GlobalUnlock(pd.hDevMode);
    }

................................
}



А в итоге на предпросмотре получаем следующее:

Скрин ~80К Хочется растянуть текст на всю ширину страницы.

Переводов строк в текстк нет. Весь текст сплошнеком. И видно что внизу верхушка следующей строки видна.
Вот не могу понять из-за чего. Как настроить грамотно печать и предпросмотр?
Re[3]: Простейшая печать/просмотр
От: Андрей Россия  
Дата: 08.09.05 10:35
Оценка:
Здравствуйте, Владимир, Вы писали:

skip

С CRichEditView не работал
Так что вряд ли чем-то помогу

Но я бы попробовал переопределить OnPrint и там менять CPrintInfo::m_rectDraw — вдруг поможет?
Re[4]: Простейшая печать/просмотр
От: Андрей Россия  
Дата: 08.09.05 10:44
Оценка:
Здравствуйте, Андрей, Вы писали:

skip

Кстати, MSDN еще рекомендует вызвать метод WrapChanged() после изменения границ — может, это поможет
Re: Простейшая печать/просмотр
От: Carc Россия http://www.amlpages.com/home.php
Дата: 09.09.05 05:43
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Сделал простейшее приложение AppWizard-ом на основе CRichEditView. Отображаю простой тектовый файл.

А>Ширина строк такова, что при печати не помещается на странице. При этом при выводе как на принтер так и в предв. просмотр непоместившаяся строка как-бы переносится на следующую строку. Ставлю фармат "Альбомный" вместо "Книжного".
А>Строки также "заворачиваются", причем то место, где начинается заворот строки примерно соответствует ширине страницы при ее вертикальном положении (как при Книжном формате). В OnPrint пытаюсь изменить размеры области вывода. Все безуспешно.
А>Что делать?
1) Код печати в студию...
2) RichEdit 1.0 или выше?
Aml Pages Home
Re[2]: Простейшая печать/просмотр
От: Владимир Беларусь  
Дата: 09.09.05 08:02
Оценка:
Здравствуйте, Carc, Вы писали:

C>1) Код печати в студию...

C>2) RichEdit 1.0 или выше?

Первое сообщение было не мое. Но я столкнулся с такой же проблемой.
RichEdit версии 2.0.
Мне подсказали поковырять OnPaint. Но ни вызов SetMargins ни установка m_rectDraw структуры CPrintInfo не помогает.

Пробовал так:
CRect rectMargins(720, 720, 720, 720);
SetMargins(rectMargins);
this->m_nWordWrap=WrapToTargetDevice;
this->WrapChanged();

И так:
pInfo->m_rectDraw.SetRect(0,0, pDC->GetDeviceCaps(HORZRES),pDC->GetDeviceCaps(VERTRES));

Все равно текст не располагается по ширине.

Подскажите что я не так делаю. Я скорее всего не правильно понимаю смысл этих функций.
Re[3]: Простейшая печать/просмотр
От: Carc Россия http://www.amlpages.com/home.php
Дата: 10.09.05 16:43
Оценка:
Здравствуйте, Владимир, Вы писали:

B>>...


BOOL CBaseRichEditView::OnPreparePrinting(CPrintInfo *pInfo)
{
    CDC            dc;
    
    CRect        page;
    FORMATRANGE    fmtRange;
    long        lLineWidth;
    int            last = 0;
    
    if (!pInfo->m_bPreview) {//коли печать
        AfxGetApp()->CreatePrinterDC(dc);
        PRINTDLG printdlg;
        AfxGetApp()->GetPrinterDeviceDefaults(&printdlg);
        AfxGetApp()->SelectPrinter(printdlg.hDevNames,printdlg.hDevMode);
        AfxGetApp()->CreatePrinterDC(dc);
    }
    if (pInfo->m_bPreview) {//коли просмотр
        const BOOL b=dc.CreateCompatibleDC(GetDC());    
        ASSERT(b);
    }
    
    if (!dc.m_hDC)
    {
        TRACE("Нет DC принтера\n");
        return FALSE;
    }
    dc.SaveDC();

    pInfo->SetMaxPage(0);
    // размер страницы в твипах
    CRichEditCtrl& m_Control=GetRichEditCtrl();

    if (!pInfo->m_bPreview) {
        page.left = 0;
        page.top = 0;
        page.right = ::MulDiv(dc.GetDeviceCaps(PHYSICALWIDTH), 1440, dc.GetDeviceCaps(LOGPIXELSX));
        page.bottom = ::MulDiv(dc.GetDeviceCaps(PHYSICALHEIGHT), 1440, dc.GetDeviceCaps(LOGPIXELSY));
    }
    else {
        m_Control.GetRect(page);
        page.left = 0;
        page.top = 0;
        page=GetPageRect();
    }
    //ширина строки
    lLineWidth = ::MulDiv(dc.GetDeviceCaps(PHYSICALWIDTH), 1440, dc.GetDeviceCaps(LOGPIXELSX));    
    
    fmtRange.hdc = dc.m_hDC;
    fmtRange.hdcTarget = dc.m_hAttribDC;
    fmtRange.rc = page;
    fmtRange.rcPage = page;
    
    // ставим ширину страницы    

    m_Control.SetTargetDevice(dc, lLineWidth);
    int nTextLen=m_Control.GetTextLength();
    if (GetModuleHandle("riched20.dll")) {//случаем мы не во втором ли ричэдит
#ifndef EM_GETTEXTLENGTHEX//на всяк случай, для вин98 - не определено сообщение
    const UINT  EM_GETTEXTLENGTHEX=(WM_USER + 95);
#endif          //для рича 2 и выше
        GETTEXTLENGTHEX get_text_len;
        get_text_len.flags=GTL_DEFAULT|GTL_PRECISE|GTL_USECRLF;
        get_text_len.codepage=CP_ACP;

        nTextLen=m_Control.SendMessage(EM_GETTEXTLENGTHEX,(WPARAM)&get_text_len);
    }
    else {//получаем длину текста для рича 1.0
        nTextLen=m_Control.GetTextLength();
    }
    int repeat_count=0;
    int prev_last=0;//чтобы не влететь в бесконечный цикл, тут у меня так толком и не получилось разобраться
    while (last < nTextLen)
    {
        fmtRange.chrg.cpMin = last;
        fmtRange.chrg.cpMax = -1;
        // выталкиваем данные на DC
                last = m_Control.FormatRange(&fmtRange, pInfo->m_bPreview);    
        fmtRange.chrg.cpMax = last;
        pInfo->SetMaxPage(pInfo->GetMaxPage() + 1);
        
        if (last==prev_last) {
            repeat_count++;
        }
        else {
            prev_last=last;
            repeat_count=0;
        }
        if (repeat_count>0) break;
        
    }
    m_Control.FormatRange(NULL, pInfo->m_bPreview);    //отпускаем DC
    
    dc.RestoreDC(-1);
    dc.DeleteDC();
    
    const BOOL b=DoPreparePrinting(pInfo);
    return b;
    

}
Aml Pages Home
Re[4]: Простейшая печать/просмотр
От: Владимир Беларусь  
Дата: 12.09.05 06:24
Оценка:
Здравствуйте, Carc, Вы писали:

C>
SKIP....
C>

К сожалению проблема осталась прежняя. Может это проблема самого контрола richedit20? Понять бы хотя бы отчего так получается.
Re[5]: Простейшая печать/просмотр
От: Владимир Беларусь  
Дата: 12.09.05 08:16
Оценка:
Здравствуйте, Владимир, Вы писали:

В>К сожалению проблема осталась прежняя. Может это проблема самого контрола richedit20? Понять бы хотя бы отчего так получается.

Попробовал использовать RichEdit 4.1. Та же беда.
Что можно придумать еще?
Re[6]: Простейшая печать/просмотр
От: Carc Россия http://www.amlpages.com/home.php
Дата: 16.09.05 18:21
Оценка:
Здравствуйте, Владимир, Вы писали:

В>Здравствуйте, Владимир, Вы писали:


В>>К сожалению проблема осталась прежняя. Может это проблема самого контрола richedit20? Понять бы хотя бы отчего так получается.

В>Попробовал использовать RichEdit 4.1. Та же беда.
В>Что можно придумать еще?
Аналогично, столкнулся опять же с той же проблемой... опять прошу код печати в студию
Что можно придумать без кода
Aml Pages Home
Re[7]: Простейшая печать/просмотр
От: Аноним  
Дата: 19.09.05 08:20
Оценка:
Сколько мучений... А всего-то надо сделать так:

void CVkt5Easy2View::OnInitialUpdate()
{
CRichEditView::OnInitialUpdate();
m_nWordWrap = WrapNone;

WrapChanged();
Re: Простейшая печать/просмотр
От: goz  
Дата: 19.09.05 08:23
Оценка:
Сколько мучений... А всего-то надо сделать так:

void YourViewClass::OnInitialUpdate()
{
CRichEditView::OnInitialUpdate();

.......................
m_nWordWrap = WrapNone;

WrapChanged();
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.