home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c083 / 11.ddi / OWLSRC.PAK / PEN.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1993-12-02  |  2.6 KB  |  91 lines

  1. //----------------------------------------------------------------------------
  2. // ObjectWindows - (C) Copyright 1992, 1993 by Borland International
  3. //   source\owl\pen.cpp
  4. //   Implementation for GDI Pen object
  5. //----------------------------------------------------------------------------
  6. #include <owl\owlpch.h>
  7. #include <owl\gdiobjec.h>
  8.  
  9. DIAG_DECLARE_GROUP(OwlGDI);        // General GDI diagnostic group
  10. DIAG_DECLARE_GROUP(OwlGDIOrphan);  // Orphan control tracing group
  11.  
  12. //
  13. // Constructors
  14. //
  15. TPen::TPen(HPEN handle, TAutoDelete autoDelete)
  16.   : TGdiObject(handle, autoDelete)
  17. {
  18.   #if !defined(NO_GDI_ORPHAN_CONTROL)
  19.     if (ShouldDelete)
  20.       OBJ_REF_ADD(Handle, Pen);
  21.   #endif
  22. }
  23.  
  24. //
  25. // detect constructions of stock pens & get stock objects instead
  26. //
  27. TPen::TPen(TColor color, int width, int style)
  28. {
  29.   if (width == 1 && style == PS_SOLID &&
  30.      (color == TColor::Black || color == TColor::White)) {
  31.     if (color == TColor::Black)
  32.       Handle = ::GetStockObject(BLACK_PEN);
  33.     else
  34.       Handle = ::GetStockObject(WHITE_PEN);
  35.     ShouldDelete = FALSE;
  36.     return;
  37.   }
  38.   Handle = ::CreatePen(style, width, color);
  39.   WARNX(OwlGDI, !Handle, 0, "Cannot create TPen (" << color << " " << width <<
  40.         " " << style << ")");
  41.   CheckValid();
  42.   OBJ_REF_ADD(Handle, Pen);
  43. }
  44.  
  45. TPen::TPen(const LOGPEN far* logPen)
  46. {
  47.   PRECONDITION(logPen);
  48.   Handle = ::CreatePenIndirect((LPLOGPEN)logPen);
  49.   WARNX(OwlGDI, !Handle, 0, "Cannot create TPen from logPen @" <<
  50.         hex << DWORD(LPVOID(logPen)));
  51.   CheckValid();
  52.   OBJ_REF_ADD(Handle, Pen);
  53. }
  54.  
  55. TPen::TPen(const TPen& src)
  56. {
  57.   LOGPEN logPen;
  58.  
  59.   src.GetObject(logPen);
  60.   Handle = ::CreatePenIndirect(&logPen);
  61.   WARNX(OwlGDI, !Handle, 0, "Cannot create TPen from TPen @" <<
  62.         hex << DWORD(LPVOID(&src)));
  63.   CheckValid();
  64.   OBJ_REF_ADD(Handle, Pen);
  65. }
  66.  
  67. #if defined(__WIN32__)
  68. TPen::TPen(DWORD penStyle, DWORD width, const TBrush& brush,
  69.            DWORD styleCount, LPDWORD style)
  70. {
  71.   LOGBRUSH logBrush;
  72.   brush.GetObject(logBrush);
  73.   Handle = ::ExtCreatePen(penStyle, width, &logBrush, styleCount, style);
  74.   WARNX(OwlGDI, !Handle, 0, "Cannot create TPen from brush " << hex << 
  75.         UINT(HBRUSH(brush)));
  76.   CheckValid();
  77.   OBJ_REF_ADD(Handle, Pen);
  78. }
  79.  
  80. TPen::TPen(DWORD penStyle, DWORD width, const LOGBRUSH& logBrush,
  81.            DWORD styleCount, LPDWORD style)
  82. {
  83.   Handle = ::ExtCreatePen(penStyle, width, (LPLOGBRUSH)&logBrush, styleCount,
  84.                           style);
  85.   WARNX(OwlGDI, !Handle, 0, "Cannot create TPen from logBrush @" <<
  86.         hex << DWORD(LPVOID(&logBrush)));
  87.   CheckValid();
  88.   OBJ_REF_ADD(Handle, Pen);
  89. }
  90. #endif
  91.