dc.SetMapMode(MM_LOMETRIC);
или
dc.SetMapMode(MM_HIMETRIC);
Печать в C++ (вывод по милиметрам)
ПОНЯТИЯ НЕ ИМЕЮ КАК ЭТО СДЕЛАТЬ!!!!!!!!!!!!!!!
Цитата:
Originally posted by CyberEx
Мне нужно, просто необходимо, распечатать документ,содержащий текст и графику, в точности по милиметрам.
ПОНЯТИЯ НЕ ИМЕЮ КАК ЭТО СДЕЛАТЬ!!!!!!!!!!!!!!!
Мне нужно, просто необходимо, распечатать документ,содержащий текст и графику, в точности по милиметрам.
ПОНЯТИЯ НЕ ИМЕЮ КАК ЭТО СДЕЛАТЬ!!!!!!!!!!!!!!!
При печати задаешь режим контекста:
Код:
и вывод идет в долях милиметра.
Спасибо большое за помощь,но как вообще что-то ваводить на печать,и как создадавать документ, размеченный по миллиметрам.
Скачай отсюда
Цитата:
Originally posted by alser
Скачай отсюда
http://www.rusdoc.ru/reviews/programming/api/
книгу Ч. Петцольда и почитай
Скачай отсюда
http://www.rusdoc.ru/reviews/programming/api/
книгу Ч. Петцольда и почитай
Ну скачал я эту книгу, но она англо-китайская.
ЧТО ЭТО ТАКОЕ????????????????????????????????
И как сделать англо-РУССКУЮ
X)-
Внеси изменения в реестр (изменения выделены):
Если Win98/Me
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage]
"1250"="cp_1251.nls"
"1251"="cp_1251.nls"
"1252"="cp_1251.nls"
"1253"="cp_1251.nls"
"1254"="cp_1251.nls"
"1255"="cp_1251.nls"
Если NT/2000/XP
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage]
"1250"="c_1251.nls"
"1251"="c_1251.nls"
"1252"="c_1251.nls"
"1253"="c_1251.nls"
"1254"="c_1251.nls"
После этого следует перезагрузиться.
Если это не поможет, то попробуй открыть вордом из комплекта офиса 95.
Цитата:
Originally posted by xelos
При печати задаешь режим контекста:
и вывод идет в долях милиметра.
При печати задаешь режим контекста:
Код:
dc.SetMapMode(MM_LOMETRIC);
или
dc.SetMapMode(MM_HIMETRIC);
или
dc.SetMapMode(MM_HIMETRIC);
и вывод идет в долях милиметра.
Если в MFC печатаешь, то там отдельная история как это делать, если через WinAPI, то там всего 5 команд для печати.
Код:
CDC dc;
HDC hDC;
CPrintDialog dlgPrint(TRUE);
dlgPrint.GetDefaults();
if (!(hDC = dlgPrint.CreatePrinterDC())){
AfxMessageBox(_T("Нету принтера"));
return;
}else{
DeleteDC(hDC);
LPDEVMODE pDevMode = dlgPrint.GetDevMode();
pDevMode->dmOrientation = DMORIENT_LANDSCAPE;
if (!dc.Attach(dlgPrint.CreatePrinterDC())){
AfxMessageBox (_T("Проблемы с принтером"));
return;
};
DOCINFO docinfo;
memset(&docinfo, 0, sizeof(docinfo));
docinfo.cbSize = sizeof(docinfo);
docinfo.lpszDocName = _T("Test");
if (dc.StartDoc(&docinfo) < 0){
MessageBox("Can't start printer","Erreur",MB_OK);
}else{
if (dc.StartPage() < 0){
MessageBox(_T("Could not start page"));
dc.AbortDoc();
}else{
dc.SetMapMode(MM_LOMETRIC);
//формируешь страницу на печать
dc.EndPage();
};
dc.EndDoc();//конец печати
};
};
HDC hDC;
CPrintDialog dlgPrint(TRUE);
dlgPrint.GetDefaults();
if (!(hDC = dlgPrint.CreatePrinterDC())){
AfxMessageBox(_T("Нету принтера"));
return;
}else{
DeleteDC(hDC);
LPDEVMODE pDevMode = dlgPrint.GetDevMode();
pDevMode->dmOrientation = DMORIENT_LANDSCAPE;
if (!dc.Attach(dlgPrint.CreatePrinterDC())){
AfxMessageBox (_T("Проблемы с принтером"));
return;
};
DOCINFO docinfo;
memset(&docinfo, 0, sizeof(docinfo));
docinfo.cbSize = sizeof(docinfo);
docinfo.lpszDocName = _T("Test");
if (dc.StartDoc(&docinfo) < 0){
MessageBox("Can't start printer","Erreur",MB_OK);
}else{
if (dc.StartPage() < 0){
MessageBox(_T("Could not start page"));
dc.AbortDoc();
}else{
dc.SetMapMode(MM_LOMETRIC);
//формируешь страницу на печать
dc.EndPage();
};
dc.EndDoc();//конец печати
};
};
что-нибудь вроде такого.
*************************************************
Хочу задать вопрос не в тему.
Как убрать клетку и MS Word XP, Win XP??
*************************************************
Как вы водить на печать я понял, как сделать чтобы он печатался в доля милиметра я тоже понял,
НО Каа формировать документ размеченный по миллиметрам, например чтобы от одной фразы до другой было 35мм и т.п.??????????????????????
..............................................
P.S.Измения в реестре тоже помогли.
Цитата:
Originally posted by CyberEx
СПАСИБО ОГРОМНОЕ ЗАПОМОЩЬ!!!!!!!!!!!!!!!!!!!!!!!!
*************************************************
Хочу задать вопрос не в тему.
Как убрать клетку и MS Word XP, Win XP??
*************************************************
Как вы водить на печать я понял, как сделать чтобы он печатался в доля милиметра я тоже понял,
НО Каа формировать документ размеченный по миллиметрам, например чтобы от одной фразы до другой было 35мм и т.п.??????????????????????
..............................................
P.S.Измения в реестре тоже помогли.
СПАСИБО ОГРОМНОЕ ЗАПОМОЩЬ!!!!!!!!!!!!!!!!!!!!!!!!
*************************************************
Хочу задать вопрос не в тему.
Как убрать клетку и MS Word XP, Win XP??
*************************************************
Как вы водить на печать я понял, как сделать чтобы он печатался в доля милиметра я тоже понял,
НО Каа формировать документ размеченный по миллиметрам, например чтобы от одной фразы до другой было 35мм и т.п.??????????????????????
..............................................
P.S.Измения в реестре тоже помогли.
Когда печатаешь в милиметрах, например TextOut(x,y,string) х и у задаются в долях милиметра.
допустим у тебя две фразы есть, которые надо напечатать с расстоянием 35 мм между 2 фразами на одной линии.
Первую фразу печатаешь где хочешь, для второй фразы координата у такая же как и у первой, а х вычисляешь как х первой фразы + длина первой фразы в логических единицах + 35 мм. Т.е.
Код:
CDC dc; // инициализация dc
dc.SetMapMode(MM_HIMETRIC);
CSize size;
CString string1, string2;
int x1,x2,y1,y2;
size= dc.GetTextExtend(&string1); //в сх у нас длиина строки, в су - высота
х2=х1 + size.cx + 35*(доли милиметров, не помню какие доли при HI_METRIC)
dc.SetMapMode(MM_HIMETRIC);
CSize size;
CString string1, string2;
int x1,x2,y1,y2;
size= dc.GetTextExtend(&string1); //в сх у нас длиина строки, в су - высота
х2=х1 + size.cx + 35*(доли милиметров, не помню какие доли при HI_METRIC)
вот вроде и все. Или тебе что-то другое надо делать?