СRrichEditCtrl
От: garish  
Дата: 09.09.05 12:20
Оценка:
Уважаемые коллеги, как управлять или зафиксировать масштабирование в СRrichEditCtrl. Заранее большое спасибо.
Re: СRrichEditCtrl
От: Carc Россия http://www.amlpages.com/home.php
Дата: 10.09.05 16:32
Оценка:
Здравствуйте, garish, Вы писали:

G>Уважаемые коллеги, как управлять или зафиксировать масштабирование в СRrichEditCtrl. Заранее большое спасибо.


static
void GetZoomParams(
    WPARAM& wParam
    ,LPARAM& lParam
    , const UINT Percent)
{
    
    if (100!=Percent) {
        lParam=64;
    }
    else {
        lParam=0;
    }
    wParam=(Percent*lParam)/100;
}
BOOL SetZoom(HWND hwndRich, const UINT nPercent) {
    WPARAM wParam=0;
    LPARAM lParam=0;
    GetZoomParams(wParam,lParam,nPercent);
#ifndef EM_SETZOOM
    ASSERT(WM_USER==0x0400);
    const UINT EM_SETZOOM=(WM_USER+225);
#endif
     return SendMessage(hwndRich,EM_SETZOOM,wParam,lParam);
}


фиксить никак. Просто при загрузке текста ставишь заново.
Aml Pages Home
Re[2]: СRichEditCtrl
От: garish  
Дата: 13.09.05 08:52
Оценка:
Исправлено форматирование текста. Удалено избыточное цитирование. — SchweinDeBurg

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

C>фиксить никак. Просто при загрузке текста ставишь заново.


Спасибо за подсказку, ну а зафиксировать (Ctrl + колесо) наверное так:

BOOL CMainView::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
   if (nFlags != MK_CONTROL)
   {
      return CRichEditView::OnMouseWheel(nFlags, zDelta, pt);
   }
   return TRUE;
}

Ну и очередной вопрос! Кто ни будь, сталкивался с такой задачей…

Имеется вид на базе CRichEditView в который вываливается мини-отчет. На печать же необходимо вывести полный отчёт. Перегружать (мини отчёт на полный) в момент подготовки к печати не целесообразно, так как полный отчёт содержит графику и не хотелось что бы перед будущим юзером моргал экран перед печатью. Необходимо что то вроде подмены на другой CRichEditView который находится в памяти или прикручен к документу this->AddView(pReportView) c полным отчётом.

Благодарю за помощь.
[от модератора]
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 13.09.05 09:06
Оценка:
Убедительная просьба — использовать коды форматирования при вставке текстов программ и следить за объемом цитирования.
[ posted via RSDN@Home 1.1.4 stable SR1 r568, accompanied by Iron Maiden — Run To The Hills ]
- Искренне ваш, Поросенок Пафнутий
Re[3]: СRichEditCtrl
От: Alexeib Япония  
Дата: 13.09.05 09:16
Оценка:
Здравствуйте, garish, Вы писали:

G>Имеется вид на базе CRichEditView в который вываливается мини-отчет. На печать же необходимо вывести полный отчёт. Перегружать (мини отчёт на полный) в момент подготовки к печати не целесообразно, так как полный отчёт содержит графику и не хотелось что бы перед будущим юзером моргал экран перед печатью. Необходимо что то вроде подмены на другой CRichEditView который находится в памяти или прикручен к документу this->AddView(pReportView) c полным отчётом.


G>Благодарю за помощь.


Можно добавлять новый вид в документ, как ты написал, но все же лучше использовать OnPrint, как написано в MSDN:
void CMyView::OnPrint( CDC *pDC, CPrintInfo *pInfo )
{
   // Print headers and/or footers, if desired.
   // Find portion of document corresponding to pInfo->m_nCurPage.
   OnDraw( pDC );
}
Re[4]: СRichEditCtrl
От: garish  
Дата: 14.09.05 06:08
Оценка:
Исправлено форматирование текста. Удалено избыточное цитирование. — SchweinDeBurg

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

A>Можно добавлять новый вид в документ, как ты написал, но все же лучше использовать OnPrint, как написано в MSDN:

A>
A>void CMyView::OnPrint( CDC *pDC, CPrintInfo *pInfo )
A>{
A>   // Print headers and/or footers, if desired.
A>   // Find portion of document corresponding to pInfo->m_nCurPage.
A>   OnDraw( pDC );
A>}
A>


Действительно в OnPrint можно вывести всё что угодно, так как есть указатель на CDC. Но мне нужно придерживаться класса CRichEditView так как уже реализован механизм работы с RTF форматом (загрузка форматированного текста, bitmap-ов и таблиц), кроме того, этот же полный отчёт планируется сохранять как файл (RTF). В связи с этим хотелось бы видеть некое единообразие в сохранённом файле и напечатанном отчёте из программы.
Я создал новый вид CReportView на основе класса CRichEditView и гружу в него полный отчёт. Во всех функциях печати OnPreparePrinting, OnPrepareDC, OnPrint, OnEndPrinting вызываю аналогичные CreportView – да, примерно так

void CMainView::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)
{
(GetDocument()->GetReportView())->OnBeginPrinting(pDC, pInfo);
}

Предварительный просмотр и печать работает, но выводится только первая строка полного отчёта. Попробовал прокачать и другие функции:

void CReportView::OnPrint(CDC* pDC, CPrintInfo* pInfo)
{
    CRect rect_page = this->GetPageRect();
    CRect rect = this->GetPrintRect();
    FORMATRANGE pfr;
    pfr.hdc = pDC->m_hDC;
    pfr.hdcTarget = pDC->m_hDC;
    pfr.rcPage = rect_page;
    pfr.rc = rect;
    this->GetRichEditCtrl().FormatRange(&pfr);
    this->GetRichEditCtrl().DisplayBand(&rect_page);

//    CRichEditView::OnPrint(pDC, pInfo);
}

но эффект тот же. Вся проблема в том, что у меня nIndex = PrintPage(pDC, nIndex, 0xFFFFFFFF) в CRichEditView::OnPrint возвращает меньшее значение, чем если бы я печатал тот же текст из под стандартного вида. Может быть нужно что то ещё инициализировать?
[от модератора]
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 14.09.05 06:23
Оценка:
Следующее нарушение правил форума приведет к временному ограничению Ваших свобод на форумах RSDN.
[ posted via RSDN@Home 1.1.4 stable SR1 r568, accompanied by silence ]
- Искренне ваш, Поросенок Пафнутий
Re[5]: СRichEditCtrl
От: Аноним  
Дата: 14.09.05 07:36
Оценка:
Про ES_MULTILINE забыл
Re[6]: СRichEditCtrl
От: Carc Россия http://www.amlpages.com/home.php
Дата: 16.09.05 18:10
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Про ES_MULTILINE забыл

я же говорил
код неправильно считает страницы в верхних версиях, посмотрите на код который я привел выше...
не ахти конечно но это лучше чем 50 чистых листов.
Подробно я тогда не успел все же разобраться, а сейчас уже времени на это нет. Если у кого руки дойдут стучать в мыло обязательно !
Aml Pages Home
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.