На главную
ПРАВИЛА 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,0827 ]   [ 15 queries used ]   [ Generated: 22.02.18, 02:54 GMT ]