andlabs-ui/init_windows.c

74 lines
1.8 KiB
C

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