Здравствуйте, 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);
}