C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 Как получить текущие настройки принтера в MFC / Печать / Visual C++

Как получить текущие настройки принтера в MFC

Единственный способ, получить доступ к текущим настройкам принтеров, это через структуры m_hDevMode и m_hDevNames хранящимися в CWinApp. Эти члены доступны через структуру PRINTDLG, указатель которой передаётся в функцию-член GetPrinterDeviceDefaults() класса, наследованного от CWinApp. Так как возвращаемые значения hDevMode и hDevNames являются переменными HGLOBAL, то для того, чтобы вернуть указатель на структуры необходимо вызывать ::GlobalLock(). Используя данный указатель, можно извлечь информацию из структуры, чтобы определить текущее состояние принтера. Более подробно о содержимом этих структур можно посмотреть DEVMODE и DEVNAMES в хелпе по SDK.

Нижеприведённый пример является функцией-членом класса, наследованного от CView, которая возвращает текущий размер страницы принтера используя GetDeviceCaps() на объекте CDC, созданного с установками принтера:

Пример кода

   /* Необходимые опции компилятора: нет
   */ 

      BOOL CMyView::GetPageSize(CSize &nRetVal)
      {
         PRINTDLG FAR * pPrintDlg = new PRINTDLG;
         BOOL bRet = FALSE;

      // Получаем текущие установки принтера.

         if(AfxGetApp()->GetPrinterDeviceDefaults(pPrintDlg))
         {

      // Получаем указатели на две структуры с установками.

            DEVNAMES FAR *lpDevNames =
            (DEVNAMES FAR *)::GlobalLock(pPrintDlg->hDevNames);

            DEVMODE FAR *lpDevMode =
            (DEVMODE FAR *)::GlobalLock(pPrintDlg->hDevMode);

      // Получаем информацию о драйвере.

            CString szDriver((LPTSTR)lpDevNames +
                                 lpDevNames->wDriverOffset);
            CString szDevice((LPTSTR)lpDevNames +
                                 lpDevNames->wDeviceOffset);
            CString szOutput((LPTSTR)lpDevNames +
                                 lpDevNames->wOutputOffset);

      // Создаём объект CDC согласно текущим настройкам.

            CDC pDC;
            pDC.CreateDC(szDriver, szDevice, szOutput, lpDevMode);

      // Запрашиваем у объекта CDC ширину и высоту текущей страницы.

            nRetVal.cx = pDC.GetDeviceCaps(HORZSIZE);
            nRetVal.cy = pDC.GetDeviceCaps(VERTSIZE);

      // Избавляемся от объекта CDC.

            pDC.DeleteDC();

      // Разблокируем указатели на структуры настроек.

            ::GlobalUnlock(pPrintDlg->hDevNames);
            ::GlobalUnlock(pPrintDlg->hDevMode);

          bRet = TRUE;
         }
       delete pPrintDlg;
       return bRet;
   }