// 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; }