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

}
else
return FALSE;
return TRUE;
}
немного не То, поскольку перед Preview вызывает диалог выбора принтера, после чего Preview отобрадает все корректно, но если в Preview нажать печать, то опять нужно выбирать принтер Вот если бы певый диалог не появлялся....

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

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

Если есть какие идеи — буду очень рад выслушать
Заранее благодарю
Re: И все-таки: альбомная ориентация при печати :(
От: Admiral Украина  
Дата: 13.02.03 15:16
Оценка: 3 (1)
Здравствуйте, SamiZnaeteKto, Вы писали:

SZK>Перечитал уже весь форум по этому вопросу, но ответа так и не нашел

SZK>Необходимо по умолчанию установить альбомную ориентацию страницы для Print Preview и для собственно печати.
SZK>[]

Не знаю, смотрел ли ты сюда
Автор: Admiral
Дата: 19.12.01
. По идее, тот код можно хоть из InitInstance вызвать.
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...
Пока на собственное сообщение не было ответов, его можно удалить.