home *** CD-ROM | disk | FTP | other *** search
/ Windows Graphics Programming / Feng_Yuan_Win32_GDI_DirectX.iso / Samples / Chapt_05 / Device / DCAttr.cpp next >
Encoding:
C/C++ Source or Header  |  2000-05-11  |  8.6 KB  |  333 lines

  1. //-----------------------------------------------------------------------------------//
  2. //              Windows Graphics Programming: Win32 GDI and DirectDraw               //
  3. //                             ISBN  0-13-086985-6                                   //
  4. //                                                                                   //
  5. //  Written            by  Yuan, Feng                             www.fengyuan.com   //
  6. //  Copyright (c) 2000 by  Hewlett-Packard Company                www.hp.com         //
  7. //  Published          by  Prentice Hall PTR, Prentice-Hall, Inc. www.phptr.com      //
  8. //                                                                                   //
  9. //  FileName   : dcattr.cpp                                                                //
  10. //  Description: KDCAttributes class                                                 //
  11. //  Version    : 1.00.000, May 31, 2000                                              //
  12. //-----------------------------------------------------------------------------------//
  13.  
  14. #define STRICT
  15. #define NOCRYPT
  16. #define _WIN32_WINNT 0x0500
  17. #define WINVER       0x0500
  18.  
  19. #include <windows.h>
  20. #include <tchar.h>
  21. #include <stdio.h>
  22.  
  23. #include "resource.h"
  24.  
  25. #include "..\\..\\include\\property.h"
  26. #include "..\\..\\include\\listview.h"
  27.  
  28. #include "DCAttr.h"
  29.  
  30.  
  31. BOOL KDCAttributes::DlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
  32. {
  33.     switch ( uMsg )
  34.     {
  35.         case WM_INITDIALOG:
  36.             m_hWnd = hWnd;
  37.  
  38.             { 
  39.                 HWND hOK = GetDlgItem(hWnd, IDOK);
  40.  
  41.                 RECT rect;
  42.  
  43.                 GetWindowRect(hOK, & rect);
  44.  
  45.                 HRGN hRgn = CreateEllipticRgn(0, 0, (rect.right - rect.left), (rect.bottom - rect.top));
  46.  
  47.                 SetWindowRgn(hOK, hRgn, TRUE);
  48.             }
  49.  
  50.             m_List.FromDlgItem(hWnd, IDC_DCATTRIBUTES);
  51.  
  52.             return OnInitDialog();
  53.  
  54.         case WM_COMMAND:
  55.             switch ( wParam )
  56.             {
  57.                 case IDOK:
  58.                     EndDialog(hWnd, TRUE);
  59.                     break;
  60.  
  61.                 case MAKELONG(IDC_CREATEDC, BN_SETFOCUS):
  62.                     DumpDC(m_hDC);
  63.                     break;
  64.  
  65.                 case MAKELONG(IDC_GETDC, BN_SETFOCUS):
  66.                     {
  67.                         HDC hDC = GetDC(hWnd);
  68.  
  69.                         DumpDC(hDC);
  70.                 
  71.                         ReleaseDC(hWnd, hDC);
  72.                     }
  73.                     break;
  74.  
  75.                 case MAKELONG(IDC_GETDCPARENT, BN_SETFOCUS):
  76.                     {
  77.                         HDC hDC = GetDC(GetParent(hWnd));
  78.  
  79.                         DumpDC(hDC);
  80.  
  81.                         ReleaseDC(GetParent(hWnd), hDC);
  82.                     }
  83.                     break;
  84.  
  85.                 case MAKELONG(IDC_GETDCOK, BN_SETFOCUS):
  86.                     {
  87.                         HDC hDC = GetDC(GetDlgItem(hWnd, IDOK));
  88.  
  89.                         DumpDC(hDC);
  90.  
  91.                         ReleaseDC(GetDlgItem(hWnd, IDOK), hDC);
  92.                     }
  93.                     break;
  94.  
  95.                 case MAKELONG(IDC_MEMDC, BN_SETFOCUS):
  96.                     {
  97.                         HDC hDC = CreateCompatibleDC(NULL);
  98.  
  99.                         DumpDC(hDC);
  100.  
  101.                         DeleteDC(hDC);
  102.                     }
  103.                     break;
  104.  
  105.                 case MAKELONG(IDC_MEMDC2, BN_SETFOCUS):
  106.                     {
  107.                         HDC hDC = CreateCompatibleDC(NULL);
  108.  
  109.                         HBITMAP hBmp = CreateCompatibleBitmap(NULL, 100, 100);
  110.                         
  111.                         SelectObject(hDC, hBmp);
  112.                         DumpDC(hDC);
  113.                         
  114.                         DeleteDC(hDC);
  115.                         DeleteObject(hBmp);
  116.                     }
  117.                     break;
  118.  
  119.                 case MAKELONG(IDC_WMF, BN_SETFOCUS):
  120.                     {
  121.                         HDC hDC = CreateMetaFile("c:\\t.wmf");
  122.  
  123.                         DumpDC(hDC);
  124.                         
  125.                         DeleteDC(hDC);
  126.                     }
  127.                     break;
  128.  
  129.                 case MAKELONG(IDC_EMF, BN_SETFOCUS):
  130.                     {
  131.                         RECT rect = { 100, 100, 200, 300 };
  132.  
  133.                         HDC hDC = CreateEnhMetaFile(GetDC(GetDesktopWindow()), "c:\\t.emf", 
  134.                             & rect, "Testing");
  135.  
  136.                         DumpDC(hDC);
  137.                         
  138.                         DeleteDC(hDC);
  139.                     }
  140.                     break;
  141.  
  142.                 default:
  143.                     return FALSE;
  144.             }
  145.             return TRUE;
  146.     }
  147.         
  148.     return FALSE;
  149. }
  150.  
  151.  
  152. void KDCAttributes::Add(LPCTSTR pszAttribute, LPCTSTR pszFormat, ...)
  153. {
  154.     va_list ap;
  155.     TCHAR temp[MAX_PATH];
  156.  
  157.     va_start(ap, pszFormat);
  158.     
  159.     vsprintf(temp, pszFormat, ap);
  160.     
  161.     va_end(ap);
  162.  
  163.     m_List.AddItem(0, pszAttribute);
  164.     m_List.AddItem(1, temp);
  165. }
  166.  
  167.  
  168. BOOL KDCAttributes::OnInitDialog(void)
  169. {
  170.     m_List.AddColumn(0, 160, _T("Attribute"));
  171.     m_List.AddColumn(1, 400, _T("Value"));
  172.  
  173.     SendDlgItemMessage(m_hWnd, IDC_CREATEDC, BM_SETCHECK, BST_CHECKED, 0);
  174.     
  175.     DumpDC(m_hDC);
  176.  
  177.     return TRUE;
  178. }
  179.  
  180.  
  181. void KDCAttributes::DumpDC(HDC hDC)
  182. {
  183.     POINT pnt;
  184.     SIZE  size;
  185.  
  186.     m_List.DeleteAll();
  187.  
  188.     Add(_T("Technology"),  _T("%d"), GetDeviceCaps(hDC, TECHNOLOGY));
  189.     Add(_T("width"),       _T("%d"), GetDeviceCaps(hDC, HORZRES));
  190.     Add(_T("height"),       _T("%d"), GetDeviceCaps(hDC, VERTRES));
  191.  
  192.     GetDCOrgEx(hDC, & pnt); 
  193.     Add(_T("DC Origin"), _T("{ %d, %d }"), pnt.x, pnt.y);
  194.  
  195.     TCHAR szTitle[MAX_PATH];
  196.  
  197.     szTitle[0] = 0;
  198.  
  199.     GetWindowText(WindowFromDC(hDC), szTitle, MAX_PATH);
  200.     Add(_T("Window"),    _T("0x%X \"%s\""), WindowFromDC(hDC), szTitle);
  201.  
  202.     Add(_T("Bitmap"),        _T("0x%X"), GetCurrentObject(hDC, OBJ_BITMAP));
  203.  
  204.     Add(_T("Graphics Mode"), _T("%d"), GetGraphicsMode(hDC));
  205.     Add(_T("Mapping Mode"),  _T("%d"), GetMapMode(hDC));
  206.  
  207.     GetViewportExtEx(hDC, & size);
  208.     Add(_T("Viewport Extent"), _T("{ %d, %d }"), size.cx, size.cy);
  209.     
  210.     GetViewportOrgEx(hDC, & pnt);
  211.     Add(_T("Viewport Origin"), _T("{ %d, %d }"), pnt.x, pnt.y);
  212.  
  213.     GetWindowExtEx(hDC, & size);
  214.     Add(_T("Window Extent"), _T("{ %d, %d }"), size.cx, size.cy);
  215.     
  216.     GetWindowOrgEx(hDC, & pnt);
  217.     Add(_T("Window Origin"), _T("{ %d, %d }"), pnt.x, pnt.y);
  218.  
  219.     XFORM xform;
  220.     GetWorldTransform(hDC, & xform);
  221.  
  222.     Add(_T("World transformation"), _T("{ %f, %f, %f, %f, %f, %f }"),
  223.         xform.eM11, xform.eM12, xform.eM21, xform.eM22, xform.eDx, xform.eDy);
  224.  
  225.     // transformation
  226.  
  227.     Add(_T("Background Color"), _T("0x%X"), GetBkColor(hDC));
  228.     Add(_T("Text Color"),       _T("0x%X"), GetTextColor(hDC));
  229.     Add(_T("Palette"),          _T("0x%X"), GetCurrentObject(hDC, OBJ_PAL));
  230.  
  231.     {
  232.         COLORADJUSTMENT ca;
  233.         GetColorAdjustment(hDC, & ca);
  234.     
  235.         Add(_T("Color Adjustment"), _T("{ %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d }"), 
  236.             ca.caSize, ca.caFlags, ca.caIlluminantIndex,
  237.             ca.caRedGamma, ca.caGreenGamma, ca.caBlueGamma, 
  238.             ca.caReferenceBlack, ca.caReferenceWhite,
  239.             ca.caContrast, ca.caBrightness, ca.caColorfulness, ca.caRedGreenTint);
  240.     }
  241.  
  242.     Add(_T("Color Space"), _T("0x%X"), GetColorSpace(hDC));
  243.     Add(_T("ICM Mode"),    _T("%d"),   SetICMMode(hDC, ICM_QUERY));
  244.  
  245.     {
  246.         TCHAR szProfile[MAX_PATH];
  247.         DWORD dwSize = MAX_PATH;
  248.  
  249.         szProfile[0] = 0;
  250.         GetICMProfile(hDC, & dwSize, szProfile);
  251.  
  252.         Add(_T("ICM Profile"), _T("%s"), szProfile);
  253.     }
  254.  
  255.     GetCurrentPositionEx(hDC, & pnt);
  256.     Add(_T("Current Position"), _T("{ %d, %d }"), pnt.x, pnt.y);
  257.  
  258.     Add(_T("ROP2"),                _T("%d"),    GetROP2(hDC));
  259.     Add(_T("Background Mode"),    _T("%d"),    GetBkMode(hDC));
  260.     Add(_T("Logical Pen"),        _T("0x%X"), GetCurrentObject(hDC, OBJ_PEN));
  261.     Add(_T("DC Pen Color"),     _T("0x%X"), GetDCPenColor(hDC));
  262.     Add(_T("Arc Direction"),    _T("%d"),    GetArcDirection(hDC));
  263.  
  264.     FLOAT miter;
  265.     GetMiterLimit(hDC, & miter);
  266.  
  267.     Add(_T("Miter Limit"),        _T("%f"),    miter);
  268.     
  269.     Add(_T("Logical Brush"),    _T("0x%X"), GetCurrentObject(hDC, OBJ_BRUSH));
  270.     Add(_T("DC Brush Color"),   _T("0x%X"), GetDCBrushColor(hDC));
  271.  
  272.     GetBrushOrgEx(hDC, & pnt);
  273.     Add(_T("Brush Origin"),     _T("{ %d, %d }"), pnt.x, pnt.y);
  274.  
  275.     Add(_T("Polygon Filling Mode"),   _T("%d"), GetPolyFillMode(hDC));
  276.     Add(_T("Bitmap Stretching Mode"), _T("%d"), GetStretchBltMode(hDC));
  277.     Add(_T("Logical Font"),              _T("0x%X"), GetCurrentObject(hDC, OBJ_FONT));
  278.     Add(_T("Inter-character spacing"), _T("%d"), GetTextCharacterExtra(hDC));
  279.  
  280.     DWORD flag = SetMapperFlags(hDC, 0);
  281.     SetMapperFlags(hDC, flag);
  282.  
  283.     Add(_T("Font Mapper Flags"),       _T("0x%X"), flag);
  284.  
  285.     Add(_T("Text Alignment"),           _T("0x%X"), GetTextAlign(hDC));
  286.  
  287.     Add(_T("Text Justification"),      _T("write only"), 0);
  288.  
  289.     Add(_T("Layout"),                  _T("%d"), GetLayout(hDC));
  290.  
  291.     Add(_T("Path"),                       _T("%d bytes"), GetPath(hDC, NULL, NULL, 0));
  292.  
  293.     RECT rect;
  294.  
  295.     int typ = GetClipBox(hDC, & rect);
  296.  
  297.     HRGN hRgn = CreateRectRgn(0, 0, 1, 1);
  298.     
  299.     GetClipRgn(hDC, hRgn);
  300.  
  301.     Add(_T("Clipping"),                   _T("type %d clip box { %d, %d, %d, %d } size %d bytes"), 
  302.         typ, rect.left, rect.top, rect.right, rect.bottom,
  303.         GetRegionData(hRgn, 0, NULL)
  304.         );
  305.     
  306.     GetMetaRgn(hDC, hRgn);
  307.  
  308.     GetRgnBox(hRgn, & rect);
  309.     Add(_T("Meta Region"), _T("size %d bytes, rgn box { %d, %d, %d, %d }"), 
  310.         GetRegionData(hRgn, 0, NULL), rect.left, rect.top, rect.right, rect.bottom);
  311.  
  312.     for (int i=1; i<=5; i++)
  313.     {
  314.         int rslt = GetRandomRgn(hDC, hRgn, i);
  315.  
  316.         if ( rslt==1 )
  317.         {
  318.             GetRgnBox(hRgn, & rect);
  319.             Add(_T("Random Region"), _T("size %d bytes, rgn box { %d, %d, %d, %d }"), 
  320.             GetRegionData(hRgn, 0, NULL), rect.left, rect.top, rect.right, rect.bottom);
  321.         }
  322.         else if ( rslt==0 )
  323.             Add(_T("Random Region"), _T("NULL"), 0);
  324.         else
  325.             Add(_T("Random Region"), _T("FAIL"), 0);
  326.     }
  327.     DeleteObject(hRgn);
  328.  
  329.     GetBoundsRect(hDC, & rect, 0);
  330.  
  331.     Add(_T("Bounds Rectangle"),        _T("{ %d, %d, %d, %d }"), 
  332.         rect.left, rect.top, rect.right, rect.bottom);
  333. }