-#pragma comment(linker, "\"/manifestdependency:type='win32' \\r
-name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \\r
-processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")\r
-\r
#include <windows.h>\r
#include <CommCtrl.h>\r
\r
{\r
SetWindowLongPtrA(hwnd, GWL_STYLE, getStyle() & (~style));\r
}\r
+ void setActive(bool active)\r
+ {\r
+ EnableWindow(hwnd, active);\r
+ }\r
};\r
struct Window : Hwnd\r
{\r
private:\r
- NOTIFYICONDATAA niData = { 0 };\r
\r
static LRESULT CALLBACK\r
WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)\r
DestroyWindow(hwnd);\r
break;\r
case WM_DESTROY:\r
- Shell_NotifyIconA(NIM_DELETE, &window->niData);\r
lay_destroy_context(&window->ctx);\r
PostQuitMessage(0);\r
break;\r
case WM_SIZE:\r
- if (wParam == SIZE_MINIMIZED) {\r
- //TODO: auslagen\r
- //ShowNotificationIcon();\r
- ShowWindow(hwnd, false);\r
- }\r
- else {\r
+ if (wParam != SIZE_MINIMIZED) {\r
lay_set_size_xy(&window->ctx, window->lId, LOWORD(lParam), HIWORD(lParam));\r
lay_run_context(&window->ctx);\r
\r
break;\r
case WM_NOTIFY:\r
break;\r
- case WM_APP + 1:\r
- if (LOWORD(lParam) == NIN_SELECT) {\r
- //TODO: auslagern\r
- //HideNotificationIcon();\r
- ShowWindow(hwnd, true);\r
- SetForegroundWindow(hwnd);\r
- SetActiveWindow(hwnd);\r
- }\r
- break;\r
case WM_CTLCOLORSTATIC:\r
- return (LONG)GetStockObject(WHITE_BRUSH);\r
- case WM_GETMINMAXINFO: {\r
- MINMAXINFO *mmInfo = (MINMAXINFO*)lParam;\r
- mmInfo->ptMinTrackSize.x = 400;\r
- mmInfo->ptMinTrackSize.y = 200;\r
- break;\r
- }\r
+ return (LONG_PTR)GetStockObject(WHITE_BRUSH);\r
default:\r
defaultHandler = true;\r
break;\r
std::vector<\r
std::function<void(HWND, UINT, WPARAM, LPARAM)>>> handlers;\r
\r
+ struct Timer {\r
+ bool active = true;\r
+ std::function<void()> f;\r
+ };\r
+ std::vector<Timer> timers;\r
+\r
Window(std::string title, std::string className, HINSTANCE hInstance)\r
{\r
WNDCLASSEXA wc;\r
wc.cbClsExtra = 0;\r
wc.cbWndExtra = sizeof(Window*);\r
wc.hInstance = hInstance;\r
- wc.hIcon = LoadIcon(nullptr, IDI_APPLICATION);\r
- wc.hCursor = LoadCursor(nullptr, IDC_ARROW);\r
+ wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON_WHITE));\r
+ wc.hCursor = LoadCursor(hInstance, 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
+ wc.hIconSm = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON_WHITE));\r
RegisterClassExA(&wc);\r
\r
lay_init_context(&ctx);\r
nullptr);\r
\r
SetWindowLongPtrA(hwnd, 0, (LONG_PTR)this);\r
- \r
- \r
- niData.cbSize = sizeof(niData);\r
- niData.uID = 12345;\r
- niData.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;\r
- niData.hIcon = LoadIconA(hInstance, MAKEINTRESOURCEA(IDI_MY_ICON));\r
- niData.hWnd = hwnd;\r
- niData.uCallbackMessage = WM_APP+1;\r
- niData.uVersion = NOTIFYICON_VERSION_4;\r
}\r
bool update()\r
{\r
void show()\r
{\r
ShowWindow(hwnd, true);\r
-\r
+ }\r
+ void setDefaultFont()\r
+ {\r
EnumChildWindows(\r
hwnd,\r
[](HWND hwnd, LPARAM lParam) -> BOOL {\r
},\r
0);\r
}\r
+ void setTimer(UINT interval, std::function<void()> cb)\r
+ {\r
+ SetTimer(this->hwnd, timers.size() + 1000, interval, [](HWND hwnd, UINT uMsg, UINT_PTR uIdEvent, DWORD dwTime) {\r
+ Window *window = (Window*)GetWindowLongPtrA(hwnd, 0);\r
+ if (window == nullptr)\r
+ return;\r
+\r
+ window->timers[uIdEvent-1000].f();\r
+ });\r
+ Timer t;\r
+ t.f = cb;\r
+ timers.push_back(t);\r
+ }\r
};\r
\r
struct Button : Hwnd\r