DEBUG.CPP
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:34k
源码类别:

Windows编程

开发平台:

Visual C++

  1. /*
  2. **-----------------------------------------------------------------------------
  3. ** Name:    Debug.cpp
  4. ** Purpose: Example debug code for D3D sample
  5. ** Notes:
  6. **
  7. ** Copyright (C) 199 - 1997 Microsoft Corporation. All Rights Reserved.
  8. **-----------------------------------------------------------------------------
  9. */
  10. /*
  11. **-----------------------------------------------------------------------------
  12. ** Includes
  13. **-----------------------------------------------------------------------------
  14. */
  15. #include "Debug.h"
  16. #include "WinMain.h"
  17. #include "WinProc.h"
  18. /*
  19. **-----------------------------------------------------------------------------
  20. ** Global variables
  21. **-----------------------------------------------------------------------------
  22. */
  23. #ifdef DEBUG
  24.     DWORD   g_dwDebugLevel = DEBUG_ALWAYS;
  25.     BOOL    g_fDebug = TRUE;
  26. #else
  27.     BOOL    g_fDebug = FALSE;
  28. #endif
  29. /*
  30. **-----------------------------------------------------------------------------
  31. ** Local prototypes
  32. **-----------------------------------------------------------------------------
  33. */
  34. BOOL GetDDErrorString (HRESULT hResult, LPTSTR lpszError, DWORD cchError);
  35. /*
  36. **-----------------------------------------------------------------------------
  37. ** Functions
  38. **-----------------------------------------------------------------------------
  39. */
  40. /*
  41. **-----------------------------------------------------------------------------
  42. **  Name:       dprintf
  43. **  Purpose: Printf to debug output
  44. **-----------------------------------------------------------------------------
  45. */
  46. #ifdef DEBUG
  47. void __cdecl dprintf (DWORD dwDebugLevel, LPCTSTR szFormat, ...)
  48. {
  49.     TCHAR   szBuffer[MAX_STRING];
  50.     va_list va;
  51. // Check if current debug level
  52.     if (dwDebugLevel <= g_dwDebugLevel)
  53.     return;
  54.     
  55.     lstrcpy (szBuffer, START_STR);
  56.     va_start( va, szFormat );
  57.     wvsprintf (szBuffer+lstrlen (szBuffer), szFormat, va);
  58.     va_end( va );
  59.     lstrcat (szBuffer, END_STR);
  60.     OutputDebugString (szBuffer);
  61. }
  62. #endif // DEBUG
  63. /*
  64. **-----------------------------------------------------------------------------
  65. ** Name:    ReportDDError
  66. ** Purpose: 
  67. **-----------------------------------------------------------------------------
  68. */
  69. void _cdecl ReportDDError (HRESULT hResult, LPCTSTR szFormat, ...)
  70. {
  71.     TCHAR   szMsg[MAX_STRING];
  72.     TCHAR   szErr[MAX_STRING];
  73.     TCHAR   szUnknown[] = TEXT("Unknown");
  74.     DWORD   cchErr = sizeof(szErr)/sizeof(TCHAR);
  75.     va_list va;
  76.     // Check for Success Error code
  77.     if (hResult == DD_OK)
  78.         return;
  79.     // Get DD/D3D error string
  80.     szErr[0] = 0;
  81.     GetDDErrorString (hResult, szErr, cchErr);    
  82.     wsprintf (szMsg, TEXT("DD/D3D Error = %srn"), szErr);
  83.     va_start( va, szFormat );
  84.     // Append the rest of the error message
  85.     wvsprintf (szMsg + lstrlen(szMsg), szFormat, va);
  86.     va_end( va );
  87.     // Dump to debugger
  88.     DPF (DEBUG_ERROR, TEXT("%s"), szMsg);
  89. //
  90. // Define the following if you want an in your face Messagebox on errors
  91. //
  92. #ifdef DEBUG_PROMPT_ME
  93.     HWND    hWindow;
  94.     // Pause App
  95. if (g_hMainWindow)
  96. OnPause (g_hMainWindow, TRUE);
  97.     // Display Error Message to user
  98.     if (g_hMainWindow)
  99.         hWindow = g_hMainWindow;
  100.     else
  101.         hWindow = NULL;
  102.     MessageBox (hWindow, szMsg, g_szMainTitle, MB_OK | MB_APPLMODAL);
  103.     // Unpause app
  104. if (g_hMainWindow)
  105. OnPause (g_hMainWindow, FALSE);
  106. #endif // DEBUG_PROMPT_ME
  107. } // ReportDDError
  108. /*
  109. **-----------------------------------------------------------------------------
  110. ** Name:    GetDDErrorString
  111. ** Purpose: outputs a debug string to debugger
  112. **-----------------------------------------------------------------------------
  113. */
  114. BOOL GetDDErrorString (HRESULT hResult, LPTSTR lpszErrorBuff, DWORD cchError)
  115. {
  116.     DWORD  cLen;
  117.     LPTSTR lpszError;
  118.     TCHAR  szMsg[MAX_STRING];
  119.     // Check parameters
  120.     if (!lpszErrorBuff || !cchError)
  121.     {
  122.         // Error, invalid parameters
  123.         return FALSE;
  124.     }
  125.     switch (hResult)
  126.     {
  127.     case DD_OK:
  128.         // The request completed successfully.
  129.         lpszError = TEXT("DD_OK");
  130.         break;
  131.     case DDERR_ALREADYINITIALIZED:
  132.         // The object has already been initialized.
  133.         lpszError = TEXT("DDERR_ALREADYINITIALIZED");
  134.         break;
  135.     case DDERR_BLTFASTCANTCLIP:
  136.         // A DirectDrawClipper object is attached to a source surface 
  137.         // that has passed into a call to the IDirectDrawSurface2::BltFast method. 
  138.         lpszError = TEXT("DDERR_BLTFASTCANTCLIP");
  139.         break;
  140.     case DDERR_CANNOTATTACHSURFACE:
  141.         // A surface cannot be attached to another requested surface. 
  142.         lpszError = TEXT("DDERR_CANNOTATTACHSURFACE");
  143.         break;
  144.     case DDERR_CANNOTDETACHSURFACE:
  145.         // A surface cannot be detached from another requested surface. 
  146.         lpszError = TEXT("DDERR_CANNOTDETACHSURFACE");
  147.         break;
  148.     case DDERR_CANTCREATEDC:
  149.         // Windows cannot create any more device contexts (DCs). 
  150.         lpszError = TEXT("DDERR_CANTCREATEDC");
  151.         break;
  152.     case DDERR_CANTDUPLICATE:
  153.         // Primary and 3D surfaces, or surfaces that are 
  154.         // implicitly created, cannot be duplicated. 
  155.         lpszError = TEXT("DDERR_CANTDUPLICATE");
  156.         break;
  157.     case DDERR_CANTLOCKSURFACE:
  158.         // Access to this surface is refused because an 
  159.         // attempt was made to lock the primary surface without DCI support. 
  160.         lpszError = TEXT("DDERR_CANTLOCKSURFACE"); 
  161.         break;
  162.     case DDERR_CANTPAGELOCK:
  163.         // An attempt to page lock a surface failed. 
  164.         // Page lock will not work on a display-memory 
  165.         // surface or an emulated primary surface.
  166.         lpszError = TEXT("DDERR_CANTPAGELOCK"); 
  167.         break;
  168.     case DDERR_CANTPAGEUNLOCK:
  169.         // An attempt to page unlock a surface failed. 
  170.         // Page unlock will not work on a display-memory 
  171.         // surface or an emulated primary surface. 
  172.         lpszError = TEXT("DDERR_CANTPAGEUNLOCK");
  173.         break;
  174.     case DDERR_CLIPPERISUSINGHWND:
  175.         // An attempt was made to set a clip list for a DirectDrawClipper 
  176.         // object that is already monitoring a window handle. 
  177.         lpszError = TEXT("DDERR_CLIPPERISUSINGHWND");
  178.         break;
  179.     case DDERR_COLORKEYNOTSET:
  180.         // No source color key is specified for this operation
  181.         lpszError = TEXT("DDERR_COLORKEYNOTSET");
  182.         break;
  183.     case DDERR_CURRENTLYNOTAVAIL:
  184.         // No support is currently available. 
  185.         lpszError = TEXT("DDERR_CURRENTLYNOTAVAIL");
  186.         break;
  187.     case DDERR_DCALREADYCREATED:
  188.         // A device context (DC) has already been returned for this surface. 
  189.         // Only one DC can be retrieved for each surface. 
  190.         lpszError = TEXT("DDERR_DCALREADYCREATED");
  191.         break;
  192.     case DDERR_DIRECTDRAWALREADYCREATED:
  193.         // A DirectDraw object representing this driver 
  194.         // has already been created for this process. 
  195.         lpszError = TEXT("DDERR_DIRECTDRAWALREADYCREATED");
  196.         break;
  197.     case DDERR_EXCEPTION:
  198.         // An exception was encountered while 
  199.         // performing the requested operation. 
  200.         lpszError = TEXT("DDERR_EXCEPTION");
  201.         break;
  202.     case DDERR_EXCLUSIVEMODEALREADYSET:
  203.         // An attempt was made to set the cooperative 
  204.         // level when it was already set to exclusive. 
  205.         lpszError = TEXT("DDERR_EXCLUSIVEMODEALREADYSET");
  206.         break;
  207.     case DDERR_GENERIC:
  208.         // There is an undefined error condition. 
  209.         lpszError = TEXT("DDERR_GENERIC");
  210.         break;
  211.     case DDERR_HEIGHTALIGN:
  212.         // The height of the provided rectangle 
  213.         // is not a multiple of the required alignment. 
  214.         lpszError = TEXT("DDERR_HEIGHTALIGN");
  215.         break;
  216.     case DDERR_HWNDALREADYSET:
  217.         // The DirectDraw cooperative level window 
  218.         // handle has already been set. It cannot 
  219.         // be reset while the process has surfaces or palettes created. 
  220.         lpszError = TEXT("DDERR_HWNDALREADYSET");
  221.         break;
  222.     case DDERR_HWNDSUBCLASSED:
  223.         // DirectDraw is prevented from restoring state because the
  224.         // DirectDraw cooperative level window handle has been subclassed. 
  225.         lpszError = TEXT("DDERR_HWNDSUBCLASSED");
  226.         break;
  227.     case DDERR_IMPLICITLYCREATED:
  228.         // The surface cannot be restored because 
  229.         // it is an implicitly created surface. 
  230.         lpszError = TEXT("DDERR_IMPLICITLYCREATED");
  231.         break;
  232.  
  233.     case DDERR_INCOMPATIBLEPRIMARY:
  234.         // The primary surface creation request 
  235.         // does not match with the existing primary surface. 
  236.         lpszError = TEXT("DDERR_INCOMPATIBLEPRIMARY");
  237.         break;
  238.     case DDERR_INVALIDCAPS:
  239.         // One or more of the capability bits 
  240.         // passed to the callback function are incorrect. 
  241.         lpszError = TEXT("DDERR_INVALIDCAPS");
  242.         break;
  243.     case DDERR_INVALIDCLIPLIST:
  244.         // DirectDraw does not support the provided clip list.  
  245.         lpszError = TEXT("DDERR_INVALIDCLIPLIST");
  246.         break;
  247.     case DDERR_INVALIDDIRECTDRAWGUID:
  248.         // The globally unique identifier (GUID) passed to the
  249.         // DirectDrawCreate function is not a valid DirectDraw driver identifier. 
  250.         lpszError = TEXT("DDERR_INVALIDDIRECTDRAWGUID");
  251.         break;
  252.     case DDERR_INVALIDMODE:
  253.         // DirectDraw does not support the requested mode. 
  254.         lpszError = TEXT("DDERR_INVALIDMODE");
  255.         break;
  256.     case DDERR_INVALIDOBJECT:
  257.         // DirectDraw received a pointer that was an invalid DirectDraw object. 
  258.         lpszError = TEXT("DDERR_INVALIDOBJECT");
  259.         break;
  260.     case DDERR_INVALIDPARAMS:
  261.         // One or more of the parameters passed to the method are incorrect. 
  262.         lpszError = TEXT("DDERR_INVALIDPARAMS");
  263.         break;
  264.     case DDERR_INVALIDPIXELFORMAT:
  265.         // The pixel format was invalid as specified. 
  266.         lpszError = TEXT("DDERR_INVALIDPIXELFORMAT");
  267.         break;
  268.     case DDERR_INVALIDPOSITION:
  269.         // The position of the overlay on the destination is no longer legal. 
  270.         lpszError = TEXT("DDERR_INVALIDPOSITION");
  271.         break;
  272.     case DDERR_INVALIDRECT:
  273.         // The provided rectangle was invalid. 
  274.         lpszError = TEXT("DDERR_INVALIDRECT");
  275.         break;
  276.     case DDERR_INVALIDSURFACETYPE:
  277.         // The requested operation could not be performed
  278.         // because the surface was of the wrong type. 
  279.         lpszError = TEXT("DDERR_INVALIDSURFACETYPE");
  280.         break;
  281.     case DDERR_LOCKEDSURFACES:
  282.         // One or more surfaces are locked, 
  283.         // causing the failure of the requested operation. 
  284.         lpszError = TEXT("DDERR_LOCKEDSURFACES");
  285.         break;
  286.     case DDERR_MOREDATA:
  287.         // There is more data available than the specified 
  288.         // buffer size could hold.
  289.         lpszError = TEXT("DDERR_MOREDATA");
  290.         break;
  291.     case DDERR_NO3D:
  292.         // No 3D hardware or emulation is present. 
  293.         lpszError = TEXT("DDERR_NO3D");
  294.         break;
  295.     case DDERR_NOALPHAHW:
  296.         // No alpha acceleration hardware is present or available, 
  297.         // causing the failure of the requested operation. 
  298.         lpszError = TEXT("DDERR_NOALPHAHW");
  299.         break;
  300.     case DDERR_NOBLTHW:
  301.         // No blitter hardware is present. 
  302.         lpszError = TEXT("DDERR_NOBLTHW");
  303.         break;
  304.     case DDERR_NOCLIPLIST:
  305.         // No clip list is available. 
  306.         lpszError = TEXT("DDERR_NOCLIPLIST");
  307.         break;
  308.     case DDERR_NOCLIPPERATTACHED:
  309.         // No DirectDrawClipper object is attached to the surface object. 
  310.         lpszError = TEXT("DDERR_NOCLIPPERATTACHED");
  311.         break;
  312.     case DDERR_NOCOLORCONVHW:
  313.         // The operation cannot be carried out because 
  314.         // no color-conversion hardware is present or available. 
  315.         lpszError = TEXT("DDERR_NOCOLORCONVHW");
  316.         break;
  317.     case DDERR_NOCOLORKEY:
  318.         // The surface does not currently have a color key. 
  319.         lpszError = TEXT("DDERR_NOCOLORKEY");
  320.         break;
  321.     case DDERR_NOCOLORKEYHW:
  322.         // The operation cannot be carried out because there 
  323.         // is no hardware support for the destination color key. 
  324.         lpszError = TEXT("DDERR_NOCOLORKEYHW");
  325.         break;
  326.     case DDERR_NOCOOPERATIVELEVELSET:
  327.         // A create function is called without the 
  328.         // IDirectDraw2::SetCooperativeLevel method being called. 
  329.         lpszError = TEXT("DDERR_NOCOOPERATIVELEVELSET");
  330.         break;
  331.     case DDERR_NODC:
  332.         // No DC has ever been created for this surface. 
  333.         lpszError = TEXT("DDERR_NODC");
  334.         break;
  335.     case DDERR_NODDROPSHW:
  336.         // No DirectDraw raster operation (ROP) hardware is available. 
  337.         lpszError = TEXT("DDERR_NODDROPSHW");
  338.         break;
  339.     case DDERR_NODIRECTDRAWHW:
  340.         // Hardware-only DirectDraw object creation is not possible; 
  341.         // the driver does not support any hardware. 
  342.         lpszError = TEXT("DDERR_NODIRECTDRAWHW");
  343.         break;
  344.     case DDERR_NODIRECTDRAWSUPPORT:
  345.         // DirectDraw support is not possible with the current display driver. 
  346.         lpszError = TEXT("DDERR_NODIRECTDRAWSUPPORT");
  347.         break;
  348.     case DDERR_NOEMULATION: 
  349.         // Software emulation is not available. 
  350.         lpszError = TEXT("DDERR_NOEMULATION");
  351.         break;
  352.     case DDERR_NOEXCLUSIVEMODE:
  353.         // The operation requires the application to have 
  354.         // exclusive mode, but the application does not have exclusive mode. 
  355.         lpszError = TEXT("DDERR_NOEXCLUSIVEMODE");
  356.         break;
  357.     case DDERR_NOFLIPHW: 
  358.         // Flipping visible surfaces is not supported. 
  359.         lpszError = TEXT("DDERR_NOFLIPHW");
  360.         break;
  361.     case DDERR_NOGDI: 
  362.         // No GDI is present. 
  363.         lpszError = TEXT("DDERR_NOGDI");
  364.         break;
  365.     case DDERR_NOHWND: 
  366.         // Clipper notification requires a window handle, 
  367.         // or no window handle has been previously set 
  368.         // as the cooperative level window handle. 
  369.         lpszError = TEXT("DDERR_NOHWND");
  370.         break;
  371.     case DDERR_NOMIPMAPHW: 
  372.         // The operation cannot be carried out because no 
  373.         // mipmap texture mapping hardware is present or available. 
  374.         lpszError = TEXT("DDERR_NOMIPMAPHW");
  375.         break;
  376.     case DDERR_NOMIRRORHW: 
  377.         // The operation cannot be carried out because 
  378.         // no mirroring hardware is present or available. 
  379.         lpszError = TEXT("DDERR_NOMIRRORHW");
  380.         break;
  381.     case DDERR_NONONLOCALVIDMEM: 
  382.         // An attempt was made to allocate non-local video memory
  383.         // from a device that does not support non-local video memory.
  384.         lpszError = TEXT("DDERR_NONONLOCALVIDMEM");
  385.         break;
  386.  
  387.     case DDERR_NOOVERLAYDEST: 
  388.         // The IDirectDrawSurface2::GetOverlayPosition method 
  389.         // is called on an overlay that the IDirectDrawSurface2::UpdateOverlay 
  390.         // method has not been called on to establish a destination. 
  391.         lpszError = TEXT("DDERR_NOOVERLAYDEST");
  392.         break;
  393.     case DDERR_NOOVERLAYHW: 
  394.         // The operation cannot be carried out because 
  395.         // no overlay hardware is present or available. 
  396.         lpszError = TEXT("DDERR_NOOVERLAYHW");
  397.         break;
  398.     case DDERR_NOPALETTEATTACHED: 
  399.         // No palette object is attached to this surface. 
  400.         lpszError = TEXT("DDERR_NOPALETTEATTACHED");
  401.         break;
  402.     case DDERR_NOPALETTEHW: 
  403.         // There is no hardware support for 16- or 256-color palettes. 
  404.         lpszError = TEXT("DDERR_NOPALETTEHW");
  405.         break;
  406.     case DDERR_NORASTEROPHW: 
  407.         // The operation cannot be carried out because 
  408.         // no appropriate raster operation hardware is present or available. 
  409.         lpszError = TEXT("DDERR_NORASTEROPHW");
  410.         break;
  411.     case DDERR_NOROTATIONHW: 
  412.         // The operation cannot be carried out because 
  413.         // no rotation hardware is present or available. 
  414.         lpszError = TEXT("DDERR_NOROTATIONHW");
  415.         break;
  416.     case DDERR_NOSTRETCHHW: 
  417.         // The operation cannot be carried out because 
  418.         // there is no hardware support for stretching. 
  419.         lpszError = TEXT("DDERR_NOSTRETCHHW");
  420.         break;
  421.     case DDERR_NOT4BITCOLOR: 
  422.         // The DirectDrawSurface object is not using a 
  423.         // 4-bit color palette and the requested operation 
  424.         // requires a 4-bit color palette. 
  425.         lpszError = TEXT("DDERR_NOT4BITCOLOR");
  426.         break;
  427.     case DDERR_NOT4BITCOLORINDEX: 
  428.         // The DirectDrawSurface object is not using a 4-bit 
  429.         // color index palette and the requested operation 
  430.         // requires a 4-bit color index palette. 
  431.         lpszError = TEXT("DDERR_NOT4BITCOLORINDEX");
  432.         break;
  433.     case DDERR_NOT8BITCOLOR: 
  434.         // The DirectDrawSurface object is not using an 8-bit 
  435.         // color palette and the requested operation requires 
  436.         // an 8-bit color palette. 
  437.         lpszError = TEXT("DDERR_NOT8BITCOLOR");
  438.         break;
  439.     case DDERR_NOTAOVERLAYSURFACE: 
  440.         // An overlay component is called for a non-overlay surface. 
  441.         lpszError = TEXT("DDERR_NOTAOVERLAYSURFACE");
  442.         break;
  443.     case DDERR_NOTEXTUREHW: 
  444.         // The operation cannot be carried out because no 
  445.         // texture-mapping hardware is present or available. 
  446.         lpszError = TEXT("DDERR_NOTEXTUREHW");
  447.         break;
  448.     case DDERR_NOTFLIPPABLE: 
  449.         // An attempt has been made to flip a surface that cannot be flipped. 
  450.         lpszError = TEXT("DDERR_NOTFLIPPABLE");
  451.         break;
  452.     case DDERR_NOTFOUND: 
  453.         // The requested item was not found. 
  454.         lpszError = TEXT("DDERR_NOTFOUND");
  455.         break;
  456.     case DDERR_NOTINITIALIZED: 
  457.         // An attempt was made to call an interface method of a DirectDraw object 
  458.         // created by CoCreateInstance before the object was initialized. 
  459.         lpszError = TEXT("DDERR_NOTINITIALIZED");
  460.         break;
  461.     case DDERR_NOTLOCKED: 
  462.         // An attempt is made to unlock a surface that was not locked. 
  463.         lpszError = TEXT("DDERR_NOTLOCKED");
  464.         break;
  465.     case DDERR_NOTPAGELOCKED: 
  466.         // An attempt is made to page unlock a surface 
  467.         // with no outstanding page locks. 
  468.         lpszError = TEXT("DDERR_NOTPAGELOCKED");
  469.         break;
  470.     case DDERR_NOTPALETTIZED: 
  471.         // The surface being used is not a palette-based surface. 
  472.         lpszError = TEXT("DDERR_NOTPALETTIZED");
  473.         break;
  474.     case DDERR_NOVSYNCHW: 
  475.         // The operation cannot be carried out because 
  476.         // there is no hardware support for vertical blank synchronized operations. 
  477.         lpszError = TEXT("DDERR_NOVSYNCHW");
  478.         break;
  479.     case DDERR_NOZBUFFERHW: 
  480.         // The operation to create a z-buffer in display memory 
  481.         // or to perform a blit using a z-buffer cannot be carried 
  482.         // out because there is no hardware support for z-buffers. 
  483.         lpszError = TEXT("DDERR_NOZBUFFERHW");
  484.         break;
  485.     case DDERR_NOZOVERLAYHW: 
  486.         // The overlay surfaces cannot be z-layered based 
  487.         // on the z-order because the hardware does not 
  488.         // support z-ordering of overlays. 
  489.         lpszError = TEXT("DDERR_NOZOVERLAYHW");
  490.         break;
  491.     case DDERR_OUTOFCAPS: 
  492.         // The hardware needed for the requested operation has already been allocated. 
  493.         lpszError = TEXT("DDERR_OUTOFCAPS");
  494.         break;
  495.     case DDERR_OUTOFMEMORY: 
  496.         // DirectDraw does not have enough memory to perform the operation. 
  497.         lpszError = TEXT("DDERR_OUTOFMEMORY");
  498.         break;
  499.     case DDERR_OUTOFVIDEOMEMORY: 
  500.         // DirectDraw does not have enough display memory to perform the operation. 
  501.         lpszError = TEXT("DDERR_OUTOFVIDEOMEMORY");
  502.         break;
  503.     case DDERR_OVERLAYCANTCLIP: 
  504.         // The hardware does not support clipped overlays. 
  505.         lpszError = TEXT("DDERR_OVERLAYCANTCLIP");
  506.         break;
  507.     case DDERR_OVERLAYCOLORKEYONLYONEACTIVE: 
  508.         // An attempt was made to have more than one color key active on an overlay. 
  509.         lpszError = TEXT("DDERR_OVERLAYCOLORKEYONLYONEACTIVE");
  510.         break;
  511.     case DDERR_OVERLAYNOTVISIBLE: 
  512.         // The IDirectDrawSurface2::GetOverlayPosition method is called on a hidden overlay. 
  513.         lpszError = TEXT("DDERR_OVERLAYNOTVISIBLE");
  514.         break;
  515.     case DDERR_PALETTEBUSY: 
  516.         // Access to this palette is refused 
  517.         // because the palette is locked by another thread. 
  518.         lpszError = TEXT("DDERR_PALETTEBUSY");
  519.         break;
  520.     case DDERR_PRIMARYSURFACEALREADYEXISTS: 
  521.         // This process has already created a primary surface. 
  522.         lpszError = TEXT("DDERR_PRIMARYSURFACEALREADYEXISTS");
  523.         break;
  524.     case DDERR_REGIONTOOSMALL: 
  525.         // The region passed to the 
  526.         // IDirectDrawClipper::GetClipList method is too small. 
  527.         lpszError = TEXT("DDERR_REGIONTOOSMALL");
  528.         break;
  529.     case DDERR_SURFACEALREADYATTACHED: 
  530.         // An attempt was made to attach a surface to 
  531.         // another surface to which it is already attached. 
  532.         lpszError = TEXT("DDERR_SURFACEALREADYATTACHED");
  533.         break;
  534.     case DDERR_SURFACEALREADYDEPENDENT: 
  535.         // An attempt was made to make a surface a dependency 
  536.         // of another surface to which it is already dependent. 
  537.         lpszError = TEXT("DDERR_SURFACEALREADYDEPENDENT");
  538.         break;
  539.     case DDERR_SURFACEBUSY: 
  540.         // Access to the surface is refused because the 
  541.         // surface is locked by another thread. 
  542.         lpszError = TEXT("DDERR_SURFACEBUSY");
  543.         break;
  544.     case DDERR_SURFACEISOBSCURED: 
  545.         // Access to the surface is refused 
  546.         // because the surface is obscured. 
  547.         lpszError = TEXT("DDERR_SURFACEISOBSCURED");
  548.         break;
  549.     case DDERR_SURFACELOST: 
  550.         // Access to the surface is refused because the 
  551.         // surface memory is gone. The DirectDrawSurface 
  552.         // object representing this surface should have 
  553.         // the IDirectDrawSurface2::Restore method called on it. 
  554.         lpszError = TEXT("DDERR_SURFACELOST");
  555.         break;
  556.     case DDERR_SURFACENOTATTACHED: 
  557.         // The requested surface is not attached. 
  558.         lpszError = TEXT("DDERR_SURFACENOTATTACHED");
  559.         break;
  560.     case DDERR_TOOBIGHEIGHT: 
  561.         // The height requested by DirectDraw is too large. 
  562.         lpszError = TEXT("DDERR_TOOBIGHEIGHT");
  563.         break;
  564.     case DDERR_TOOBIGSIZE: 
  565.         // The size requested by DirectDraw is too large. 
  566.         // However, the individual height and width are OK.
  567.         lpszError = TEXT("DDERR_TOOBIGSIZE");
  568.         break;
  569.     case DDERR_TOOBIGWIDTH: 
  570.         // The width requested by DirectDraw is too large. 
  571.         lpszError = TEXT("DDERR_TOOBIGWIDTH");
  572.         break;
  573.     case DDERR_UNSUPPORTED: 
  574.         // The operation is not supported. 
  575.         lpszError = TEXT("DDERR_UNSUPPORTED");
  576.         break;
  577.     case DDERR_UNSUPPORTEDFORMAT: 
  578.         // The FourCC format requested is not supported by DirectDraw. 
  579.         lpszError = TEXT("DDERR_UNSUPPORTEDFORMAT");
  580.         break;
  581.     case DDERR_UNSUPPORTEDMASK: 
  582.         // The bitmask in the pixel format requested is not supported by DirectDraw. 
  583.         lpszError = TEXT("DDERR_UNSUPPORTEDMASK");
  584.         break;
  585.     case DDERR_UNSUPPORTEDMODE: 
  586.         // The display is currently in an unsupported mode. 
  587.         lpszError = TEXT("DDERR_UNSUPPORTEDMODE");
  588.         break;
  589.     case DDERR_VERTICALBLANKINPROGRESS: 
  590.         // A vertical blank is in progress. 
  591.         lpszError = TEXT("DDERR_VERTICALBLANKINPROGRESS");
  592.         break;
  593.     case DDERR_WASSTILLDRAWING: 
  594.         // The previous blit operation that is transferring 
  595.         // information to or from this surface is incomplete. 
  596.         lpszError = TEXT("DDERR_WASSTILLDRAWING");
  597.         break;
  598.     case DDERR_WRONGMODE:
  599.         // This surface cannot be restored because it was created in a different mode. 
  600.         lpszError = TEXT("DDERR_WRONGMODE");
  601.         break;
  602.     case DDERR_XALIGN:
  603.         // The provided rectangle was not horizontally aligned on a required boundary. 
  604.         lpszError = TEXT("DDERR_XALIGN");
  605.         break;
  606.     case DDERR_VIDEONOTACTIVE:
  607.         // The video port is not active
  608.         lpszError = TEXT("DDERR_VIDEONOTACTIVE");
  609.         break;
  610.         //
  611.         // D3D Immediate Mode Errors
  612.         //
  613.     case D3DERR_BADMAJORVERSION:
  614.         // ???
  615.         lpszError = TEXT("D3DERR_BADMAJORVERSION");
  616.         break;
  617.     case D3DERR_BADMINORVERSION:
  618.         // ???
  619.         lpszError = TEXT("D3DERR_BADMINORVERSION");
  620.         break;
  621.     case D3DERR_INVALID_DEVICE:
  622.         // ???
  623.         lpszError = TEXT("D3DERR_INVALID_DEVICE");
  624.         break;
  625.     case D3DERR_INITFAILED:
  626.         // ???
  627.         lpszError = TEXT("D3DERR_INITFAILED");
  628.         break;
  629.     case D3DERR_EXECUTE_CREATE_FAILED:
  630.         // ???
  631.         lpszError = TEXT("D3DERR_EXECUTE_CREATE_FAILED");
  632.         break;
  633.     case D3DERR_EXECUTE_DESTROY_FAILED:
  634.         // ???
  635.         lpszError = TEXT("D3DERR_EXECUTE_DESTROY_FAILED");
  636.         break;
  637.     case D3DERR_EXECUTE_LOCK_FAILED:
  638.         // ???
  639.         lpszError = TEXT("D3DERR_EXECUTE_LOCK_FAILED");
  640.         break;
  641.     case D3DERR_EXECUTE_UNLOCK_FAILED:
  642.         // ???
  643.         lpszError = TEXT("D3DERR_EXECUTE_UNLOCK_FAILED");
  644.         break;
  645.     case D3DERR_EXECUTE_LOCKED:
  646.         // ???
  647.         lpszError = TEXT("D3DERR_EXECUTE_LOCKED");
  648.         break;
  649.     case D3DERR_EXECUTE_NOT_LOCKED:
  650.         // ???
  651.         lpszError = TEXT("D3DERR_EXECUTE_NOT_LOCKED");
  652.         break;
  653.     case D3DERR_EXECUTE_FAILED:
  654.         // ???
  655.         lpszError = TEXT("D3DERR_EXECUTE_FAILED");
  656.         break;
  657.     case D3DERR_EXECUTE_CLIPPED_FAILED:
  658.         // ???
  659.         lpszError = TEXT("D3DERR_CLIPPED_FAILED");
  660.         break;
  661.     case D3DERR_TEXTURE_NO_SUPPORT:
  662.         // ???
  663.         lpszError = TEXT("D3DERR_TEXTURE_NO_SUPPORT");
  664.         break;
  665.     case D3DERR_TEXTURE_CREATE_FAILED:
  666.         // ???
  667.         lpszError = TEXT("D3DERR_TEXTURE_CREATE_FAILED");
  668.         break;
  669.     case D3DERR_TEXTURE_DESTROY_FAILED:
  670.         // ???
  671.         lpszError = TEXT("D3DERR_TEXTURE_DESTROY_FAILED");
  672.         break;
  673.     case D3DERR_TEXTURE_LOCK_FAILED:
  674.         // ???
  675.         lpszError = TEXT("D3DERR_TEXTURE_LOCK_FAILED");
  676.         break;
  677.     case D3DERR_TEXTURE_UNLOCK_FAILED:
  678.         // ???
  679.         lpszError = TEXT("D3DERR_TEXTURE_UNLOCK_FAILED");
  680.         break;
  681.     case D3DERR_TEXTURE_LOAD_FAILED:
  682.         // ???
  683.         lpszError = TEXT("D3DERR_LOAD_FAILED");
  684.         break;
  685.     case D3DERR_TEXTURE_SWAP_FAILED:
  686.         // ???
  687.         lpszError = TEXT("D3DERR_SWAP_FAILED");
  688.         break;
  689.     case D3DERR_TEXTURE_LOCKED:
  690.         // ???
  691.         lpszError = TEXT("D3DERR_TEXTURE_LOCKED");
  692.         break;
  693.     case D3DERR_TEXTURE_NOT_LOCKED:
  694.         // ???
  695.         lpszError = TEXT("D3DERR_TEXTURE_NOT_LOCKED");
  696.         break;
  697.     case D3DERR_TEXTURE_GETSURF_FAILED:
  698.         // ???
  699.         lpszError = TEXT("D3DERR_TEXTURE_GETSURF_FAILED");
  700.         break;
  701.     case D3DERR_MATRIX_CREATE_FAILED:
  702.         // ???
  703.         lpszError = TEXT("D3DERR_MATRIX_CREATE_FAILED");
  704.         break;
  705.     case D3DERR_MATRIX_DESTROY_FAILED:
  706.         // ???
  707.         lpszError = TEXT("D3DERR_MATRIX_DESTROY_FAILED");
  708.         break;
  709.     case D3DERR_MATRIX_SETDATA_FAILED:
  710.         // ???
  711.         lpszError = TEXT("D3DERR_MATRIX_SETDATA_FAILED");
  712.         break;
  713.     case D3DERR_MATRIX_GETDATA_FAILED:
  714.         // ???
  715.         lpszError = TEXT("D3DERR_MAXTRIX_GETDATA_FAILED");
  716.         break;
  717.     case D3DERR_SETVIEWPORTDATA_FAILED:
  718.         // ???
  719.         lpszError = TEXT("D3DERR_SETVIEWPORTDATA_FAILED");
  720.         break;
  721.     case D3DERR_INVALIDCURRENTVIEWPORT:
  722.         // ???
  723.         lpszError = TEXT("D3DERR_INVALIDCURRENTVIEWPORT");
  724.         break;
  725.     case D3DERR_INVALIDPRIMITIVETYPE:
  726.         // ???
  727.         lpszError = TEXT("D3DERR_INVALIDPRIMITIVETYPE");
  728.         break;
  729.     case D3DERR_INVALIDVERTEXTYPE:
  730.         // ???
  731.         lpszError = TEXT("D3DERR_INVALIDVERTEXTYPE");
  732.         break;
  733.     case D3DERR_TEXTURE_BADSIZE:
  734.         // ???
  735.         lpszError = TEXT("D3DERR_TEXTURE_BADSIZE");
  736.         break;
  737.     case D3DERR_MATERIAL_CREATE_FAILED:
  738.         // ???
  739.         lpszError = TEXT("D3DERR_MATERIAL_CREATE_FAILED");
  740.         break;
  741.     case D3DERR_MATERIAL_DESTROY_FAILED:
  742.         // ???
  743.         lpszError = TEXT("D3DERR_MATERIAL_DESTROY_FAILED");
  744.         break;
  745.     case D3DERR_MATERIAL_SETDATA_FAILED:
  746.         // ???
  747.         lpszError = TEXT("D3DERR_MATERIAL_SETDATA_FAILED");
  748.         break;
  749.     case D3DERR_MATERIAL_GETDATA_FAILED:
  750.         // ???
  751.         lpszError = TEXT("D3DERR_MATERIAL_GETDATA_FAILED");
  752.         break;
  753.     case D3DERR_INVALIDPALETTE:
  754.         // ???
  755.         lpszError = TEXT("D3DERR_INVALIDPALETTE");
  756.         break;
  757.     case D3DERR_ZBUFF_NEEDS_SYSTEMMEMORY:
  758.         // ???
  759.         lpszError = TEXT("D3DERR_ZBUFF_NEEDS_SYSTEMMEMORY");
  760.         break;
  761.     case D3DERR_ZBUFF_NEEDS_VIDEOMEMORY:
  762.         // ???
  763.         lpszError = TEXT("D3DERR_ZBUFF_NEEDS_VIDEOMEMORY");
  764.         break;
  765.     case D3DERR_SURFACENOTINVIDMEM:
  766.         // ???
  767.         lpszError = TEXT("D3DERR_SURFACENOTINVIDMEM");
  768.         break;
  769.     case D3DERR_LIGHT_SET_FAILED:
  770.         // ???
  771.         lpszError = TEXT("D3DERR_LIGHT_SET_FAILED");
  772.         break;
  773.     case D3DERR_LIGHTHASVIEWPORT:
  774.         // ???
  775.         lpszError = TEXT("D3DERR_LIGHTHASVIEWPORT");
  776.         break;
  777.     case D3DERR_LIGHTNOTINTHISVIEWPORT:
  778.         // ???
  779.         lpszError = TEXT("D3DERR_LIGHTNOTINTHISVIEWPORT");
  780.         break;
  781.     case D3DERR_SCENE_IN_SCENE:
  782.         // ???
  783.         lpszError = TEXT("D3DERR_SCENE_IN_SCENE");
  784.         break;
  785.     case D3DERR_SCENE_NOT_IN_SCENE:
  786.         // ???
  787.         lpszError = TEXT("D3DERR_SCENE_NOT_IN_SCENE");
  788.         break;
  789.     case D3DERR_SCENE_BEGIN_FAILED:
  790.         // ???
  791.         lpszError = TEXT("D3DERR_SCENE_BEGIN_FAILED");
  792.         break;
  793.     case D3DERR_SCENE_END_FAILED:
  794.         // ???
  795.         lpszError = TEXT("D3DERR_SCENE_END_FAILED");
  796.         break;
  797.     case D3DERR_INBEGIN:
  798.         // ???
  799.         lpszError = TEXT("D3DERR_INBEGIN");
  800.         break;
  801.     case D3DERR_NOTINBEGIN:
  802.         // ???
  803.         lpszError = TEXT("D3DERR_NOTINBEGIN");
  804.         break;
  805.     case D3DERR_NOVIEWPORTS:
  806.         // ???
  807.         lpszError = TEXT("D3DERR_NOVIEWPORTS");
  808.         break;
  809.     case D3DERR_VIEWPORTDATANOTSET:
  810.         // ???
  811.         lpszError = TEXT("D3DERR_VIEWPORTDATANOTSET");
  812.         break;
  813.     case D3DERR_VIEWPORTHASNODEVICE:
  814.         // ???
  815.         lpszError = TEXT("D3DERR_VIEWPORTHASNODEVICE");
  816.         break;
  817.     
  818.         //
  819.         // D3D Retained Mode Errors
  820.         //
  821. #if 0    
  822.     case D3DRMERR_BADOBJECT:
  823.         // ???
  824.         lpszError = TEXT("D3DRMERR_BADOBJECT");
  825.         break;
  826.     case D3DRMERR_BADTYPE:
  827.         // ???
  828.         lpszError = TEXT("D3DRMERR_BADTYPE");
  829.         break;
  830.     case D3DRMERR_BADALLOC:
  831.         // ???
  832.         lpszError = TEXT("D3DRMERR_BADALLOC");
  833.         break;
  834.     case D3DRMERR_FACEUSED:
  835.         // ???
  836.         lpszError = TEXT("D3DRMERR_FACEUSED");
  837.         break;
  838.     case D3DRMERR_NOTFOUND:
  839.         // ???
  840.         lpszError = TEXT("D3DRMERR_NOTFOUND");
  841.         break;
  842.     case D3DRMERR_NOTDONEYET:
  843.         // ???
  844.         lpszError = TEXT("D3DRMERR_NOTDONEYET");
  845.         break;
  846.     case D3DRMERR_FILENOTFOUND:
  847.         // ???
  848.         lpszError = TEXT("D3DRMERR_FILENOTFOUND");
  849.         break;
  850.     case D3DRMERR_BADFILE:
  851.         // ???
  852.         lpszError = TEXT("D3DRMERR_BADFILE");
  853.         break;
  854.     case D3DRMERR_BADDEVICE:
  855.         // ???
  856.         lpszError = TEXT("D3DRMERR_BADDEVICE");
  857.         break;
  858.     case D3DRMERR_BADVALUE:
  859.         // ???
  860.         lpszError = TEXT("D3DRMERR_BADVALUE");
  861.         break;
  862.     case D3DRMERR_BADMAJORVERSION:
  863.         // ???
  864.         lpszError = TEXT("D3DRMERR_BADMAJORVERSION");
  865.         break;
  866.     case D3DRMERR_BADMINORVERSION:
  867.         // ???
  868.         lpszError = TEXT("D3DRMERR_BADMINORVERSION");
  869.         break;
  870.     case D3DRMERR_UNABLETOEXECUTE:
  871.         // ???
  872.         lpszError = TEXT("D3DRMERR_BADMINORVERSION");
  873.         break;
  874. #endif // D3DRM_ERRORS
  875. //
  876. // Application defined errors
  877. //
  878. case APPERR_GENERIC:
  879.         // Generic Error
  880.         lpszError = TEXT("APPERR_GENERIC");
  881.         break;
  882. case APPERR_INVALIDPARAMS:
  883.         // Invalid Parameters passed into function
  884.         lpszError = TEXT("APPERR_INVALIDPARAMS");
  885.         break;
  886. case APPERR_NOTINITIALIZED:
  887. // Programmer error, called function without proper initialization
  888. lpszError = TEXT("APPERR_NOT_INITIALIZED");
  889. break;
  890.     default:
  891.         // Unknown DD/D3D/App Error
  892.         wsprintf (szMsg, "Unknown Error #%ld", (DWORD)(hResult & 0x0000FFFFL));
  893.         lpszError = szMsg;
  894.         break;
  895.     }
  896.     // Copy DD/D3D Error string to buff
  897.     cLen = strlen (lpszError);
  898.     if (cLen >= cchError)
  899.     {
  900.         cLen = cchError - 1;
  901.     }
  902.     if (cLen)
  903.     {
  904.         strncpy (lpszErrorBuff, lpszError, cLen);
  905.         lpszErrorBuff[cLen] = 0;
  906.     }
  907.     return TRUE;
  908. } // End GetDDErrorString
  909. /*
  910. **-----------------------------------------------------------------------------
  911. ** End of File
  912. **-----------------------------------------------------------------------------
  913. */