2015-06-23 3 views
0

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

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
  • Прямоугольник границ, когда я на самом деле Печать

Что разве работать?

  • Gadget не напечатан в некоторых случаях «фактического процесса печати»/«Печать на бумаге».

Так что я пытался напечатать с помощью PDF Creator и через 3 локальных принтеров в моей локальной сети на 2 разных компьютерах Windows (Win7, Win8) с разными результатами (они, кажется, всегда то же самое, так что я не» я думаю, что это какой-то неинициализированный член). Очень странно, что у меня разные результаты на машинах, например, есть один принтер, который работает для ПК A, но не для ПК B.

Я могу сказать вам, что печать просто не работает в моем приложении, так что это не проблема с драйвером. Печать нормальных документов, изображений полностью работает. И, как я уже сказал, Граница всегда печатается.

Что может быть причиной этого? Знаете ли вы какие-либо случаи такого рода проблем?

Подсказка: Как обходной путь Я попытался скопировать гаджет из CPaintDC пользовательского интерфейса напрямую через BitBlt. В этом случае у меня есть та же самая проблема



Чтобы найти вопрос, который я создал проект небольшого теста, чтобы воссоздать ситуацию. Вот исходный код

//Create Members 
CDC pDC; 
HDC hdc; 

//Get Printer/Printer Settings 
LPCSTR buffer = NULL; 
GetDefaultPrinterName(buffer); 
hdc = CreateDC("WINSPOOL", buffer, NULL, NULL); 
pDC.Attach(hdc); 
pDC.m_bPrinting = TRUE; 

//Start Document Printing 
pDC.StartDoc("TEST"); 
pDC.StartPage(); 

//Render Window 
PrintWindow(&pDC,PW_CLIENTONLY); 

//Render Frame Rectangle 
CRect WindowRect; 
GetClientRect(WindowRect); 
WindowRect.MoveToXY(0,0); 
CBrush brush; 
brush.CreateSolidBrush(RGB(0,0,0)); 
pDC.FrameRect(WindowRect, &brush); 

// Finish Printing 
pDC.EndPage(); 
pDC.EndDoc(); 

Я столкнулся с теми же проблемами здесь. Одни и те же принтеры работают на одном ПК. Я думаю, что единственная проблема может быть линией, где я создаю HDC

hdcBuffer = CreateDC("WINSPOOL", buffer, NULL, NULL); 

Я думаю, что этот призыв в связи с «PrintWindow» или «BitBlt» является проблемой.

Или это может быть ошибка MFC?

ответ

0

Это похоже на ошибку MFC. Каким-то образом драйвер принтера не инициализирован правильно. Я попробовал несколько решений, но не смог получить эту работу. Это действительно терпит неудачу в самых простых примерах с разными результатами на Differnt Machines.

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