Re: И все-таки: альбомная ориентация при печати :(
От: Magnit Россия  
Дата: 14.02.03 03:12
Оценка:
Здравствуйте, SamiZnaeteKto, Вы писали:

SZK>Доброе время суток

SZK>Перечитал уже весь форум по этому вопросу, но ответа так и не нашел
SZK>Необходимо по умолчанию установить альбомную ориентацию страницы для Print Preview и для собственно печати.
SZK>Суть ответов сводится к следующему:
SZK>1)
SZK>BOOL CMyView::OnPreparePrinting(CPrintInfo* print_info)
SZK>{
SZK> PRINTDLG pd = { 0 };
SZK> pd.lStructSize = sizeof(pd);
SZK> pd.Flags = 0;//PSD_RETURNDEFAULT | PSD_NOWARNING;
SZK> if(PrintDlg(&pd)) {
SZK> DEVMODE* dm = reinterpret_cast<DEVMODE*>(GlobalLock(pd.hDevMode));
SZK> if(dm)
SZK> {
SZK> dm->dmFields = DM_ORIENTATION;
SZK> dm->dmOrientation = DMORIENT_LANDSCAPE;
SZK> GlobalUnlock(pd.hDevMode);
SZK> }
SZK> print_info->m_pPD->m_pd.hDevMode = pd.hDevMode;
SZK> print_info->m_pPD->m_pd.hDevNames = pd.hDevNames;
SZK> if (!print_info->m_pPD->CreatePrinterDC())
SZK> return FALSE;
SZK>
SZK> }
SZK> else
SZK> return FALSE;
SZK> return TRUE;
SZK>}
SZK>немного не То, поскольку перед Preview вызывает диалог выбора принтера, после чего Preview отобрадает все корректно, но если в Preview нажать печать, то опять нужно выбирать принтер Вот если бы певый диалог не появлялся....

SZK>2)

SZK>CMyView::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)
SZK>{
SZK> LPDEVMODE lpDev = pInfo->m_pPD->GetDevMode();
SZK> lpDev->dmOrientation = DMORIENT_LANDSCAPE;
SZK>}
SZK>Тут тоже не без проблем: при первом вызове ориентация-то остается книжная, но если Preview закрыть и тут же вызвать еще раз, то ориентация уже альбомная Так почему же сразу не работает???

SZK>3)

SZK>Предлагают вставлять различный код в CMyApp Или CMyDoc. Но это не подходит, поскольку у приложения несколько видов и каждый печатает по-своему

SZK>Если есть какие идеи — буду очень рад выслушать

SZK>Заранее благодарю


Попробуй так:
BOOL CMyView::OnPreparePrinting(CPrintInfo* pInfo)
{
PRINTDLG dlg;
((CMyApp *)(AfxGetApp()))->GetPrinterDeviceDefaults(&dlg);

LPDEVMODE lp = (LPDEVMODE)::GlobalLock(dlg.hDevMode);
lp->dmOrientation = DMORIENT_LANDSCAPE; //альбомная
lp->dmFields |= DM_ORIENTATION;
::GlobalUnlock(dlg.hDevMode);


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