У меня осуществляется вывод содержимого текстового файла на принтер.
Вот код:
void CPrintSolvedNUDialog::OnBnClickedOk()
// если была нажата кнопка "Печать"
{
// TODO: добавьте свой код обработчика уведомлений
int i, n, len, cyChar, cyPage, yPos;
char s[256];
CString myString;
LPCSTR pzText;
LPTSTR lpszText;
DWORD size = MAX_PATH;
TCHAR temp[MAX_PATH];
TEXTMETRIC txtm;
LOGFONT lf;
FILE *f;
CPrintDialog cp(FALSE);
if (cp.DoModal()==IDOK)
{
CDC printDC;
printDC.Attach(cp.GetPrinterDC());
cyPage = printDC.GetDeviceCaps(VERTRES);
printDC.GetTextMetrics(&txtm);
cyChar = txtm.tmHeight + txtm.tmExternalLeading;
yPos = 0;
DOCINFO docinfo;
::ZeroMemory(&docinfo,sizeof(DOCINFO));
docinfo.cbSize = sizeof(docinfo);
docinfo.lpszDocName = "Simple";
docinfo.lpszOutput = NULL;
docinfo.lpszDatatype = "RAW";
docinfo.fwType = 0;
CFont *savedFont;
savedFont = printDC.GetCurrentFont();
savedFont->GetLogFont(&lf);
strcpy(lf.lfFaceName,"Courier New");
lf.lfHeight = 60; // 60 вместо 10
lf.lfWidth = 48; // 48 вместо 8
CFont myFont;
myFont.CreateFontIndirectA(&lf);
printDC.SelectObject(&myFont);
if (printDC.StartDoc(&docinfo)>0)
{
if (printDC.StartPage()>0)
{
f = fopen("results.txt","rt");
while (!feof(f))
{
fgets(s,256,f);
len = strlen(s);
pzText = (LPCSTR)s;
printDC.TextOutA(0,yPos,pzText,len);
yPos += cyChar;
}
fclose(f);
printDC.EndPage();
}
printDC.EndDoc();
}
printDC.SelectObject(savedFont);
printDC.Detach();
}
CDialogEx::OnOK();
}
Печать на принтер идёт, печатается нужным мне размером.
Но есть один вопрос--для указания размеров шрифта (Courier New) я задал размеры 60 в высоту и 48 в ширину, вместо соответственно 10 и 8 . Потому что когда я задавала размеры шрифта 10 x 8 , у меня буквы отображались очень маленькими--где-то миллиметр высотой.
В чём причины этого? Я работаю под Window 7 , среда разработки MS Visual Studio 2012, принтер HP LAserJet M1522n . Если программу перенести на другую машину, с другой версией Windows (например, Windows XP) и с другим принтером, то размер выводимого текста на принтере будет таким же, как и у меня, или же он, вообще говоря, будет другим?
Как сделать так, чтобы текстовой файл у меня печатался на разных принтерах с одинаковым размером?
1613 г. = 2024 г.
P.S. Шрифт Courier New--равноширинный.
1613 г. = 2024 г.