Уважаемые коллеги, как управлять или зафиксировать масштабирование в СRrichEditCtrl. Заранее большое спасибо.
Здравствуйте, 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);
}
фиксить никак. Просто при загрузке текста ставишь заново.
Исправлено форматирование текста. Удалено избыточное цитирование. — 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 полным отчётом.
Благодарю за помощь.
Убедительная просьба — использовать коды форматирования при вставке текстов программ и следить за объемом цитирования.
[ posted via RSDN@Home 1.1.4 stable SR1 r568, accompanied by Iron Maiden — Run To The Hills ]
Здравствуйте, 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 );
}
Исправлено форматирование текста. Удалено избыточное цитирование. — 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 возвращает меньшее значение, чем если бы я печатал тот же текст из под стандартного вида. Может быть нужно что то ещё инициализировать?
Следующее нарушение правил форума приведет к временному ограничению Ваших свобод на форумах RSDN.
[ posted via RSDN@Home 1.1.4 stable SR1 r568, accompanied by silence ]
Здравствуйте, Аноним, Вы писали:
А>Про ES_MULTILINE забыл
я же говорил
код неправильно считает страницы в верхних версиях, посмотрите на код который я привел выше...
не ахти конечно но это лучше чем 50 чистых листов.
Подробно я тогда не успел все же разобраться, а сейчас уже времени на это нет. Если у кого руки дойдут стучать в мыло обязательно !