Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.07.2010, 15:14   #1
reynevan
Пользователь
 
Регистрация: 15.07.2010
Сообщений: 35
Сообщение WinApi С++ не знаю, как подключить принтер

Использую Visual Studio 2008. Как подключить принтер, чтобы потом с помощью функции TextOut вывести строку на печать? Облазил весь инет, нигде ничего внятного найти не могу
reynevan вне форума Ответить с цитированием
Старый 15.07.2010, 17:54   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
EnumPrinters - перечислить принтеры.
OpenPrinter - открыть принтер.
StartDocPrinter - начать задание принтера.
EndDocPrinter - закончить задание принтера.
ClosePrinter - закрыть принтер.
или вот еще цитата:
Цитата:
Windows provides a single type of printer device context that can be used when printing on a dot-matrix printer, ink-jet printer, laser printer, or plotter. An application creates a printer device context by calling the CreateDC function and supplying the appropriate arguments (the name of the printer driver, the name of the printer, the file or device name for the physical output medium, and other initialization data). When an application has finished printing, it deletes the printer device context by calling the DeleteDC function. An application must delete (rather than release) a printer device context; the ReleaseDC function fails when an application attempts to use it to release a printer device context.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 15.07.2010, 17:57   #3
reynevan
Пользователь
 
Регистрация: 15.07.2010
Сообщений: 35
По умолчанию

но ведь кроме этого нужно еще объявить контекст принтера, чтобы его использовать...а в этом главная загвоздка у меня

нашел это http://frolov-lib.ru/books/bsp/v14/ch6_1.htm, но непонятно, как потом использовать

ребят, очень надо, пожалуйста. Если у кого-то есть хоть какие-то идеи или знания, отпишитесь, пожалуйста

Последний раз редактировалось Stilet; 16.07.2010 в 12:19.
reynevan вне форума Ответить с цитированием
Старый 16.07.2010, 08:21   #4
Д'якон
Форумчанин
 
Регистрация: 05.12.2007
Сообщений: 236
По умолчанию

TextOut - это GDI. Открывай объект "принтер" (CreateDC) и рисуй на нем.
Д'якон вне форума Ответить с цитированием
Старый 16.07.2010, 08:48   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,772
По умолчанию

Код:
TCHAR temp[MAX_PATH];
DWORD size = MAX_PATH;
GetDefaultPrinter(temp, &size);

HDC hDC = CreateDC(NULL, temp, NULL, NULL);

if(hDC){
  DOCINFO docinfo;
  docinfo.cbSize          = sizeof(docinfo);
  docinfo.lpszDocName = _T("Simple");
  docinfo.lpszOutput    = NULL:
  docinfo.lpszDatatype = _T("EMF");
  docinfo.fwType        = 0;

  if(StartDoc(hDC, &docinfo) > 0){
    if(StartPage(hDC) > 0){
      TextOut(hDC, ....);
  
      EndPage(hDC);
    }
    EndDoc(hDC);
  }

  DeleteDC(hDC);

Последний раз редактировалось p51x; 16.07.2010 в 12:15. Причина: Исправлены описки :)
p51x вне форума Ответить с цитированием
Старый 16.07.2010, 11:35   #6
reynevan
Пользователь
 
Регистрация: 15.07.2010
Сообщений: 35
По умолчанию

p51x
1>c:\projects\blanc_ed\blanc_ed\1.c pp(245) : error C2065: Simple: необъявленный идентификатор
1>c:\projects\blanc_ed\blanc_ed\1.c pp(245) : error C3861: _T: идентификатор не найден

спасибо, а как их объявить?

Цитата:
Сообщение от Д'якон Посмотреть сообщение
TextOut - это GDI. Открывай объект "принтер" (CreateDC) и рисуй на нем.
вот я и не знаю, как открыть объект "принтер". Понимаю, что CreateDC, но ведь надо еще параметры все откуда-то взять

Последний раз редактировалось Stilet; 16.07.2010 в 12:19.
reynevan вне форума Ответить с цитированием
Старый 16.07.2010, 11:46   #7
wyvern
Форумчанин
 
Аватар для wyvern
 
Регистрация: 24.03.2009
Сообщений: 215
По умолчанию

_T() - макрос, который используется для того, чтобы строка одинаково использовалась при компиляции с поддержкой юникода и без него.

Если Вы компилируете приложение с включенным юникодом, можете попробовать заменить это на L"Simple" и L"EMF" соответственно, иначе просто на "Simple" и "EMF".
wyvern@localhost:~$ sudo emerge --unmerge world
wyvern вне форума Ответить с цитированием
Старый 16.07.2010, 11:57   #8
reynevan
Пользователь
 
Регистрация: 15.07.2010
Сообщений: 35
По умолчанию

все! заработало!!! всем спасибище!!! особенно p51x )
reynevan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как выбрать принтер без TPrintDialog? Denkot Общие вопросы Delphi 1 02.05.2010 06:08
builder. Как показать вторую форму? Как подключить другой юнит? TwiX C++ Builder 2 21.12.2009 21:29
Как такое сделать (извените. но даже не знаю как это называется) Van'Denis HTML и CSS 3 30.08.2009 10:46
как почистить принтер RAVAL)) Компьютерное железо 3 27.06.2009 17:02
как заправить лазерный принтер? Neonovaja Luna Компьютерное железо 3 17.12.2008 03:36