WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  Печать миллиметровки?

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   Печать миллиметровки?
penguin_fam опубликован 30-01-2002 23:20 MSK   Click Here to See the Profile for penguin_fam   Click Here to Email penguin_fam  
Люди, помогите советом, как на контексте принтера напечатать миллиметровую (или хотя бы сантиметровую) сетку в реальном масштабе. Ну чтобы по линейке можно было мерить.
Thanks.
SUnteXx опубликован 31-01-2002 12:19 MSK     Click Here to See the Profile for SUnteXx  Click Here to Email SUnteXx     

HDC принтера такое же, как и HDC окна, т.е. на том и том можно рисовать, причем одинаково! Т.е.
if (PrintDlg(&pd))
{
HDC hDC = pd.hDC;
...
HPEN hPen;
hPen = CreatePen(PS_SOLID, 1, 0); // создаем перо с черным цветом толщиной в один пиксель
HPEN hpenOld = (HPEN)SelectObject(hDC, hPen);
MoveTo(...);
LineTo(...);
...
}

Приблизительно вот так! О подробностях смотри в MSDN'е!

ADK опубликован 31-01-2002 06:10 MSK     Click Here to See the Profile for ADK  Click Here to Email ADK     
Рисовать-то можно, но нужно включить соответствующий режим преобразования координат virtual int SetMapMode( int nMapMode); А вообще-то это часто описывается в к нижках по программингу.
penguin_fam опубликован 31-01-2002 18:09 MSK     Click Here to See the Profile for penguin_fam  Click Here to Email penguin_fam     
Спасибо, попробую однако.
Flex Ferrum опубликован 31-01-2002 21:44 MSK     Click Here to See the Profile for Flex Ferrum  Click Here to Email Flex Ferrum     
Режимы преобразования - MM_LOMETRIC (0.1 мм на пиксель), MM_HIMETRIC (0.01 мм на пиксель)
penguin_fam опубликован 31-01-2002 22:47 MSK     Click Here to See the Profile for penguin_fam  Click Here to Email penguin_fam     
Вот кусок кода и он не работает.
Подскажите 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();

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.