#include #include #include TCHAR gpszUnknownError[MAX_PATH] = TEXT("Error"); TCHAR gszDots[] = TEXT("..."); /***************************************************************************\ * * FUNCTION: FmtMessageBox( HWND hwnd, DWORD dwTitleID, UINT fuStyle, * BOOL fSound, DWORD dwTextID, ... ); * * PURPOSE: Formats messages with FormatMessage and then displays them * in a message box * * * * * History: * 22-Apr-1993 JonPa Created it. \***************************************************************************/ int FmtMessageBox( HWND hwnd, DWORD dwTitleID, LPTSTR pszTitleStr, UINT fuStyle, BOOL fSound, DWORD dwTextID, ... ) { LPTSTR pszMsg; LPTSTR pszTitle; int idRet; va_list marker; va_start( marker, dwTextID ); if(!FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_MAX_WIDTH_MASK, hInst, dwTextID, 0, (LPTSTR)&pszMsg, 1, &marker)) pszMsg = gpszUnknownError; va_end( marker ); GetLastError(); if (dwTitleID != FMB_TTL_ERROR || !FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_MAX_WIDTH_MASK | FORMAT_MESSAGE_ARGUMENT_ARRAY, hInst, dwTitleID, 0, (LPTSTR)&pszTitle, 1, (va_list *)&pszTitleStr)) { pszTitle = NULL; } GetLastError(); if (fSound) { MessageBeep( fuStyle & (MB_ICONASTERISK | MB_ICONEXCLAMATION | MB_ICONHAND | MB_ICONQUESTION | MB_OK) ); } if (hwnd == NULL) hwnd = GetDesktopWindow(); idRet = MessageBox(hwnd, pszMsg, pszTitle, fuStyle); if (pszTitle != NULL) FmtFree( pszTitle ); if (pszMsg != gpszUnknownError) FmtFree( pszMsg ); return idRet; } /***************************************************************************\ * * FUNCTION: FmtSprintf( DWORD id, ... ); * * PURPOSE: sprintf but it gets the pattern string from the message rc. * * History: * 03-May-1993 JonPa Created it. \***************************************************************************/ LPTSTR FmtSprintf( DWORD id, ... ) { LPTSTR pszMsg; va_list marker; va_start( marker, id ); if(!FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_MAX_WIDTH_MASK, hInst, id, 0, (LPTSTR)&pszMsg, 1, &marker)) { GetLastError(); pszMsg = gszDots; } va_end( marker ); return pszMsg; } /***************************************************************************\ * * FUNCTION: PVOID AllocMem( DWORD cb ); * * PURPOSE: allocates memory, checking for errors * * Do not call this function until after LoadFontFile() has been called * since this function will try and remove the font. * * History: * 22-Apr-1993 JonPa Wrote it. \***************************************************************************/ PVOID AllocMem( DWORD cb ) { PVOID pv = (PVOID)LocalAlloc(LPTR, cb); if (pv == NULL) { FmtMessageBox( ghwndFrame, FMB_TTL_ERROR, NULL, MB_OK | MB_ICONSTOP, TRUE, MSG_OUTOFMEM ); RemoveFontResource( gszFontPath ); ExitProcess(2); } return pv; } #ifdef FV_DEBUG /***************************************************************************\ * * FUNCTION: FmtSprintf( DWORD id, ... ); * * PURPOSE: sprintf but it gets the pattern string from the message rc. * * History: * 03-May-1993 JonPa Created it. \***************************************************************************/ void Dprintf( LPTSTR pszFmt, ... ) { TCHAR szBuffer[256]; va_list marker; va_start( marker, pszFmt ); StringCchVPrintf( szBuffer, ARRAYSIZE(szBuffer), pszFmt, marker ); OutputDebugString(szBuffer); va_end( marker ); } #endif