2015-05-22 3 views
1

Я реализую функцию печати в большом проекте для печати так называемых гаджетов (полученных из CWnd). В классе Gadget я создал функцию, чтобы сделать его в контексте устройстваMFC PrintWindow (CPaintDC) работает, но PrintWindow (CDC) does not

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 , Когда я на самом деле печатаю это. В обоих случаях вызывается одна и та же функция и единственная вещь, которая отличается тем, что в случае предварительного просмотра -> «CDC * pDC» является объектом «CPaintDC», а в случае фактической печати - объектом «CDC».

Чтобы убедиться, что на самом деле это функция «PrintWindow», что не работает, я добавил еще одну строку кода в функцию [pDC-> Rectangle (...);], которую я вижу в Preview, а также на Бумага.

Я также думал об использовании функции CWnd :: Print или CWnd :: PrintClient, но ни один из них не работает в обоих случаях.

Итак, мой вопрос: что я могу сделать в качестве обходного пути или что может быть причиной, почему рендеринг объекта (производный от CWnd) не работает в CDC, а в CPaintDC?

+0

Для правильной печати необходимо вызвать CPrintDialog, это дает вам DC к принтеру, печать на этом DC точно так же, как печать, на дисплее ОКРУГ КОЛУМБИЯ. Вы также должны настроить различия между координатами экрана и принтера. –

ответ

0

Я только что узнал, что проблема не в CDC/CpaintDC. Это просто не работает для принтеров, которые я тестировал в первую очередь. Я попробовал другой принтер, и он сработал.

Я создал еще один вопрос для «REAL» проблемы MFC Printing with CDC just works on some Printers

1

CPaintDC вызывает CWnd :: BeginPaint при построении и CWnd :: EndPaint при уничтожении, поэтому ручные вызовы на CDC могут работать.

+0

Я сделал: PAINTSTRUCT ps; это-> BeginPaint (&ps); PrintWindow (pDC, PW_CLIENTONLY); это-> EndPaint (&ps); но это не будет работать ... –

Смежные вопросы