Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Печать документа  (Прочитано 16610 раз)
0 Пользователей и 1 Гость смотрят эту тему.
SSW
Гость
« : 14-11-2003 08:39 » 

VC++ 6.0 ,  Windows, MFC
Програму делаю на основе диалога. После заполнения определенных форм хочу данные вывисти на печать таким образом как...(что то типа пробной страницы, после установки принтера). Интересует как и куда можно вставить какойто рисунок, текст (чтоб пользователь не видел) и вывисти его на печать.
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #1 : 14-11-2003 09:17 » 

Ну... лучше всего было бы сразу тебе код дать, дык нету его. Я делал всё только с View классами. А с диалогом в принципе тоже самое. Сначала открываешь принтер, получаешь инфу о разрешении,  потом создаёшь девайс контекст и "рисуешь" в него всё что надо с помощью GDI функций. Ну это так в общем теория, а поконкретней конечно там много нюансов, типа сколько у тебя страниц? с картинками? только текст? какой шрифт? и тд. Так что начинай - по ходу пьесы поможем  Ага
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #2 : 14-11-2003 10:21 » 

SSW, рисунки храни в ресурсах программы, пользователь их не увидит.
Для печати используется CPrinterDC (или CPrintDC - точно не помню), работать как с CDC точно.
Записан

А птичку нашу прошу не обижать!!!
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #3 : 14-11-2003 12:26 » 

Код:
// get the default printer
CPrintDialog dlg(FALSE);
dlg.GetDefaults();

// is a default printer set up?
HDC hdcPrinter = dlg.GetPrinterDC();
if (hdcPrinter == NULL)
{
   MessageBox(_T("Buy a printer!"));
}
else
{
   // create a CDC and attach it to the default printer
   CDC dcPrinter;
   dcPrinter.Attach(hdcPrinter);

   // call StartDoc() to begin printing
   DOCINFO docinfo;
   memset(&docinfo, 0, sizeof(docinfo));
   docinfo.cbSize = sizeof(docinfo);
   docinfo.lpszDocName = _T("CDC::StartDoc() Code Fragment");

   // if it fails, complain and exit gracefully
   if (dcPrinter.StartDoc(&docinfo) < 0)
   {
      MessageBox(_T("Printer wouldn't initalize"));
   }
   else
   {
      // start a page
      if (dcPrinter.StartPage() < 0)
      {
         MessageBox(_T("Could not start page"));
         dcPrinter.AbortDoc();
      }
      else
      {
         // actually do some printing
         CGdiObject* pOldFont = dcPrinter.SelectStockObject(SYSTEM_FONT);

         dcPrinter.TextOut(50, 50, _T("Hello World!"), 12);

         dcPrinter.EndPage();
         dcPrinter.EndDoc();
         dcPrinter.SelectObject(pOldFont);
      }
   }
}


« Последнее редактирование: 12-07-2007 17:56 от Алексей1153++ » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
SSW
Гость
« Ответ #4 : 17-12-2003 14:22 » 

Извините за безтактность, есть вопросы.
Для вывода на печать, я так понимаю, надо нарисовать или написать в девайс контекст. А потом выводить на печать. Как его пользовать?
Как можно изменить шрифт или его размер?
Как нарисовать линию или прямоугольник?
Записан
Lex
Специалист

ru
Offline Offline

WWW
« Ответ #5 : 17-12-2003 15:08 » 

SSW, точно так же как и на экран. Только советую обратить внимание как он координаты считает и в чем. Смотри CDC::SetMapMode в MSDN
Записан

Megabyte be with you!
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #6 : 17-12-2003 15:09 » 

Цитата

Извините за безтактность

-  :?:

какое? если есть вопросы, их надоспрашивать, для того мы и.

 :arrow:

Цитата

Для вывода на печать, я так понимаю, надо нарисовать или написать в девайс контекст. А потом выводить на печать. Как его пользовать?


пользовать функцию
CDC* GetDC()
 объектов, на которые рисовать надо.(как для принтера - не знаю, но наверное тоже несложно. Там только с разрешением будет засада)


Цитата

Как можно изменить шрифт или его размер?


- не знаю  Жаль

Как нарисовать линию или прямоугольник?

//линия (x1,y1)-(x2,y2)
CDC* wndDC=GetDC();
CPen newPen(PS_SOLID,1,RGB(R,G,B));
CPen *OldPen=wndDC->SelectObject(&newPen);
wndDC->MoveTo(X1,Y1);
wndDC->LineTo(X2,Y2);
wndDC->SelectObject(OldPen);
//прямоугольник
CBrush *OldBrush=wndDC->SelectObject(&TempBrush);
CPen *OldPen=wndDC->SelectObject(&TempPen);
wndDC->Rectangle(x1,y1,x2,y2);   
wndDC->SelectObject(OldBrush);
wndDC->SelectObject(OldPen);

ReleaseDC(wndDC);
Записан

Lex
Специалист

ru
Offline Offline

WWW
« Ответ #7 : 17-12-2003 15:12 » 

Алексей1153, не путай его. GetDC() делать не надо. У него уже есть dc принтера, вот им и надо пользоваться.
Все возможные функции рисования есть в MSDN в разделе CDC class members. Ага
Записан

Megabyte be with you!
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #8 : 17-12-2003 15:26 » 

SSW, повнимательней смотри в моём примере строчку:

dcPrinter.TextOut(50, 50, _T("Hello World!"), 12);

Это вывод текста.   Ага

По аналогии на этом месте всё что написал Алексей1153, только вместо wndDC-> пиши dcPrinter.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
SSW
Гость
« Ответ #9 : 18-12-2003 13:02 » 

Цитата: Джон
SSW, повнимательней смотри в моём примере строчку:

dcPrinter.TextOut(50, 50, _T("Hello World!"), 12);

Это вывод текста.   Ага

По аналогии на этом месте всё что написал Алексей1153, только вместо wndDC-> пиши dcPrinter.



Цитата

dcPrinter.TextOut(50, 50, _T("Hello World!"), 12);

dcPrinter.TextOut( далее в скобках :
 
1 это координата X
2  координата Y
3 текст
4 количество символов    );

А прямоугольники и лини ПЕЧАТАЕТ.
Токо вот с шрифтами проблема...
Записан
Lex
Специалист

ru
Offline Offline

WWW
« Ответ #10 : 18-12-2003 13:49 » 

SSW, В чем проблема с шрифтами? Не печатает или печатает, но не так?
Кстати не все шрифты можно просто так печатать.
Записан

Megabyte be with you!
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #11 : 18-12-2003 14:27 » 

SSW,  Шрифт задаётся здесь. Всё абсолютно аналогично какой-нить OnPaint()

CGdiObject* pOldFont = dcPrinter.SelectStockObject(SYSTEM_FONT);
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Greyer
Гость
« Ответ #12 : 19-12-2003 08:23 » 

Цитата: SSW

Токо вот с шрифтами проблема...


                //твой фонт    
                CFont font;
   LOGFONT logfont;
   memset(&logfont,0,sizeof(LOGFONT));
   logfont.lfWeight = FW_NORMAL;
   logfont.lfHeight=-MulDiv(14, pDC->GetDeviceCaps(LOGPIXELSY), 72);
   logfont.lfCharSet=RUSSIAN_CHARSET;
   logfont.lfUnderline = FALSE;
   logfont.lfItalic = FALSE;
   logfont.lfOutPrecision=OUT_TT_PRECIS;
   logfont.lfPitchAndFamily=FF_ROMAN;
   logfont.lfQuality=DEFAULT_QUALITY;
   strcpy(logfont.lfFaceName,"Arial");
   font.CreateFontIndirect(&logfont);
   CFont* pOldFont = pDC->SelectObject(&Font);
   ...
   //после использования твоего возвращаем старый на место
   pDC->SelectObject(&OldFont);

хотя кажись всё это есть в MSDNе
Записан
SSW
Гость
« Ответ #13 : 19-12-2003 14:06 » new

Ok.  Спасибо, все работает!
САПАСИБО всем.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines