aboutsummaryrefslogtreecommitdiff
path: root/c/main.cpp
diff options
context:
space:
mode:
authorJohn Ankarström <john@ankarstrom.se>2022-07-18 03:03:56 +0200
committerJohn Ankarström <john@ankarstrom.se>2022-07-18 03:03:56 +0200
commit41745326d8440340a87b5179139b2915efe3715d (patch)
tree7ae465793cc80793efc5392b2628aebaf18819bd /c/main.cpp
parent0531bf802017b7792b90270b6346b3c88ffcea70 (diff)
downloadEpisodeBrowser-41745326d8440340a87b5179139b2915efe3715d.tar.gz
Add Unicode support to Win32Error.
Diffstat (limited to 'c/main.cpp')
-rw-r--r--c/main.cpp18
1 files changed, 9 insertions, 9 deletions
diff --git a/c/main.cpp b/c/main.cpp
index 951770a..4b42317 100644
--- a/c/main.cpp
+++ b/c/main.cpp
@@ -59,6 +59,10 @@ void OnTerminate()
} else
MessageBoxA(NULL, "The program was terminated due to a Prolog exception.",
"Fatal Error", MB_ICONERROR);
+ } catch (Win32Error& e) {
+ std::basic_string<TCHAR> tstr = TEXT("The program was terminated due to a Windows error: ");
+ tstr += e.twhat();
+ MessageBox(NULL, tstr.c_str(), TEXT("Fatal Error"), MB_ICONERROR);
} catch (std::exception& e) {
std::string str = "The program was terminated due to an exception: ";
str += e.what();
@@ -86,8 +90,7 @@ int WINAPI WinMain(const HINSTANCE hInstance, const HINSTANCE, char* const, cons
INITCOMMONCONTROLSEX icc;
icc.dwSize = sizeof(icc);
icc.dwICC = ICC_WIN95_CLASSES;
- if (!InitCommonControlsEx(&icc))
- throw std::runtime_error("Could not initialize common controls.");
+ if (!InitCommonControlsEx(&icc)) throw Win32Error(GetLastError());
g_hPopupMenu = LoadMenu(NULL, MAKEINTRESOURCE(IDR_POPUPMENU));
g_hPopupMenu = GetSubMenu(g_hPopupMenu, 0);
@@ -103,14 +106,11 @@ int WINAPI WinMain(const HINSTANCE hInstance, const HINSTANCE, char* const, cons
wc.lpszMenuName = MAKEINTRESOURCE(IDR_MENU);
wc.lpszClassName = TEXT("Episode Browser");
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
- if (!RegisterClassEx(&wc))
- throw std::runtime_error("Could not register window class.");
+ if (!RegisterClassEx(&wc)) throw Win32Error(GetLastError());
/* Create window. A CBT hook is used to initialize important
* global variables before any messages are sent to the new
- * window. It is vital that the hook is set up and torn down
- * correctly. Note that if the unhook fails, it is useless to
- * try to show an error dialog. */
+ * window. It is vital that the hook is set up correctly. */
const HHOOK hHook = SetWindowsHookEx(WH_CBT, CBTProc, 0, GetCurrentThreadId());
if (!hHook) throw Win32Error(GetLastError());
const HWND hWnd = CreateWindowEx(
@@ -121,9 +121,9 @@ int WINAPI WinMain(const HINSTANCE hInstance, const HINSTANCE, char* const, cons
CW_USEDEFAULT, CW_USEDEFAULT, 0, 0,
NULL, NULL, hInstance, NULL
);
+ if (!hHook) throw Win32Error(GetLastError());
+ if (!hWnd) throw Win32Error(GetLastError());
UnhookWindowsHookEx(hHook);
- if (!hHook) _Exit(1);
- if (!hWnd) throw std::runtime_error("Could not create main window.");
g_hWndStatus = CreateStatusBar(hWnd, hInstance);
ShowWindow(hWnd, nCmdShow);