mirror of https://github.com/tongzx/nt5src
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
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
|