Я реализую функцию печати в большом проекте для печати так называемых гаджетов (полученных из 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?