CPrintDialog dlg(FALSE,PD_ALLPAGES | PD_COLLATE | PD_NOPAGENUMS | PD_HIDEPRINTTOFILE | PD_NOSELECTION);
if (dlg.GetDefaults()) {
ASSERT(dlg.m_pd.hDC != NULL);
// Вот здесь устанавливаю 2-е копии
dlg.m_pd.nCopies = 2;
DEVMODE* pDevMode = reinterpret_cast<DEVMODE*>(::GlobalLock(dlg.m_pd.hDevMode));
if(port)
pDevMode->dmOrientation = DMORIENT_PORTRAIT,pDevMode->dmOrientation = DMORIENT_PORTRAIT;
else
pDevMode->dmOrientation = DMORIENT_LANDSCAPE,pDevMode->dmOrientation = DMORIENT_LANDSCAPE;
VERIFY(::ResetDC(dlg.m_pd.hDC, pDevMode));
::GlobalUnlock(dlg.m_pd.hDevMode);
}
а печатся только 1 (одна). Может кто знает, что я не так делаю?
Здравствуйте, DBnew, Вы писали:
DB> CPrintDialog dlg(FALSE,PD_ALLPAGES | PD_COLLATE | PD_NOPAGENUMS | PD_HIDEPRINTTOFILE | PD_NOSELECTION);
DB> if (dlg.GetDefaults()) {
DB> ASSERT(dlg.m_pd.hDC != NULL);
DB> // Вот здесь устанавливаю 2-е копии
DB> dlg.m_pd.nCopies = 2;
То что ты здесь устанавливаешь имеет смысл только лишь до вызова DoModal или GetDefaults, т.е собственно до вызова
PrintDlg, ибо CPrintDialog по сути лишь обертка над этой апишной ф-ей. В данном случае у тебя получается примерно следующее —
PRINGDLG pd;
pd.Flags = PD_RETURNDC | PD_RETURNDEFAULT;
PrintDlg(&pd);
pd.nCopies = 2; //не имеет смысда ибо в этой точке DEVMODE уже сформирован
А вот далее, для установки ориентации, ты все делаешь правильно (почти, ибо я не увидел у тебя установку поля dmFields которое указывает системе какое поле структуры DEVMODE имеет смысл, а какое нет), только нужно пойти чуть дальше, и этим же способом установить кол-во копий уже в DEVMODE:
pDevMode->dmFields |= DM_COPIES;
pDevMode->dmCopies = 2;
Здравствуйте, Patalog,
Точно!!! Как это я сам не додумался
Написал теперь так:
CPrintDialog dlg(FALSE,PD_ALLPAGES | PD_COLLATE | PD_NOPAGENUMS | PD_HIDEPRINTTOFILE | PD_NOSELECTION | PD_RETURNDC | PD_RETURNDEFAULT);
if (dlg.GetDefaults()) {
ASSERT(dlg.m_pd.hDC != NULL);
DEVMODE* pDevMode = reinterpret_cast<DEVMODE*>(::GlobalLock(dlg.m_pd.hDevMode));
if(port)
pDevMode->dmOrientation = DMORIENT_PORTRAIT,pDevMode->dmOrientation = DMORIENT_PORTRAIT;
else
pDevMode->dmOrientation = DMORIENT_LANDSCAPE,pDevMode->dmOrientation = DMORIENT_LANDSCAPE;
pDevMode->dmFields |= DM_COPIES;
pDevMode->dmCopies = countPage;
VERIFY(::ResetDC(dlg.m_pd.hDC, pDevMode));
::GlobalUnlock(dlg.m_pd.hDevMode);
}
только всеравно не работае
Здравствуйте, DBnew, Вы писали:
Весьма странно, должно...
А если попробовать
DB>Написал теперь так:
DB>DB> CPrintDialog dlg(FALSE,
PD_ALLPAGES /*| PD_COLLATE*/ | PD_NOPAGENUMS | PD_HIDEPRINTTOFILE | PD_NOSELECTION | PD_RETURNDC /*| PD_RETURNDEFAULT*/);
DB> if (dlg.DoModal()/*GetDefaults()*/) {
DB> ASSERT(dlg.m_pd.hDC != NULL);
DB> DEVMODE* pDevMode = reinterpret_cast<DEVMODE*>(::GlobalLock(dlg.m_pd.hDevMode));
DB> /*if(port)
DB> pDevMode->dmOrientation = DMORIENT_PORTRAIT,pDevMode->dmOrientation = DMORIENT_PORTRAIT;
DB> else
DB> pDevMode->dmOrientation = DMORIENT_LANDSCAPE,pDevMode->dmOrientation = DMORIENT_LANDSCAPE;
DB> pDevMode->dmFields |= DM_COPIES;
DB> pDevMode->dmCopies = countPage;
DB> VERIFY(::ResetDC(dlg.m_pd.hDC, pDevMode));
DB> ::GlobalUnlock(dlg.m_pd.hDevMode);*/
DB> }
DB>
и выставить руками нужное число копий то работает?
(не возбраняется посмотреть в отладчике pDevMode на предмет поставленных ф-ей полей)
+ поэкспериментируй с DEVMODE::dmCollate