1 /*
2 * Regedit errors, warnings, informations displaying
3 *
4 * Copyright (C) 2010 Adam Kachwalla <geekdundee@gmail.com>
5 * Copyright (C) 2012 Hermès Bélusca - Maïto <hermes.belusca@sfr.fr>
6 * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
7 */
8
9 #include "regedit.h"
10
ErrorMessageBox(HWND hWnd,LPCWSTR lpTitle,DWORD dwErrorCode,...)11 int ErrorMessageBox(HWND hWnd, LPCWSTR lpTitle, DWORD dwErrorCode, ...)
12 {
13 int iRet = 0;
14 LPWSTR lpMsgBuf = NULL;
15 DWORD Status = 0;
16 va_list args;
17
18 va_start(args, dwErrorCode);
19
20 Status = FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
21 NULL,
22 dwErrorCode,
23 MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
24 (LPWSTR)&lpMsgBuf,
25 0,
26 &args);
27
28 va_end(args);
29
30 iRet = MessageBoxW(hWnd, (Status && lpMsgBuf ? lpMsgBuf : L"Error displaying error message."), lpTitle, MB_OK | MB_ICONERROR);
31
32 if (lpMsgBuf) LocalFree(lpMsgBuf);
33
34 /* Return the MessageBoxW information */
35 return iRet;
36 }
37
InfoMessageBox(HWND hWnd,UINT uType,LPCWSTR lpTitle,LPCWSTR lpMessage,...)38 int InfoMessageBox(HWND hWnd, UINT uType, LPCWSTR lpTitle, LPCWSTR lpMessage, ...)
39 {
40 int iRet = 0;
41 LPWSTR lpMsgBuf = NULL;
42 va_list args;
43
44 va_start(args, lpMessage);
45
46 if (lpMessage)
47 {
48 SIZE_T strLen = _vscwprintf(lpMessage, args);
49
50 /* Create a buffer on the heap and zero it out (LPTR) */
51 lpMsgBuf = (LPWSTR)LocalAlloc(LPTR, (strLen + 1) * sizeof(WCHAR));
52 if (lpMsgBuf)
53 {
54 _vsnwprintf(lpMsgBuf, strLen, lpMessage, args);
55 }
56 }
57
58 va_end(args);
59
60 iRet = MessageBoxW(hWnd, (lpMessage && lpMsgBuf ? lpMsgBuf : L"Error displaying info message."), lpTitle, uType);
61
62 if (lpMsgBuf) LocalFree(lpMsgBuf);
63
64 /* Return the MessageBoxW information */
65 return iRet;
66 }
67