Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

DirectX и вывод на печать

378
08 октября 2006 года
KurL
171 / / 01.08.2005
можно ли в приложении DirectX (без MFC) вывесть картинку на принтер?
5.9K
10 октября 2006 года
Zushenskiy
161 / / 29.06.2006
Что значит приложение DirectX?(Direct3D, DirectShow, DirectDraw -Захвати контекст окна и выводи себе спкойно на принтер содержимое этого окна.)
378
20 октября 2006 года
KurL
171 / / 01.08.2005
[QUOTE=Zushenskiy]Что значит приложение DirectX?[/QUOTE]
собранное без mfc

[QUOTE=Zushenskiy]Захвати контекст окна и выводи себе спкойно на принтер содержимое этого окна.)[/QUOTE]

хочу не контекст окна выводить, а картинку с винта распечатать (и на листе с позиционировать не абы как...)
вот бы экзампл поглядеть
9
20 октября 2006 года
Lerkin
3.0K / / 25.03.2003
Непонятно. А при чем здесь DirectX? Картинку с винта распечатать - DirectX не нужен. Совсем.
378
23 октября 2006 года
KurL
171 / / 01.08.2005
[QUOTE=Lerkin]Непонятно. А при чем здесь DirectX? Картику с винта распечатать - DirectX не нужен. Совсем.[/QUOTE]

вопрос в том, что есть проект DirectX собранный без mfc - хочется малой кровью прикрутить печать картинок с винта (не пересобирая)
5.9K
23 октября 2006 года
Zushenskiy
161 / / 29.06.2006
вообщето какая разница с чем ты работаешь чтобы вывисти на печать ты должен порисовать в контексте и отдать его принтеру и все в чем проблема. а будешь выводить с окна или с винта всеравно это уже твое решение.
378
25 декабря 2006 года
KurL
171 / / 01.08.2005
как в контексте принтера прорисовать картинку (битмап) из файла?

как запустить всё (то, что мы прорисовали в контексте принтера) на печать не вызывая диалог печати (без вызова .domodal для диалога печати и отслеживания нажатия ОК на нём)
5.9K
27 декабря 2006 года
Zushenskiy
161 / / 29.06.2006
Код:
DOCINFO di;
PRINTDLG pd;
int cWidthPels = 300;
int cHeightPels = 200;
   
HBITMAP hBm = (HBITMAP)LoadImage(NULL, "E:\\image\\1.bmp", IMAGE_BITMAP, cWidthPels, cHeightPels, LR_LOADFROMFILE);
hdc = CreateCompatibleDC(NULL);
SelectObject(hdc, hBm);

ZeroMemory(&pd,sizeof(pd));
ZeroMemory(&di,sizeof(DOCINFO));

pd.lStructSize = sizeof(pd);
pd.Flags = PD_RETURNDC;

PrintDlg(&pd); 

di.cbSize = sizeof(DOCINFO);
di.lpszDocName = "Bitmap Printing Test";

StartDoc(pd.hDC, &di);
StartPage(pd.hDC);

BitBlt(pd.hDC, 0, 0, cWidthPels , cHeightPels, hdc, 0, 0, SRCCOPY);

EndPage(pd.hDC);
EndDoc(pd.hDC);

DeleteDC(pd.hDC);
DeleteDC(hdc);
DeleteObject(hBm);
5.9K
27 декабря 2006 года
Zushenskiy
161 / / 29.06.2006
а без диалога выглядит так
Код:
DOCINFO di = {0};
    di.cbSize = sizeof(DOCINFO);
    di.lpszDocName = "Bitmap Printing Test";

    int cWidthPels = 300;
    int cHeightPels = 200;
    PRINTER_INFO_8* pp;
    DWORD dwNeed = 0;
    HANDLE hPrinter = NULL;

    HBITMAP hBm = (HBITMAP)LoadImage(NULL, "E:\\image\\1.bmp", IMAGE_BITMAP, cWidthPels, cHeightPels, LR_LOADFROMFILE);
           
    hdc = CreateCompatibleDC(NULL);
    SelectObject(hdc, hBm);
           
    OpenPrinter("PDF995", &hPrinter, NULL);
   
    LPBYTE pByte;
    BOOL bRes = GetPrinter(hPrinter,8, (LPBYTE)&pp, sizeof(pp), &dwNeed);
    pByte = new BYTE[dwNeed];
    ZeroMemory(pByte, dwNeed);
    bRes = GetPrinter(hPrinter,8, pByte, dwNeed, &dwNeed);
    pp = (PRINTER_INFO_8*)pByte;   
    HDC hDCPrint = CreateDC("WINSPOOL", (char*)pp -> pDevMode -> dmDeviceName, NULL, pp->pDevMode);
   
           
    StartDoc(hDCPrint, &di);
    StartPage(hDCPrint);
    TextOut(hDCPrint, 0, 0, "test text", 9);
    BitBlt(hDCPrint, 0, 20, cWidthPels , cHeightPels, hdc, 0, 0, SRCCOPY);
    EndPage(hDCPrint);
    EndDoc(hDCPrint);
   
        delete [] pByte;
    DeleteDC(hDCPrint);
    DeleteDC(hdc);
    DeleteObject(hBm);
    ClosePrinter(hPrinter);


PDF995 - это имя драйвера принтера
378
09 января 2007 года
KurL
171 / / 01.08.2005
ух! здорово! спасибо!

а что за сложности м.б. со структурами PRINTER_INFO_8 и 9? (вижал говорит, что не знает что это такое, хотя с PRINTER_INFO_1 - PRINTER_INFO_7 всё гут)?
5.9K
10 января 2007 года
Zushenskiy
161 / / 29.06.2006
Цитата:

а что за сложности м.б. со структурами PRINTER_INFO_8 и 9? (вижал говорит, что не знает что это такое, хотя с PRINTER_INFO_1 - PRINTER_INFO_7 всё гут)?


перед
#include <windows.h>
вставь
#define _WIN32_WINNT 0x0501
и все будет ок

378
10 января 2007 года
KurL
171 / / 01.08.2005
УРА!!
СПАСИТЕЛЬ!!!
С МЕНЯ СТАКАН :)
378
10 января 2007 года
KurL
171 / / 01.08.2005
а если вдруг jpg печатать :) ?
что-то ничего в духе loadimage я не нарыл - неужели конвертить jpg в bmp и .... (нежизнерадостно как-то :) )
5.9K
11 января 2007 года
Zushenskiy
161 / / 29.06.2006
да ты прав на счет jpg. GDI+(когдато делал анологичную задачу на нем), сторонние библиотеки, либо сам конвертишь, особо сложного ни чего нету в инете валом открытых кодов для конвертации
5.9K
12 января 2007 года
Zushenskiy
161 / / 29.06.2006
еще проще
Код:
GdiplusStartupInput gdiplusStartupInput;
   ULONG_PTR gdiplusToken;
   GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);

   HDC hdcPrint = CreateDC(NULL, "имя принтера", NULL, NULL);

   DOCINFO docInfo;
   ZeroMemory(&docInfo, sizeof(docInfo));
   docInfo.cbSize = sizeof(docInfo);
   docInfo.lpszDocName = "blabla";

   StartDoc(hdcPrint, &docInfo);
   StartPage(hdcPrint);
   Graphics* graph = new Graphics(hdcPrint);
   Image img(L"123.jpg");//к примеру
   graph.DrawImage(&img, 0.0f, 0.0f);
   EndPage(hdcPrint);
   EndDoc(hdcPrint);
   
   DeleteDC(hdcPrint);
   GdiplusShutdown(gdiplusToken);


незабудь подключить
 
Код:
#include <gdiplus.h>
#pragma comment (lib, gdiplus.lib")
using namespace Gdiplus;


и если есть дефайн #define WIN32_LEAN_AND_MEAN то закоменть его
378
12 января 2007 года
KurL
171 / / 01.08.2005
КЛАСС!! СПАСИБО!!
Слушай, а как ты думаешь, почему boundsChecker ругается на вызов GdiplusShutdown(gdiplusToken) - говорит:

Questionable use of thread Thread created using CreateThread rather than _beginthreadex

(при запуске в релизе никаких вопросов не всплывает)
5.9K
12 января 2007 года
Zushenskiy
161 / / 29.06.2006
warning всмысле выдает?
378
15 января 2007 года
KurL
171 / / 01.08.2005
угу
похоже он не любит утечку resource leak:allocated by LoadLibraryA in dllinit.cpp(505)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог