home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / com / activexcontrol / basectl / framewrk / debug.cpp < prev    next >
C/C++ Source or Header  |  1997-10-05  |  3KB  |  110 lines

  1. //=--------------------------------------------------------------------------=
  2. // Debug.Cpp
  3. //=--------------------------------------------------------------------------=
  4. // Copyright 1995-1997 Microsoft Corporation.  All Rights Reserved.
  5. //
  6. // THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF 
  7. // ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO 
  8. // THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A 
  9. // PARTICULAR PURPOSE.
  10. //=--------------------------------------------------------------------------=
  11. //
  12. // contains various methods that will only really see any use in DEBUG builds
  13. //
  14. #ifdef DEBUG
  15.  
  16.  
  17. #include "IPServer.H"
  18. #include <stdlib.h>
  19.  
  20.  
  21. //=--------------------------------------------------------------------------=
  22. // Private Constants
  23. //---------------------------------------------------------------------------=
  24. //
  25. static const char szFormat[]  = "%s\nFile %s, Line %d";
  26. static const char szFormat2[] = "%s\n%s\nFile %s, Line %d";
  27.  
  28. #define _SERVERNAME_ "ActiveX Framework"
  29.  
  30. static const char szTitle[]  = _SERVERNAME_ " Assertion  (Abort = UAE, Retry = INT 3, Ignore = Continue)";
  31.  
  32.  
  33. //=--------------------------------------------------------------------------=
  34. // Local functions
  35. //=--------------------------------------------------------------------------=
  36. int NEAR _IdMsgBox(LPSTR pszText, LPCSTR pszTitle, UINT mbFlags);
  37.  
  38. //=--------------------------------------------------------------------------=
  39. // DisplayAssert
  40. //=--------------------------------------------------------------------------=
  41. // Display an assert message box with the given pszMsg, pszAssert, source
  42. // file name, and line number. The resulting message box has Abort, Retry,
  43. // Ignore buttons with Abort as the default.  Abort does a FatalAppExit;
  44. // Retry does an int 3 then returns; Ignore just returns.
  45. //
  46. VOID DisplayAssert
  47. (
  48.     LPSTR     pszMsg,
  49.     LPSTR     pszAssert,
  50.     LPSTR     pszFile,
  51.     UINT     line
  52. )
  53. {
  54.     char    szMsg[250];
  55.     LPSTR    lpszText;
  56.  
  57.     lpszText = pszMsg;        // Assume no file & line # info
  58.  
  59.     // If C file assert, where you've got a file name and a line #
  60.     //
  61.     if (pszFile) {
  62.  
  63.         // Then format the assert nicely
  64.         //
  65.         wsprintf(szMsg, szFormat, (pszMsg&&*pszMsg) ? pszMsg : pszAssert, pszFile, line);
  66.         lpszText = szMsg;
  67.     }
  68.  
  69.     // Put up a dialog box
  70.     //
  71.     switch (_IdMsgBox(lpszText, szTitle, MB_ICONHAND|MB_ABORTRETRYIGNORE|MB_SYSTEMMODAL)) {
  72.         case IDABORT:
  73.             FatalAppExit(0, lpszText);
  74.             return;
  75.  
  76.         case IDRETRY:
  77.             // call the win32 api to break us.
  78.             //
  79.             DebugBreak();
  80.             return;
  81.     }
  82.  
  83.     return;
  84. }
  85.  
  86.  
  87. //=---------------------------------------------------------------------------=
  88. // Beefed-up version of WinMessageBox.
  89. //=---------------------------------------------------------------------------=
  90. //
  91. int NEAR _IdMsgBox
  92. (
  93.     LPSTR    pszText,
  94.     LPCSTR    pszTitle,
  95.     UINT    mbFlags
  96. )
  97. {
  98.     HWND hwndActive;
  99.     int  id;
  100.  
  101.     hwndActive = GetActiveWindow();
  102.  
  103.     id = MessageBox(hwndActive, pszText, pszTitle, mbFlags);
  104.  
  105.     return id;
  106. }
  107.  
  108.  
  109. #endif // DEBUG
  110.