опубликован 31-01-2002 22:47 MSK
Вот кусок кода и он не работает.
Подскажите please в чем дело?CWinApp* app = AfxGetApp();
CDC m_dcPrinter;
// Настройки страницы
CPageSetupDialog pageDLG;
PAGESETUPDLG& psd = pageDLG.m_psd;
psd.Flags |= PSD_MARGINS | PSD_INHUNDREDTHSOFMILLIMETERS;
psd.rtMargin.left = 2500;
psd.rtMargin.top = 1000;
psd.rtMargin.right = 1000;
psd.rtMargin.bottom = 1000;
// Настройка принтера
CPrintDialog printDLG(FALSE);
printDLG.m_pd.hDevMode = NULL;
printDLG.m_pd.hDevNames = NULL;
if (!app->GetPrinterDeviceDefaults(&printDLG.m_pd))
{
if (app->DoPrintDialog(&printDLG) != IDOK)
return FALSE;
}
DEVMODE FAR *lpDevMode = (DEVMODE FAR *)::GlobalLock(printDLG.m_pd.hDevMode);
lpDevMode->dmFields = DM_ORIENTATION | DM_PAPERSIZE | DM_PRINTQUALITY;
lpDevMode->dmOrientation = DMORIENT_PORTRAIT;
lpDevMode->dmPaperSize = DMPAPER_A4;
lpDevMode->dmPrintQuality = 300;
::GlobalUnlock(printDLG.m_pd.hDevMode);
// Передача данных
psd.hDevNames = printDLG.m_pd.hDevNames;
psd.hDevMode = printDLG.m_pd.hDevMode;
app->SelectPrinter(psd.hDevNames, psd.hDevMode, FALSE);
// Связывание контекста с принтером
if (printDLG.CreatePrinterDC() == NULL)
return FALSE;
ASSERT(printDLG.m_pd.hDC);
m_dcPrinter.Attach(printDLG.m_pd.hDC);
// Настройка контекста принтера
m_dcPrinter.SetMapMode(MM_LOMETRIC); // Логическая единица 0.1 мм
// Инициализация печати
DOCINFO di;
memset(&di, 0, sizeof(DOCINFO));
di.cbSize = sizeof(DOCINFO);
di.lpszDocName = "";
di.lpszOutput = (LPTSTR)NULL;
di.lpszDatatype = (LPTSTR)NULL;
di.fwType = 0;
m_dcPrinter.StartDoc(&di);
// Новая страница
m_dcPrinter.StartPage();
// в одном месте в MSDN написано, что SetMapMode
// должно вызываться для каждой новой страницы, но тогда у меня ваще ничего не печатает
// Печать
CPen pen;
pen.CreatePen(PS_SOLID, 0, RGB(0,0,0));
CPen *penOld = m_dcPrinter.SelectObject(&pen);
// Т.е.д.б. квадрат 10см*10см - а он НИЧЕГО НЕ ПЕЧАТАЕТ !!!!!!!!!
m_dcPrinter.Rectangle(0, 0, 1000, 1000);
m_dcPrinter.SelectObject(penOld);
DeleteObject(&pen);
// Конец страницы
m_dcPrinter.EndPage();
// Послать на печать
m_dcPrinter.EndDoc();