Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

142 lines
3.9 KiB

#include <windows.h>
#include <fontdefs.h>
#include <fvmsg.h>
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