home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / graphics / directx / misc / lbprintf.c < prev    next >
C/C++ Source or Header  |  1997-10-14  |  8KB  |  233 lines

  1. /*==========================================================================
  2.  *
  3.  *  Copyright (C) 1995 Microsoft Corporation. All Rights Reserved.
  4.  *
  5.  *  File:    lbprintf.c
  6.  *  Content:    Routines to display text in a listbox
  7.  *
  8.  ***************************************************************************/
  9. #define WIN32_LEAN_AND_MEAN
  10. #include <windows.h>
  11. #include <windowsx.h>
  12. #include <ddraw.h>
  13. #include "lbprintf.h"
  14.  
  15. static HWND    hWndListBox;
  16. static DWORD    dwPos;
  17.  
  18. /*
  19.  * LBCreate
  20.  *
  21.  * Create a list box on a given parent window
  22.  */
  23. void LBCreate( HWND hWnd, DWORD pos )
  24. {
  25.     hWndListBox = CreateWindow(
  26.     "listbox",        // class
  27.     NULL,            // caption
  28.     WS_BORDER | WS_CHILDWINDOW | WS_VSCROLL | LBS_NOINTEGRALHEIGHT,    // style
  29.     0,            // x pos
  30.     0,            // y pos
  31.     0,            // width
  32.     0,            // height
  33.     hWnd,            // parent window
  34.     NULL,            // menu 
  35.     GetWindowInstance( hWnd ), // instance
  36.     NULL            // parms
  37.     );
  38.  
  39.     ShowWindow( hWndListBox, SW_NORMAL );
  40.     UpdateWindow( hWndListBox );
  41.  
  42.     dwPos = pos;
  43.     if( dwPos > 100 )
  44.     {
  45.     dwPos = 100;
  46.     }
  47.  
  48. } /* LBCreate */
  49.  
  50. /*
  51.  * LBSize
  52.  *
  53.  * New size for the listbox.   Should be called whenever the parent window
  54.  * is resized
  55.  */
  56. void LBSize( DWORD width, DWORD height )
  57. {
  58.     DWORD    y;
  59.  
  60.     y = (height*(100-dwPos))/100;
  61.     MoveWindow( hWndListBox, 0, y, width-1, height-y-1, TRUE );
  62.  
  63. } /* LBSize */
  64.  
  65. /*
  66.  * LBClear
  67.  *
  68.  * Clear the listbox
  69.  */
  70. void LBClear( void )
  71. {
  72.     SendMessage( hWndListBox, LB_RESETCONTENT, 0, 0L );
  73.  
  74. } /* LBClear */
  75.  
  76. /*
  77.  * LBPrintf
  78.  */
  79. void __cdecl LBPrintf( LPSTR fmt, ... )
  80. {
  81.     char    buff[512];
  82.     UINT    sel;
  83.  
  84.     va_list marker;
  85.     va_start (marker,fmt);
  86.  
  87.     wvsprintf( buff, fmt, marker );
  88.     SendMessage( hWndListBox, LB_ADDSTRING, 0, (LONG) (LPSTR) buff );
  89.     sel = (UINT) SendMessage( hWndListBox, LB_GETCOUNT, 0, 0L );
  90.     if( sel != LB_ERR )
  91.     {
  92.     SendMessage( hWndListBox, LB_SETCURSEL, sel-1, 0L );
  93.     }
  94.  
  95. } /* LBPrintf */
  96.  
  97. typedef struct
  98. {
  99.     HRESULT    rval;
  100.     LPSTR    str;
  101. } ERRLIST;
  102.  
  103. static ERRLIST elErrors[] =
  104. {
  105.     { DD_OK, "DD_OK" },
  106.     { DDERR_ALREADYINITIALIZED, "DDERR_ALREADYINITIALIZED" },
  107.     { DDERR_CANNOTATTACHSURFACE, "DDERR_CANNOTATTACHSURFACE" },
  108.     { DDERR_CANNOTDETACHSURFACE, "DDERR_CANNOTDETACHSURFACE" },
  109.     { DDERR_CURRENTLYNOTAVAIL, "DDERR_CURRENTLYNOTAVAIL" },
  110.     { DDERR_EXCEPTION, "DDERR_EXCEPTION" },
  111.     { DDERR_GENERIC, "DDERR_GENERIC" },
  112.     { DDERR_HEIGHTALIGN, "DDERR_HEIGHTALIGN" },
  113.     { DDERR_INCOMPATIBLEPRIMARY, "DDERR_INCOMPATIBLEPRIMARY" },
  114.     { DDERR_INVALIDCAPS, "DDERR_INVALIDCAPS" },
  115.     { DDERR_INVALIDCLIPLIST, "DDERR_INVALIDCLIPLIST" },
  116.     { DDERR_INVALIDMODE, "DDERR_INVALIDMODE" },
  117.     { DDERR_INVALIDOBJECT, "DDERR_INVALIDOBJECT" },
  118.     { DDERR_INVALIDPARAMS, "DDERR_INVALIDPARAMS" },
  119.     { DDERR_INVALIDPIXELFORMAT, "DDERR_INVALIDPIXELFORMAT" },
  120.     { DDERR_INVALIDRECT, "DDERR_INVALIDRECT" },
  121.     { DDERR_LOCKEDSURFACES, "DDERR_LOCKEDSURFACES" },
  122.     { DDERR_NO3D, "DDERR_NO3D" },
  123.     { DDERR_NOALPHAHW, "DDERR_NOALPHAHW" },
  124.     { DDERR_NOCLIPLIST, "DDERR_NOCLIPLIST" },
  125.     { DDERR_NOCOLORCONVHW, "DDERR_NOCOLORCONVHW" },
  126.     { DDERR_NOCOOPERATIVELEVELSET, "DDERR_NOCOOPERATIVELEVELSET" },
  127.     { DDERR_NOCOLORKEY, "DDERR_NOCOLORKEY" },
  128.     { DDERR_NOCOLORKEYHW, "DDERR_NOCOLORKEYHW" },
  129.     { DDERR_NOEXCLUSIVEMODE, "DDERR_NOEXCLUSIVEMODE" },
  130.     { DDERR_NOFLIPHW, "DDERR_NOFLIPHW" },
  131.     { DDERR_NOGDI, "DDERR_NOGDI" },
  132.     { DDERR_NOMIRRORHW, "DDERR_NOMIRRORHW" },
  133.     { DDERR_NOTFOUND, "DDERR_NOTFOUND" },
  134.     { DDERR_NOOVERLAYHW, "DDERR_NOOVERLAYHW" },
  135.     { DDERR_NORASTEROPHW, "DDERR_NORASTEROPHW" },
  136.     { DDERR_NOROTATIONHW, "DDERR_NOROTATIONHW" },
  137.     { DDERR_NOSTRETCHHW, "DDERR_NOSTRETCHHW" },
  138.     { DDERR_NOT4BITCOLOR, "DDERR_NOT4BITCOLOR" },
  139.     { DDERR_NOT4BITCOLORINDEX, "DDERR_NOT4BITCOLORINDEX" },
  140.     { DDERR_NOT8BITCOLOR, "DDERR_NOT8BITCOLOR" },
  141.     { DDERR_NOTEXTUREHW, "DDERR_NOTEXTUREHW" },
  142.     { DDERR_NOVSYNCHW, "DDERR_NOVSYNCHW" },
  143.     { DDERR_NOZBUFFERHW, "DDERR_NOZBUFFERHW" },
  144.     { DDERR_NOZOVERLAYHW, "DDERR_NOZOVERLAYHW" },
  145.     { DDERR_OUTOFCAPS, "DDERR_OUTOFCAPS" },
  146.     { DDERR_OUTOFMEMORY, "DDERR_OUTOFMEMORY" },
  147.     { DDERR_OUTOFVIDEOMEMORY, "DDERR_OUTOFVIDEOMEMORY" },
  148.     { DDERR_OVERLAYCANTCLIP, "DDERR_OVERLAYCANTCLIP" },
  149.     { DDERR_OVERLAYCOLORKEYONLYONEACTIVE, "DDERR_OVERLAYCOLORKEYONLYONEACTIVE" },
  150.     { DDERR_PALETTEBUSY, "DDERR_PALETTEBUSY" },
  151.     { DDERR_COLORKEYNOTSET, "DDERR_COLORKEYNOTSET" },
  152.     { DDERR_SURFACEALREADYATTACHED, "DDERR_SURFACEALREADYATTACHED" },
  153.     { DDERR_SURFACEALREADYDEPENDENT, "DDERR_SURFACEALREADYDEPENDENT" },
  154.     { DDERR_SURFACEBUSY, "DDERR_SURFACEBUSY" },
  155.     { DDERR_SURFACEISOBSCURED, "DDERR_SURFACEISOBSCURED" },
  156.     { DDERR_SURFACELOST, "DDERR_SURFACELOST" },
  157.     { DDERR_SURFACENOTATTACHED, "DDERR_SURFACENOTATTACHED" },
  158.     { DDERR_TOOBIGHEIGHT, "DDERR_TOOBIGHEIGHT" },
  159.     { DDERR_TOOBIGSIZE, "DDERR_TOOBIGSIZE" },
  160.     { DDERR_TOOBIGWIDTH, "DDERR_TOOBIGWIDTH" },
  161.     { DDERR_UNSUPPORTED, "DDERR_UNSUPPORTED" },
  162.     { DDERR_UNSUPPORTEDFORMAT, "DDERR_UNSUPPORTEDFORMAT" },
  163.     { DDERR_UNSUPPORTEDMASK, "DDERR_UNSUPPORTEDMASK" },
  164.     { DDERR_VERTICALBLANKINPROGRESS, "DDERR_VERTICALBLANKINPROGRESS" },
  165.     { DDERR_WASSTILLDRAWING, "DDERR_WASSTILLDRAWING" },
  166.     { DDERR_XALIGN, "DDERR_XALIGN" },
  167.     { DDERR_INVALIDDIRECTDRAWGUID, "DDERR_INVALIDDIRECTDRAWGUID" },
  168.     { DDERR_DIRECTDRAWALREADYCREATED, "DDERR_DIRECTDRAWALREADYCREATED" },
  169.     { DDERR_NODIRECTDRAWHW, "DDERR_NODIRECTDRAWHW" },
  170.     { DDERR_PRIMARYSURFACEALREADYEXISTS, "DDERR_PRIMARYSURFACEALREADYEXISTS" },
  171.     { DDERR_NOEMULATION, "DDERR_NOEMULATION" },
  172.     { DDERR_REGIONTOOSMALL, "DDERR_REGIONTOOSMALL" },
  173.     { DDERR_CLIPPERISUSINGHWND, "DDERR_CLIPPERISUSINGHWND" },
  174.     { DDERR_NOCLIPPERATTACHED, "DDERR_NOCLIPPERATTACHED" },
  175.     { DDERR_NOHWND, "DDERR_NOHWND" },
  176.     { DDERR_HWNDSUBCLASSED, "DDERR_HWNDSUBCLASSED" },
  177.     { DDERR_HWNDALREADYSET, "DDERR_HWNDALREADYSET" },
  178.     { DDERR_NOPALETTEATTACHED, "DDERR_NOPALETTEATTACHED" },
  179.     { DDERR_NOPALETTEHW, "DDERR_NOPALETTEHW" },
  180.     { DDERR_BLTFASTCANTCLIP, "DDERR_BLTFASTCANTCLIP" },
  181.     { DDERR_NOBLTHW, "DDERR_NOBLTHW" },
  182.     { DDERR_NODDROPSHW, "DDERR_NODDROPSHW" },
  183.     { DDERR_OVERLAYNOTVISIBLE, "DDERR_OVERLAYNOTVISIBLE" },
  184.     { DDERR_NOOVERLAYDEST, "DDERR_NOOVERLAYDEST" },
  185.     { DDERR_INVALIDPOSITION, "DDERR_INVALIDPOSITION" },
  186.     { DDERR_NOTAOVERLAYSURFACE, "DDERR_NOTAOVERLAYSURFACE" },
  187.     { DDERR_EXCLUSIVEMODEALREADYSET, "DDERR_EXCLUSIVEMODEALREADYSET" },
  188.     { DDERR_NOTFLIPPABLE, "DDERR_NOTFLIPPABLE" },
  189.     { DDERR_CANTDUPLICATE, "DDERR_CANTDUPLICATE" },
  190.     { DDERR_NOTLOCKED, "DDERR_NOTLOCKED" },
  191.     { DDERR_CANTCREATEDC, "DDERR_CANTCREATEDC" },
  192.     { DDERR_NODC, "DDERR_NODC" },
  193.     { DDERR_WRONGMODE, "DDERR_WRONGMODE" },
  194.     { DDERR_IMPLICITLYCREATED, "DDERR_IMPLICITLYCREATED" },
  195. };
  196.  
  197. /*
  198.  * getErrorString
  199.  */
  200. static LPSTR getErrorString( HRESULT ddrval )
  201. {
  202.     int    i;
  203.  
  204.     for( i=0;i<sizeof( elErrors )/sizeof( elErrors[0] );i++ )
  205.     {
  206.     if( ddrval == elErrors[i].rval )
  207.     {
  208.         return elErrors[i].str;
  209.     }
  210.     }
  211.     return "Unknown Error Code";
  212.  
  213.  
  214. } /* getErrorString */
  215.  
  216. /*
  217.  * LBPrintfDDRC
  218.  *
  219.  * Display a DirectDraw error code in human readable form
  220.  */
  221. void __cdecl LBPrintfDDRC( HRESULT ddrval, LPSTR fmt, ... )
  222. {
  223.     char    buff[512];
  224.  
  225.     va_list marker;
  226.     va_start (marker,fmt);
  227.  
  228.     wvsprintf( buff, fmt, marker );
  229.     LBPrintf( "%s, rc=%ld (0x%08lx:%s)", buff, LOWORD( ddrval ),
  230.                 ddrval, getErrorString( ddrval ) );
  231.  
  232. } /* LBPrintfDDRC */
  233.