summaryrefslogtreecommitdiff
path: root/init_windows.c
diff options
context:
space:
mode:
Diffstat (limited to 'init_windows.c')
-rw-r--r--init_windows.c73
1 files changed, 73 insertions, 0 deletions
diff --git a/init_windows.c b/init_windows.c
new file mode 100644
index 0000000..4b35fc3
--- /dev/null
+++ b/init_windows.c
@@ -0,0 +1,73 @@
+// 17 july 2014
+
+#include "winapi_windows.h"
+
+HINSTANCE hInstance;
+int nCmdShow;
+
+HICON hDefaultIcon;
+HCURSOR hArrowCursor;
+
+HFONT controlFont;
+HFONT titleFont;
+HFONT smallTitleFont;
+HFONT menubarFont;
+HFONT statusbarFont;
+
+HBRUSH hollowBrush;
+
+DWORD initWindows(char **errmsg)
+{
+ STARTUPINFOW si;
+ NONCLIENTMETRICSW ncm;
+
+ // WinMain() parameters
+ hInstance = GetModuleHandleW(NULL);
+ if (hInstance == NULL) {
+ *errmsg = "error getting hInstance";
+ return GetLastError();
+ }
+ nCmdShow = SW_SHOWDEFAULT;
+ GetStartupInfoW(&si);
+ if ((si.dwFlags & STARTF_USESHOWWINDOW) != 0)
+ nCmdShow = si.wShowWindow;
+
+ // icons and cursors
+ hDefaultIcon = LoadIconW(NULL, IDI_APPLICATION);
+ if (hDefaultIcon == NULL) {
+ *errmsg = "error loading default icon";
+ return GetLastError();
+ }
+ hArrowCursor = LoadCursorW(NULL, IDC_ARROW);
+ if (hArrowCursor == NULL) {
+ *errmsg = "error loading arrow (default) cursor";
+ return GetLastError();
+ }
+
+ // standard fonts
+#define GETFONT(l, f, n) l = CreateFontIndirectW(&ncm.f); \
+ if (l == NULL) { \
+ *errmsg = "error loading " n " font"; \
+ return GetLastError(); \
+ }
+
+ ZeroMemory(&ncm, sizeof (NONCLIENTMETRICSW));
+ ncm.cbSize = sizeof (NONCLIENTMETRICSW);
+ if (SystemParametersInfoW(SPI_GETNONCLIENTMETRICS, sizeof (NONCLIENTMETRICSW), &ncm, sizeof (NONCLIENTMETRICSW)) == 0) {
+ *errmsg = "error getting non-client metrics parameters";
+ return GetLastError();
+ }
+ GETFONT(controlFont, lfMessageFont, "control");
+ GETFONT(titleFont, lfCaptionFont, "titlebar");
+ GETFONT(smallTitleFont, lfSmCaptionFont, "small title bar");
+ GETFONT(menubarFont, lfMenuFont, "menu bar");
+ GETFONT(statusbarFont, lfStatusFont, "status bar");
+
+ hollowBrush = GetStockObject(HOLLOW_BRUSH);
+ if (hollowBrush == NULL) {
+ *errmsg = "error getting hollow brush";
+ return GetLastError();
+ }
+
+ return 0;
+}