Печать на активный принтер без показа CPrintDialog
От: Tuzik[KARAVAN]  
Дата: 11.05.04 08:52
Оценка:
В программе реализована печать на принтер с использованием CPrintDialog.
Т.е. условно гововоря, при нажатии на кнопку появляется окно печати, там выбирается принтер если нужно, количество копий и вперёд. Однако в связи с изменением политики партии и задания на разработку теперь нужно печатать напрямую на текущий принтер без лишних вопросов и промежуточных окон. Т.е. нажали кнопку — получили листик.
Можно ли как то реализовать печать, без отказа от CPrintDialog, но и без его показа на экран? Т.е. я сам выставляю нужные параметры для печати (кол-во копий и необходимый принтер) и вперёд..

Поколупался в MSDN-е, ничего такого пока не нашёл..

Может у кого какие идеи или советы по этому поводу будут?
Re: Печать на активный принтер без показа CPrintDialog
От: kolam http://www.linkedin.com/in/kolam
Дата: 11.05.04 09:49
Оценка:
Здравствуйте, Tuzik[KARAVAN], Вы писали:

TK>Можно ли как то реализовать печать, без отказа от CPrintDialog, но и без его показа на экран? Т.е. я сам выставляю нужные параметры для печати (кол-во копий и необходимый принтер) и вперёд..

Написать своего наследника CPrintDialog, который деактивирует все контролы кроме Cancel и OK. И самостоятельно нажимает на кнопку OK по таймауту. Использовать наследника можно так:
BOOL CMyView::OnPreparePrinting(CPrintInfo* pInfo)
{
    delete pInfo->m_pPD;
    pInfo->m_pPD = new CMyPrintDlg(FALSE, FALSE);
    ASSERT(pInfo->m_pPD);
    
    pInfo->m_pPD->m_pd.nMinPage = 1;
    pInfo->m_pPD->m_pd.nMaxPage = GetDocument()->GetPageCount();
    pInfo->m_pPD->m_pd.hInstance = AfxGetInstanceHandle();
    pInfo->m_pPD->m_pd.lpPrintTemplateName = MAKEINTRESOURCE(IDD_PRINT_DEFAULT);
    // IDD_PRINT_DEFAULT - Это копия ресурса диалога печати из
    // <Visual Studio 6.0>\VC98\Include\PRNSETUP.DLG 
    pInfo->m_pPD->m_pd.Flags |= PD_ENABLEPRINTTEMPLATE;
    
    return DoPreparePrinting(pInfo);
}
kolam
Re[2]: Печать на активный принтер без показа CPrintDialog
От: Tuzik[KARAVAN]  
Дата: 11.05.04 09:54
Оценка:
Здравствуйте, kolam, Вы писали:

K>Написать своего наследника CPrintDialog, который деактивирует все контролы кроме Cancel и OK. И самостоятельно нажимает на кнопку OK по таймауту. Использовать наследника можно так:

K>
K>BOOL CMyView::OnPreparePrinting(CPrintInfo* pInfo)
K>{
K>    delete pInfo->m_pPD;
K>    pInfo->m_pPD = new CMyPrintDlg(FALSE, FALSE);
K>    ASSERT(pInfo->m_pPD);
    
K>    pInfo->m_pPD->m_pd.nMinPage = 1;
K>    pInfo->m_pPD->m_pd.nMaxPage = GetDocument()->GetPageCount();
K>    pInfo->m_pPD->m_pd.hInstance = AfxGetInstanceHandle();
K>    pInfo->m_pPD->m_pd.lpPrintTemplateName = MAKEINTRESOURCE(IDD_PRINT_DEFAULT);
K>    // IDD_PRINT_DEFAULT - Это копия ресурса диалога печати из
K>    // <Visual Studio 6.0>\VC98\Include\PRNSETUP.DLG 
K>    pInfo->m_pPD->m_pd.Flags |= PD_ENABLEPRINTTEMPLATE;
    
K>    return DoPreparePrinting(pInfo);
K>}
K>


Пасиб за ответ. Однаок я уже нашёл способ проще.

TCHAR PrtName[64];

GetDefaultPrinter(PrtName,64);
HDC hDC=CreateDC(NULL,PrtName,NULL,NULL);
......
печать
.......
DeleteDC(hDC);
Re[3]: Печать на активный принтер без показа CPrintDialog
От: kolam http://www.linkedin.com/in/kolam
Дата: 11.05.04 10:00
Оценка:
Здравствуйте, Tuzik[KARAVAN], Вы писали:

TK>Пасиб за ответ. Однаок я уже нашёл способ проще.

Угу, так проще. Но я-то думал, что нужно по-любому без отказа от диалога печати.
kolam
Re[4]: Печать на активный принтер без показа CPrintDialog
От: Tuzik[KARAVAN]  
Дата: 11.05.04 10:08
Оценка:
Здравствуйте, kolam, Вы писали:

K>Угу, так проще. Но я-то думал, что нужно по-любому без отказа от диалога печати.


Ну так оно и задумывалось.. а получилось как всегда..
Re[5]: Печать на активный принтер без показа CPrintDialog
От: Кирпа В.А. Украина  
Дата: 11.05.04 12:29
Оценка:
Здравствуйте, Tuzik[KARAVAN], Вы писали:

TK>Здравствуйте, kolam, Вы писали:


K>>Угу, так проще. Но я-то думал, что нужно по-любому без отказа от диалога печати.


TK>Ну так оно и задумывалось.. а получилось как всегда..



В MFC можно послать сообщение твоему View

pView->SendMessage(WM_COMMAND, ID_FILE_PRINT_DIRECT);

Или почитать вот это в MSDN

CPrintInfo::m_bDirect
Remarks

The framework sets this member to TRUE if the Print dialog box will be bypassed for direct printing; FALSE otherwise. The Print dialog is normally bypassed when you print from the shell or when printing is done using the command ID ID_FILE_PRINT_DIRECT.

You normally don’t change this member, but if you do change it, change it before you call CView::DoPreparePrinting in your override of CView::OnPreparePrinting.
!0xDEAD
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.