- LPTSTR lpMsgBuf;
- DWORD status;
- static const TCHAR fallback[] = TEXT("Error displaying error message.\n");
- status = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
- NULL, code, 0, (LPTSTR)&lpMsgBuf, 0, NULL);
- if (!status)
- lpMsgBuf = (LPTSTR)fallback;
- MessageBox(hWnd, lpMsgBuf, title, MB_OK | MB_ICONERROR);
- if (lpMsgBuf != fallback)
- LocalFree(lpMsgBuf);
+ int iRet = 0;
+ LPTSTR lpMsgBuf = NULL;
+ DWORD Status = 0;
+
+ va_list args = NULL;
+ va_start(args, dwErrorCode);
+
+ Status = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
+ NULL,
+ dwErrorCode,
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+ (LPTSTR)&lpMsgBuf,
+ 0,
+ &args);
+
+ va_end(args);
+
+ iRet = MessageBox(hWnd, (Status && lpMsgBuf ? lpMsgBuf : TEXT("Error displaying error message.\n")), lpTitle, MB_OK | MB_ICONERROR);
+
+ if (lpMsgBuf) LocalFree(lpMsgBuf);
+
+ /* Return the MessageBox information */
+ return iRet;
+}
+
+int InfoMessageBox(HWND hWnd, UINT uType, LPCTSTR lpTitle, LPCTSTR lpMessage, ...)
+{
+ int iRet = 0;
+ LPTSTR lpMsgBuf = NULL;
+ DWORD Status = 0;
+
+ va_list args = NULL;
+ va_start(args, lpMessage);
+
+ Status = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_STRING,
+ lpMessage,
+ 0,
+ 0,
+ (LPTSTR)&lpMsgBuf,
+ 0,
+ &args);
+
+ va_end(args);
+
+ iRet = MessageBox(hWnd, (Status && lpMsgBuf ? lpMsgBuf : TEXT("Error displaying error message.\n")), lpTitle, uType);
+
+ if (lpMsgBuf) LocalFree(lpMsgBuf);
+
+ /* Return the MessageBox information */
+ return iRet;