Я реализую функцию печати в большом проекте для печати так называемых гаджетов (полученных из 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?
Для правильной печати необходимо вызвать CPrintDialog, это дает вам DC к принтеру, печать на этом DC точно так же, как печать, на дисплее ОКРУГ КОЛУМБИЯ. Вы также должны настроить различия между координатами экрана и принтера. –