home *** CD-ROM | disk | FTP | other *** search
/ C Programming Starter Kit 2.0 / SamsPublishing-CProgrammingStarterKit-v2.0-Win31.iso / bc45 / owlsrc.pak / PRINTDC.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1997-07-24  |  3.0 KB  |  93 lines

  1. //----------------------------------------------------------------------------
  2. // ObjectWindows
  3. // (C) Copyright 1992, 1994 by Borland International, All Rights Reserved
  4. //
  5. //   Implementation of TPrintDC
  6. //----------------------------------------------------------------------------
  7. #include <owl/owlpch.h>
  8. #include <owl/dc.h>
  9.  
  10. #if defined(BI_PLAT_WIN32)
  11.   extern "C" {
  12.     int  WINAPI DeviceCapabilitiesExA(LPCSTR, LPCSTR, LPCSTR, WORD,
  13.                                       LPSTR, CONST DEVMODEA*);
  14.     int  WINAPI DeviceCapabilitiesExW(LPCWSTR, LPCWSTR, LPCWSTR, WORD,
  15.                                       LPWSTR, CONST DEVMODEW*);
  16.     #if defined(UNICODE)
  17.       #define DeviceCapabilitiesEx  DeviceCapabilitiesExW
  18.     #else
  19.       #define DeviceCapabilitiesEx  DeviceCapabilitiesExA
  20.     #endif // !UNICODE
  21.   }
  22.   typedef int (WINAPI* DeviceCapabilitiesFcn)(LPCSTR, LPCSTR, WORD, LPSTR, CONST DEVMODEA*);
  23.   #define PROC_DEVICECAPABILITIES MAKEINTRESOURCE(91)
  24. #else
  25.   typedef uint32 (CALLBACK* DeviceCapabilitiesFcn)(LPCSTR, LPCSTR, WORD, LPSTR, const DEVMODE far*);
  26. #endif
  27.  
  28. TPrintDC::TPrintDC(HDC handle, TAutoDelete autoDelete) 
  29. :
  30.   TCreatedDC(handle, autoDelete)
  31. {
  32.   DocInfo.cbSize = sizeof(DocInfo);
  33. }
  34.  
  35. TPrintDC::TPrintDC(const char far* driver, const char far* device,
  36.                    const char far* output, const DEVMODE far* initData)
  37. :
  38.   TCreatedDC(driver, device, output, initData)
  39. {
  40.   DocInfo.cbSize = sizeof(DocInfo);
  41. }
  42.  
  43. uint32
  44. TPrintDC::DeviceCapabilities(const char far* driver, 
  45.                              const char far* device, 
  46.                              const char far* port,
  47.                              int capability, 
  48.                              char far* output,
  49.                              LPDEVMODE devmode)
  50. {
  51.   //
  52.   // DeviceCapabilitiesEx not functional in this Win32 (NT) release
  53.   //
  54.   #if 0 && defined(BI_PLAT_WIN32)
  55.     return ::DeviceCapabilitiesEx(driver, device, port, capability, output, devmode);
  56.  
  57.   //
  58.   // DeviceCapabilities missing in Win32s
  59.   //
  60.   #elif 0 && defined(BI_PLAT_WIN32)
  61.     return ::DeviceCapabilities(device, port, (uint16)capability, output, devmode);
  62.  
  63.   //
  64.   // Hand call DeviceCapabilities due to Win32s missing function!
  65.   //
  66.   #else
  67.     uint32 caps = 0;
  68.     #if defined(BI_PLAT_WIN32)
  69.       //
  70.       // Try the Win32 DeviceCapabilitiesEx function
  71.       //
  72.       caps = ::DeviceCapabilitiesEx(driver, device, port, (uint16)capability, output, devmode);
  73.       if (GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)
  74.         return caps;
  75.     #endif
  76.  
  77.     //
  78.     // Locate & call the DeviceCapabilities function within the printer driver
  79.     // itself.
  80.     //
  81.     HINSTANCE driverInst = ::LoadLibrary(driver);
  82.  
  83.     if (driverInst) {
  84.       DeviceCapabilitiesFcn deviceCapabilities = 
  85.          (DeviceCapabilitiesFcn)::GetProcAddress(driverInst, PROC_DEVICECAPABILITIES);
  86.       if (deviceCapabilities)
  87.         caps = deviceCapabilities(device, port, (uint16)capability, output, devmode);
  88.       ::FreeLibrary(driverInst);
  89.     }
  90.     return caps;
  91.   #endif
  92. }
  93.