На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
! Правила раздела Visual C++ / MFC / WTL (далее Раздела)
1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

Полезные ссылки:
user posted image FAQ Раздела user posted image Обновления для FAQ Раздела user posted image Поиск по Разделу user posted image MSDN Library Online
Модераторы: ElcnU
  
> Программное задание ориентации печати
Я вывожу текст на печать через CPrinterDC. Перед печать у меня появляется диалог для настроек печати. В этом диалоге настроек я задаю ориентацию печати альбомную, потому что у меня широкие строки.
Можно ли задать настройку ориентации печати программно, чтобы пользователю не приходилось каждый раз задавать ориентацию печати в диалоге?
Можно ли это сделать средствами CPrinterDC? Если можно, то как? Если нельзя сделать это с помощью CPrinterDC, то как сделать это другим способом при помощи MFC?
Цитата ter_nk_ @

А не могли бы Вы привести пример кода, в котором CPrinterDC использует DEVMODE ?
Я использовал структуру DEVMODE, однако у меня программа печатает текст в книжной ориентации, а не в альбомной. Вот код:

ExpandedWrap disabled
    void CBroachDialog::OnBnClickedButton4()
    // если была нажата кнопка "Печать"
    {
        // TODO: добавьте свой код обработчика уведомлений
        int  i, j, n, len, cyChar, cyPage, yPos, strcount, numobj, cmindex;
        long double  val;
        char  s[256], shelp[80];
        CString  myString;
        LPCSTR  pzText;
        LPTSTR  lpszText;
        DWORD  size = MAX_PATH;
        TCHAR  temp[MAX_PATH];
        TEXTMETRIC  txtm;
        LOGFONT lf, lf2;
        CFont  myFont, myFont2;
        FILE *f;
     
        strcount = 0;
        numobj = 0; // отладочный вариант
        CPrintDialog  cp(FALSE);
        if (cp.DoModal()==IDOK)
        {
            DEVMODE*  lpDevMode = (DEVMODE*)::GlobalLock(cp.GetDevMode());
            lpDevMode->dmOrientation = DMORIENT_LANDSCAPE;
            //::GlobalUnlock(cp.GetDevMode());
            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);
            savedFont->GetLogFont(&lf2);
                strcpy(lf.lfFaceName,"Courier New");
                //lf.lfHeight = 60;
            lf.lfHeight = 110;
                lf.lfWidth = 52;
            //CFont  myFont;
            myFont.CreateFontIndirectA(&lf);
            lf2.lfHeight = 115;
            lf2.lfWidth = 52;
            myFont2.CreateFontIndirectA(&lf2);
            printDC.SelectObject(&myFont);
            _set_output_format(_TWO_DIGIT_EXPONENT);
            if (printDC.StartDoc(&docinfo)>0)
            {
                if (printDC.StartPage()>0)
                {
                    strcpy(s,"Результаты протяжки полученных условий");
                    len = strlen(s);
                    pzText = (LPCSTR)s;
                    printDC.TextOutA(0,yPos,pzText,len);
                    yPos += cyChar;
                    sprintf(s,"объекта № %d на время %s",numobj,sdatetime);
                    len = strlen(s);
                    pzText = (LPCSTR)s;
                    printDC.TextOutA(0,yPos,pzText,len);
                    yPos += cyChar;
                    strcpy(s," ");
                    len = strlen(s);
                    pzText = (LPCSTR)s;
                    printDC.TextOutA(0,yPos,pzText,len);
                    yPos += cyChar;
                    strcpy(s,"Протянутый вектор-состояния от уточнённых начальных условий:");
                    len = strlen(s);
                    pzText = (LPCSTR)s;
                    printDC.TextOutA(0,yPos,pzText,len);
                    yPos += cyChar;
                    sprintf(s,"X = %.16le",rv0[0].x*AE);
                    len = strlen(s);
                    pzText = (LPCSTR)s;
                    printDC.TextOutA(0,yPos,pzText,len);
                    yPos += cyChar;
                    sprintf(s,"Y = %.16le",rv0[0].y*AE);
                    len = strlen(s);
                    pzText = (LPCSTR)s;
                    printDC.TextOutA(0,yPos,pzText,len);
                    yPos += cyChar;
                    sprintf(s,"Z = %.16le",rv0[0].z*AE);
                    len = strlen(s);
                    pzText = (LPCSTR)s;
                    printDC.TextOutA(0,yPos,pzText,len);
                    yPos += cyChar;
                    sprintf(s,"Vx = %.16le",rv0[1].x*AE/DAY);
                    len = strlen(s);
                    pzText = (LPCSTR)s;
                    printDC.TextOutA(0,yPos,pzText,len);
                    yPos += cyChar;
                    sprintf(s,"Vy = %.16le",rv0[1].y*AE/DAY);
                    len = strlen(s);
                    pzText = (LPCSTR)s;
                    printDC.TextOutA(0,yPos,pzText,len);
                    yPos += cyChar;
                    sprintf(s,"Vz = %.16le",rv0[1].z*AE/DAY);
                    len = strlen(s);
                    pzText = (LPCSTR)s;
                    printDC.TextOutA(0,yPos,pzText,len);
                    yPos += cyChar;
                    if (Sb>0.0)
                    {
                        sprintf(s,"Sb = %.16le",Sb);
                        len = strlen(s);
                        pzText = (LPCSTR)s;
                        printDC.TextOutA(0,yPos,pzText,len);
                        yPos += cyChar;
                    }
                    if (kappa>0.0)
                    {
                        sprintf(s,"kappa = %.16le",kappa);
                        len = strlen(s);
                        pzText = (LPCSTR)s;
                        printDC.TextOutA(0,yPos,pzText,len);
                        yPos += cyChar;
                    }
                    strcpy(s," ");
                    len = strlen(s);
                    pzText = (LPCSTR)s;
                    printDC.TextOutA(0,yPos,pzText,len);
                    yPos += cyChar;
                    strcpy(s,"Ковариационная матрица:");
                    len = strlen(s);
                    pzText = (LPCSTR)s;
                    printDC.TextOutA(0,yPos,pzText,len);
                    yPos += cyChar;
                    cmindex = 0;
                    if (covmatr.size()>0)
                    {
                        for (i=0; i<dim; i++)
                        {
                            strcpy(s,"");
                            if (i>0)
                            {
                                for (j=0; j<i; j++)
                                {
                                    sprintf(shelp,"                   ");
                                    strcat(s,shelp);
                                }
                            }
                            for (j=i; j<dim; j++)
                            {
                                val = (long double)(covmatr.at(cmindex));
                                sprintf(shelp,"%.10le   ",val);
                                strcat(s,shelp);
                                cmindex++;
                            }
                            len = strlen(s);
                            pzText = (LPCSTR)s;
                            printDC.TextOutA(0,yPos,pzText,len);
                            yPos += cyChar;
                       }
                    }
                    printDC.EndPage();
                }
                printDC.EndDoc();
            }
            printDC.SelectObject(savedFont);
            printDC.Detach();
            ::GlobalUnlock(cp.GetDevMode());
        }
    }


Как сделать так, чтобы программа печатала в альбомной ориентации?
Не знаю, может этот класс MFC как-то позволяет настройку менять.

Добавлено
Вот пример из мсдн https://msdn.microsoft.com/ru-ru/library/t5...ror=-2147217396
1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
0 пользователей:


Рейтинг@Mail.ru
[ Script Execution time: 0,0979 ]   [ 20 queries used ]   [ Generated: 23.09.17, 18:19 GMT ]