- default:\r
- return DefWindowProc(hwnd, msg, wParam, lParam);\r
- }\r
- return 0;\r
-}\r
-}\r
-\r
-\r
-void\r
-Callback(HWND hwnd, WORD ev, std::function<void()> cb)\r
-{\r
- _::handlers[hwnd][ev] = cb;\r
-}\r
-\r
-HWND\r
-Window(string title, string className, HINSTANCE hInstance)\r
-{\r
- WNDCLASSEX wc;\r
- wc.cbSize = sizeof(WNDCLASSEX);\r
- wc.style = 0;\r
- wc.lpfnWndProc = _::WndProc;\r
- wc.cbClsExtra = 0;\r
- wc.cbWndExtra = 0;\r
- wc.hInstance = hInstance;\r
- wc.hIcon = LoadIcon(nullptr, IDI_APPLICATION);\r
- wc.hCursor = LoadCursor(nullptr, IDC_ARROW);\r
- wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);\r
- wc.lpszMenuName = nullptr;\r
- wc.lpszClassName = className.c_str();\r
- wc.hIconSm = LoadIcon(nullptr, IDI_APPLICATION);\r
- RegisterClassEx(&wc);\r
-\r
- lay_init_context(&_::ctx);\r
- _::root = lay_item(&_::ctx);\r
- lay_set_contain(&_::ctx, _::root, LAY_COLUMN);\r
-\r
- HWND result = CreateWindowA(className.c_str(),\r
- title.c_str(),\r
- WS_OVERLAPPEDWINDOW,\r
- CW_USEDEFAULT,\r
- CW_USEDEFAULT,\r
- CW_USEDEFAULT,\r
- CW_USEDEFAULT,\r
- nullptr,\r
- nullptr,\r
- hInstance,\r
- nullptr);\r
- \r
- _::niData.cbSize = sizeof(_::niData);\r
- _::niData.uID = 12345;\r
- _::niData.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;\r
- _::niData.hIcon = LoadIconA(nullptr, IDI_WINLOGO);\r
- _::niData.hWnd = result;\r
- _::niData.uCallbackMessage = WM_APP+1;\r
- _::niData.uVersion = NOTIFYICON_VERSION_4;\r
-\r
- return result;\r
-}\r
-\r
-bool\r
-UpdateWindow(HWND hwnd)\r
-{\r
- MSG msg;\r
- if (GetMessage(&msg, nullptr, 0, 0) > 0) {\r
- TranslateMessage(&msg);\r
- DispatchMessage(&msg);\r
- return true;\r
- }\r
- return false;\r
-}\r
-\r
-void\r
-ShowWindow(HWND hwnd)\r
-{\r
- ShowWindow(hwnd, true);\r
-\r
- EnumChildWindows(\r
- hwnd,\r
- [](HWND hwnd, LPARAM lParam) -> BOOL {\r
- HFONT guiFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);\r
- SendMessage(hwnd, WM_SETFONT, (WPARAM)guiFont, MAKELPARAM(TRUE, 0));\r
- return TRUE;\r
- },\r
- 0);\r
-}\r