// 14 may 2015 #include "uipriv_windows.hpp" // The utility window is a special window that performs certain tasks internal to libui. // TODO should it be message-only? #define utilWindowClass L"libui_utilWindowClass" HWND uiprivUtilWindow = NULL; static LRESULT CALLBACK utilWindowWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { void (*qf)(void *); switch (uMsg) { case uiprivUtilWindowMsgQueueMain: qf = (void (*)(void *)) wParam; (*qf)((void *) lParam); return 0; } return DefWindowProcW(hwnd, uMsg, wParam, lParam); } HRESULT uiprivInitUtilWindow(HICON hDefaultIcon, HCURSOR hDefaultCursor) { WNDCLASSW wc; HRESULT hr; ZeroMemory(&wc, sizeof (WNDCLASSW)); wc.lpszClassName = utilWindowClass; wc.lpfnWndProc = utilWindowWndProc; wc.hInstance = hInstance; wc.hIcon = hDefaultIcon; wc.hCursor = hDefaultCursor; wc.hbrBackground = (HBRUSH) (COLOR_BTNFACE + 1); hr = uiprivHrRegisterClassW(&wc); if (hr != S_OK) return hr; return uiprivHrCreateWindowExW(0, utilWindowClass, L"libui utility window", WS_OVERLAPPEDWINDOW, 0, 0, 100, 100, NULL, NULL, hInstance, NULL, &uiprivUtilWindow); }