home *** CD-ROM | disk | FTP | other *** search
/ Windows Graphics Programming / Feng_Yuan_Win32_GDI_DirectX.iso / Samples / Chapt_03 / Handles / creator.cpp next >
Encoding:
C/C++ Source or Header  |  2000-05-11  |  10.3 KB  |  373 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   : creator.cpp                                                         //
  10. //  Description: Testing GDI object creation, Chapter 3                              //
  11. //  Version    : 1.00.000, May 31, 2000                                              //
  12. //-----------------------------------------------------------------------------------//
  13.  
  14. #define OEMRESOURCE
  15. #define NOCRYPT
  16. #define STRICT
  17.  
  18. #include <windows.h>
  19. #include <tchar.h>
  20.  
  21. #include "Creator.h"
  22. #include "gditable.h"
  23.  
  24.  
  25. const LPCTSTR Commands [nTotalCommands] =
  26. {
  27.     _T("GetStockObject(BLACK_BRUSH)"),
  28.     _T("GetStockObject(DKGRAY_BRUSH)"), 
  29.     _T("GetStockObject(GRAY_BRUSH)"), 
  30.     _T("GetStockObject(HOLLOW_BRUSH)"), 
  31.     _T("GetStockObject(LTGRAY_BRUSH)"), 
  32.     _T("GetStockObject(NULL_BRUSH)"), 
  33.     _T("GetStockObject(WHITE_BRUSH)"), 
  34.     _T("GetStockObject(BLACK_PEN)"),  
  35.     _T("GetStockObject(NULL_PEN)"),  
  36.     _T("GetStockObject(WHITE_PEN)"),  
  37.     _T("GetStockObject(ANSI_FIXED_FONT)"),  
  38.     _T("GetStockObject(ANSI_VAR_FONT)"),  
  39.     _T("GetStockObject(DEVICE_DEFAULT_FONT)"),  
  40.     _T("GetStockObject(DEFAULT_GUI_FONT)"),  
  41.     _T("GetStockObject(OEM_FIXED_FONT)"),  
  42.     _T("GetStockObject(SYSTEM_FONT)"),  
  43.     _T("GetStockObject(SYSTEM_FIXED_FONT)"),  
  44.     _T("GetStockObject(DEFAULT_PALETTE)"),  
  45.     
  46.     _T("CreatePen"),
  47.     _T("CreatePenIndirect"),
  48.     _T("ExtCreatePen"),
  49.     
  50.     _T("CreateBrushIndirect"),
  51.     _T("CreateDIBPatternBrushPt"),
  52.     _T("CreateHatchBrush"),
  53.     _T("CreatePatternBrush"),
  54.     _T("CreateSolidBrush"),
  55.     _T("GetSysColorBrush"),
  56.     
  57.     _T("CreateFont"),
  58.     _T("CreateFontIndirect"),
  59.  
  60.     _T("CreateEllipticRgn"),
  61.     _T("CreateEllipticRgnIndirect"),
  62.     _T("CreatePolygonRgn"),
  63.     _T("CreatePolyPolygonRgn"),
  64.     _T("CreateRectRgn"),
  65.     _T("CreateRectRgnIndirect"),
  66.     _T("CreateRoundRectRgn"),
  67.     _T("ExtCreateRegion"),
  68.     _T("PathToRegion"),
  69.     
  70.     _T("CreateDC"),
  71.     _T("CreateIC"),
  72.     _T("CreateCompatibleDC"),
  73.  
  74.     _T("CreatePalette"),
  75.     _T("CreateHalftonePalette"),
  76.  
  77.     _T("CreateBitmap"),
  78.     _T("CreateBitmapIndirect"),
  79.     _T("CreateCompatibleBitmap"),
  80.     _T("CreateDIBitmap"),
  81.     _T("CreatDIBSection"),
  82.     _T("CreateDiscardableBitmap"),
  83.  
  84.     _T("CreateEnhMetaFile")
  85. };
  86.  
  87.  
  88. const LOGPEN   logpen   = 
  89.     { PS_SOLID, 2, RGB(0x55, 0x55, 0x55) };
  90.  
  91. const LOGBRUSH logbrush = 
  92.     { BS_HATCHED, RGB(0xAA, 0x55, 0xFF), HS_VERTICAL };
  93.  
  94. const LOGFONT  logfont  = 
  95.     { 20, 0, 0, 0, FW_NORMAL,
  96.       FALSE, FALSE, FALSE,
  97.       ANSI_CHARSET,
  98.       OUT_TT_PRECIS, 
  99.       CLIP_DEFAULT_PRECIS,
  100.       PROOF_QUALITY,
  101.       VARIABLE_PITCH | FF_ROMAN,
  102.       _T("Times Roman") };
  103.  
  104. const LOGPALETTE logpalette = 
  105.     { 0x300, 1, { 0x44, 0x55, 0x66, PC_EXPLICIT } };
  106.  
  107. const RECT rect = 
  108.     { 10, 20, 400, 200 };
  109.  
  110. const POINT polygon[]  = 
  111.     { { 100, 100 }, { 100, 200 }, { 200, 200 }, { 200, 100 }, { 100, 100 } };
  112.  
  113. const POINT ppolygon[] = 
  114.     {    { 100, 100 }, { 100, 200 }, { 200, 200 }, { 200, 100 }, { 100, 100 },
  115.         { 150, 150 }, { 150, 250 }, { 250, 250 }, { 250, 150 }, { 150, 150 }
  116.     };    
  117.  
  118. const int vertex[] = 
  119.     { 5, 5 };
  120.  
  121. typedef struct
  122.     {
  123.         BITMAPINFOHEADER bmiHeader; 
  124.         unsigned char    bmiBits[8*3*8];
  125.     } CSmallDib;
  126.  
  127. // 8x8 24 bit DIB
  128. const CSmallDib dib = 
  129.     { { sizeof(BITMAPINFOHEADER), 8, 8, 1, 24,  BI_RGB,
  130.         8*3*8, 0, 0, 0, 0
  131.       }, 
  132.  
  133.       { 0,0,0, 1,1,1, 2,2,2, 3,3,3, 4,4,4, 5,5,5, 6,6,6, 7,7,7,
  134.         1,1,1, 2,2,2, 3,3,3, 4,4,4, 5,5,5, 6,6,6, 7,7,7, 0,0,0, 
  135.         2,2,2, 3,3,3, 4,4,4, 5,5,5, 6,6,6, 7,7,7, 0,0,0, 1,1,1, 
  136.         3,3,3, 4,4,4, 5,5,5, 6,6,6, 7,7,7, 0,0,0, 1,1,1, 2,2,2, 
  137.         4,4,4, 5,5,5, 6,6,6, 7,7,7, 0,0,0, 1,1,1, 2,2,2, 3,3,3, 
  138.         5,5,5, 6,6,6, 7,7,7, 0,0,0, 1,1,1, 2,2,2, 3,3,3, 4,4,4, 
  139.         6,6,6, 7,7,7, 0,0,0, 1,1,1, 2,2,2, 3,3,3, 4,4,4, 5,5,5, 
  140.         7,7,7, 0,0,0, 1,1,1, 2,2,2, 3,3,3, 4,4,4, 5,5,5, 6,6,6 
  141.     }
  142.     };
  143.  
  144. unsigned bits[8] = { 1, 2, 3, 4, 5, 6, 7, 8 };
  145.  
  146. const BITMAP bitmap =
  147.     { 0, 8, 8, 2, 1, 1, bits }; 
  148.  
  149. typedef struct SimpleRegion
  150. {
  151.     RGNDATAHEADER header;
  152.     RECT          rect;
  153. } SimpleRegion;
  154.  
  155. const SimpleRegion region =
  156.     {
  157.         { sizeof(RGNDATAHEADER),
  158.           RDH_RECTANGLES,
  159.           1,
  160.           4,
  161.         { 0, 0, 100, 100 }
  162.         },
  163.         { 10, 10, 90, 90 }
  164.     };
  165.  
  166. HGDIOBJ CreateObject(int cmd, HDC hDC, int seq)
  167. {
  168.     void * dibbits;
  169.  
  170.     switch (cmd)
  171.     {
  172.         case obj_BLACK_BRUSH:        
  173.             return GetStockObject(BLACK_BRUSH);
  174.         
  175.         case obj_DKGRAY_BRUSH:        
  176.             return GetStockObject(DKGRAY_BRUSH);
  177.         
  178.         case obj_GRAY_BRUSH:        
  179.             return GetStockObject(GRAY_BRUSH);
  180.         
  181.         case obj_HOLLOW_BRUSH:        
  182.             return GetStockObject(HOLLOW_BRUSH);
  183.         
  184.         case obj_LTGRAY_BRUSH:        
  185.             return GetStockObject(LTGRAY_BRUSH);
  186.         
  187.         case obj_NULL_BRUSH:        
  188.             return GetStockObject(NULL_BRUSH);
  189.         
  190.         case obj_WHITE_BRUSH:  
  191.             return GetStockObject(WHITE_BRUSH);
  192.         
  193.         case obj_BLACK_PEN:  
  194.             return GetStockObject(BLACK_PEN);
  195.         
  196.         case obj_NULL_PEN:  
  197.             return GetStockObject(NULL_PEN);
  198.         
  199.         case obj_WHITE_PEN:  
  200.             return GetStockObject(WHITE_PEN);
  201.         
  202.         case obj_ANSI_FIXED_FONT: 
  203.             return GetStockObject(ANSI_FIXED_FONT);
  204.         
  205.         case obj_ANSI_VAR_FONT: 
  206.             return GetStockObject(ANSI_VAR_FONT);
  207.         
  208.         case obj_DEVICE_DEFAULT_FONT: 
  209.             return GetStockObject(DEVICE_DEFAULT_FONT);
  210.         
  211.         case obj_DEFAULT_GUI_FONT: 
  212.             return GetStockObject(DEFAULT_GUI_FONT);
  213.         
  214.         case obj_OEM_FIXED_FONT: 
  215.             return GetStockObject(OEM_FIXED_FONT);
  216.         
  217.         case obj_SYSTEM_FONT: 
  218.             return GetStockObject(SYSTEM_FONT);
  219.         
  220.         case obj_SYSTEM_FIXED_FONT: 
  221.             return GetStockObject(SYSTEM_FIXED_FONT);
  222.         
  223.         case obj_DEFAULT_PALETTE: 
  224.             return GetStockObject(DEFAULT_PALETTE);
  225.     
  226.         case obj_CreatePen: 
  227.             return CreatePen(PS_SOLID, 2, RGB(0xAA, 0xAA, 0xAA));
  228.         
  229.         case obj_CreatePenIndirect: 
  230.             return CreatePenIndirect(& logpen);
  231.         
  232.         case obj_ExtCreatePen: 
  233.             {
  234.                 DWORD dwStyle[13] = { 1, 9, 6, 1, 1, 4, 
  235.                                       1, 9, 6, 1, 1, 4, 1};
  236.  
  237.                 return ExtCreatePen(PS_GEOMETRIC | PS_USERSTYLE, 5, & logbrush, 13, dwStyle);
  238.             }
  239.  
  240.         case obj_CreateBrushIndirect: 
  241.             return CreateBrushIndirect(& logbrush);
  242.         
  243.         case obj_CreateDIBPatternBrushPt: 
  244.             return CreateDIBPatternBrushPt(& dib, DIB_RGB_COLORS); 
  245.         
  246.         case obj_CreateHatchBrush: 
  247.             return CreateHatchBrush(HS_CROSS, RGB(0xAA, 0xFF, 0x55));
  248.         
  249.         case obj_CreatePatternBrush: 
  250.         {
  251.             HBITMAP hClose = LoadBitmap(NULL, MAKEINTRESOURCE(OBM_CLOSE));
  252.             
  253.             HGDIOBJ hResult = CreatePatternBrush(hClose);
  254.  
  255.             DeleteObject(hClose);
  256.  
  257.             return hResult;
  258.         }
  259.  
  260.         case obj_CreateSolidBrush: 
  261.             return CreateSolidBrush(RGB(0x22, 0x33, 0x44));
  262.         
  263.         case obj_GetSysColorBrush: 
  264.             return GetSysColorBrush(seq);
  265.     
  266.         case obj_CreateFont: 
  267.             return CreateFont(10, 0, 0, 0, FW_NORMAL,
  268.                        FALSE, FALSE, FALSE, ANSI_CHARSET,
  269.                        OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS,
  270.                        PROOF_QUALITY, VARIABLE_PITCH | FF_ROMAN, "Times Roman");
  271.         
  272.         case obj_CreateFontIndirect: 
  273.             { 
  274.                 HGDIOBJ hFont = CreateFontIndirect(& logfont);
  275.  
  276.              // trying to understand pUser
  277.              /*    CGDITable table;
  278.                   GDITableCell cell = table[hFont];
  279.  
  280.                   HGDIOBJ hOld = SelectObject(hDC, hFont);
  281.                 
  282.                   GDITableCell cell1 = table[hFont];
  283.  
  284.                 int width[26];
  285.                   GetCharWidth(hDC, 'A', 'Z', width);
  286.                 
  287.                   GDITableCell cell2 = table[hFont];
  288.                 
  289.                   SelectObject(hDC, hOld);
  290.               */
  291.                 return hFont;
  292.             }
  293.         
  294.         case obj_CreateEllipticRgn: 
  295.             return CreateEllipticRgn(0, 0, 100, 100);
  296.         
  297.         case obj_CreateEllipticRgnIndirect: 
  298.             return CreateEllipticRgnIndirect(& rect);
  299.         
  300.         case obj_CreatePolygonRgn: 
  301.             return CreatePolygonRgn(polygon, sizeof(polygon)/ sizeof(polygon[0]), ALTERNATE);
  302.         
  303.         case obj_CreatePolyPolygonRgn: 
  304.             return CreatePolyPolygonRgn(ppolygon, vertex, 2, ALTERNATE);
  305.         
  306.         case obj_CreateRectRgn: 
  307.             return CreateRectRgn(10, 10, 200, 142);
  308.         
  309.         case obj_CreateRectRgnIndirect: 
  310.             return CreateRectRgnIndirect(& rect);
  311.         
  312.         case obj_CreateRoundRectRgn: 
  313.             return CreateRoundRectRgn(10, 10, 200, 400, 5, 5);
  314.         
  315.         case obj_ExtCreateRegion: 
  316.             return ExtCreateRegion(NULL, sizeof(region), (RGNDATA *) & region);
  317.  
  318.         case obj_PatchToRegion: 
  319.             {
  320.                 BeginPath(hDC);
  321.                 MoveToEx(hDC, 100, 200, NULL);
  322.                 LineTo(hDC, 150, 250);        //  *       *
  323.                 LineTo(hDC, 200, 200);      //  * *   * *
  324.                 LineTo(hDC, 200, 300);      //  *   *   *
  325.                 LineTo(hDC, 100, 300);      //  *       * 
  326.                 LineTo(hDC, 100, 200);      //  *********
  327.                 CloseFigure(hDC);
  328.                 EndPath(hDC);
  329.                 return PathToRegion(hDC);
  330.             }
  331.  
  332.         case obj_CreateDC: 
  333.             return CreateDC("DISPLAY", NULL, NULL, NULL);
  334.         
  335.         case obj_CreateIC: 
  336.             return CreateIC("DISPLAY", NULL, NULL, NULL);
  337.         
  338.         case obj_CreateCompatibleDC: 
  339.             return CreateCompatibleDC(hDC);
  340.  
  341.         case obj_CreatePalette: 
  342.             return CreatePalette(& logpalette);
  343.         
  344.         case obj_CreateHalftonePalette: 
  345.             return CreateHalftonePalette(hDC);
  346.  
  347.         case obj_CreateBitmap: 
  348.             return CreateBitmap(10, 10, 1, 1, dib.bmiBits);
  349.         
  350.         case obj_CreateBitmapIndirect: 
  351.             return CreateBitmapIndirect(& bitmap);
  352.         
  353.         case obj_CreateCompatibleBitmap: 
  354.             return CreateCompatibleBitmap(hDC, 100, 100);
  355.         
  356.         case obj_CreateDIBitmap: 
  357.             return CreateDIBitmap(hDC, & dib.bmiHeader, 0, NULL, NULL, DIB_RGB_COLORS);
  358.         
  359.         case obj_CreateDIBSection: 
  360.             return CreateDIBSection(hDC, (BITMAPINFO *) & dib, 
  361.                         DIB_RGB_COLORS, & dibbits, NULL, 0);
  362.  
  363.         case obj_CreateDiscardableBitmap: 
  364.             return CreateDiscardableBitmap(hDC, 10, 10);
  365.  
  366.         case obj_CreateEnhMetaFile: 
  367.             return CreateEnhMetaFile(hDC, NULL, & rect, "In Memory metafile");
  368.     }
  369.  
  370.     return (HGDIOBJ) 0xFFFFFFFF;
  371. }
  372.  
  373.