MFC PrintWindow(CPaintDC) работает, но PrintWindow(CDC) нет
Я реализую функцию печати в большом проекте для печати так называемых гаджетов (полученных из CWnd). В классе гаджетов я создал функцию для ее рендеринга в контекст устройства
PrintPageContent(CDC * pDC, const CRect & rContent, int page, int numPages) {
PrintWindow(pDC, PW_CLIENTONLY);
pDC->Rectangle(rContent.left,rContent.top, rContent.right, rContent.bottom);
Чтобы легко отобразить гаджет, я подумал об использовании функции PrintWindow https://msdn.microsoft.com/en-us/library/x51z0shh.aspx
Но это работает только при рендеринге PrintPreview. Когда я на самом деле Печать это не будет. В обоих случаях вызывается одна и та же функция, и единственное, что отличается, заключается в том, что в случае Preview -> "CDC * pDC" является объектом "CPaintDC", а в случае фактической печати - объектом "CDC".
Чтобы быть уверенным, что это действительно функция "PrintWindow", что не сработает, я добавил еще одну строку кода в функцию [pDC->Rectangle(...);], которую я вижу в Preview, а также на бумаге.
Я также думал об использовании функции CWnd::Print или CWnd::PrintClient, но ни один из них не работает в обоих случаях.
Поэтому мой вопрос заключается в том, что я могу сделать в качестве обходного пути или какова может быть причина, по которой рендеринг объекта (производного от CWnd) не будет работать на CDC, но на CPaintDC?
2 ответа
Я только что узнал, что проблема не в CDC/CpaintDC. Это просто не будет работать для принтеров, которые я тестировал в первую очередь. Я попробовал другой принтер, и он работал.
Я создал еще один вопрос для проблемы " НАСТОЯЩАЯ". Печать MFC с CDC работает только на некоторых принтерах.
CPaintDC вызывает CWnd::BeginPaint при построении и CWnd::EndPaint при уничтожении, поэтому ручной вызов их на CDC может сработать.