Re: Снова принтер
От: Аноним  
Дата: 10.05.04 06:32
Оценка:
Здравствуйте, DreamWeaver, Вы писали:

DW>Вывожу картинку на принтер, но она получается уж очень маленькой. Как вообще можно задать ширину и высоту пикселя на бумаге?


//--------------------------------------------
// Для работы с принтером
// устанавливает 1 пиксел равным unit милиметрaм
//--------------------------------------------
void MDC::MPrinter::SetLogicalUnitSize(double unit)
{
if (!IsHandle())
return;

Flg_MM_Mode = TRUE;
dUnit = unit;
//получить размеры устройства в пикселях
int pp_size_x = GetDeviceCaps(m_hDC, HORZRES) — 1;
int pp_size_y = GetDeviceCaps(m_hDC, VERTRES) — 1;
SetRect(&DevRect, 0, 0, pp_size_x, pp_size_y);

//получить размеры устройства в милиметрах
int mm_size_x = GetDeviceCaps(m_hDC, HORZSIZE);
int mm_size_y = GetDeviceCaps(m_hDC, VERTSIZE);

double x_fact = (double)pp_size_x * unit * (double)DevRect.right / (double)mm_size_x;
double y_fact = (double)pp_size_y * unit * (double)DevRect.bottom / (double)mm_size_y;
OldMapMode = ::SetMapMode(m_hDC, MM_ISOTROPIC);
while (x_fact > (double)32767 || y_fact > (double)32767)
{
pp_size_x /= 2;
pp_size_y /= 2;
x_fact /= 2;
y_fact /= 2;
}

if (!SetWindowExtEx(m_hDC, pp_size_x, pp_size_y, &PrevWinExt) ||
!SetViewportExtEx(m_hDC,(int)(x_fact + 0.5), (int)(y_fact + 0.5), &PrevViewExt) ||
!DPtoLP(m_hDC, (LPPOINT)&DevRect, 2))
{
#ifdef WIN32
DWORD err = ::GetLastError();
TRACE("Set extension error %xl\n", err);
#endif
}
}

DW> При помощи функции PrintDlg можно вернуть кучу разных параметров, а как можно, допустим, заставить принтер печатать в чернобелом режиме? Как поменять ориентацию бумаги? Вся эта инфа возвращается в структуре DEVMODE, а как ее задать?


смотри DocumentProperties
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.