Re[8]: Программная печать из MFC-приложения
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 26.07.17 14:27
Оценка:
Вот этот пример у меня работает:

заполняю мой m_IDC_EDIT1 пятью одинаковыми строками по 80 символов:

BOOL  CPrintSolvedNUDialog::OnInitDialog()
{
    char  s[1024];

    CDialog::OnInitDialog();
    strcpy(s,"abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzab");
    strcat(s,"\r\n");
    strcat(s,"abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzab");
    strcat(s,"\r\n");
    strcat(s,"abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzab");
    strcat(s,"\r\n");
    strcat(s,"abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzab");
    strcat(s,"\r\n");
    strcat(s,"abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzab");
    m_IDC_EDIT1.SetWindowTextA(s);
    return TRUE;
}


и выдаю их на печать:

void CPrintSolvedNUDialog::OnBnClickedOk()
// если была нажата кнопка "Печать"
{
    // TODO: добавьте свой код обработчика уведомлений
    int  i, n, cyChar, cyPage, yPos;
    CString  myString;
    LPCSTR  pzText;
    LPTSTR  lpszText;
    DWORD  size = MAX_PATH;
    TCHAR  temp[MAX_PATH];
    TEXTMETRIC  txtm;

    m_IDC_EDIT1.GetWindowTextA(myString);
    lpszText = "";
    //n = myString.GetLength();
    n = m_IDC_EDIT1.GetLineCount();
    pzText = (LPCSTR)myString;
    GetDefaultPrinter(temp,&size);    
    HDC  hDC = CreateDC(NULL,temp,NULL,NULL);
    if (hDC)
    {
        cyPage = GetDeviceCaps(hDC,VERTRES);
        GetTextMetrics(hDC,&txtm);
        cyChar = txtm.tmHeight + txtm.tmExternalLeading;
        yPos = 0;
        DOCINFO  docinfo;
        docinfo.cbSize = sizeof(docinfo);
        docinfo.lpszDocName = "Simple";
        docinfo.lpszOutput = NULL;
        docinfo.lpszDatatype = "EMF";
        docinfo.fwType = 0;
        if (StartDoc(hDC,&docinfo)>0)
        {
            if (StartPage(hDC)>0)
            {
                //TextOut(hDC,0,0,pzText,80);
                for (i=0; i<n; i++)
                {
                    //m_IDC_EDIT1.GetLine(i,lpszText);
                    int  len = m_IDC_EDIT1.LineLength(i);
                    m_IDC_EDIT1.GetLine(i,myString.GetBuffer(len),len);
                    myString.ReleaseBuffer();
                    myString = myString + "\r\n";
                    pzText = myString.GetBuffer();
                    TextOut(hDC,0,yPos,pzText,80);
                    yPos += cyChar;
                }
                EndPage(hDC);
            }
            EndDoc(hDC);
        }
        DeleteDC(hDC);
    }
    CDialogEx::OnOK();
}


В результате выводятся на принтер пять одинаковых строк!
1613 г. = 2024 г.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.