]> gitweb.ps.run Git - autorec/blobdiff - src/win.h
Why didnt I commit these
[autorec] / src / win.h
index 1e761b6e72893a9948da3431480938cce4633818..0a734c95da3d4c2dadfa725d8211003dfbba9362 100644 (file)
--- a/src/win.h
+++ b/src/win.h
@@ -1,7 +1,3 @@
-#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
@@ -42,11 +38,14 @@ namespace win
     {\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
@@ -62,17 +61,11 @@ namespace win
           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
@@ -81,23 +74,8 @@ namespace win
           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
@@ -117,6 +95,12 @@ namespace win
       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
@@ -126,12 +110,12 @@ namespace win
       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
@@ -151,15 +135,6 @@ namespace win
                           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
@@ -174,7 +149,9 @@ namespace win
     void show()\r
     {\r
       ShowWindow(hwnd, true);\r
-\r
+    }\r
+    void setDefaultFont()\r
+    {\r
       EnumChildWindows(\r
         hwnd,\r
         [](HWND hwnd, LPARAM lParam) -> BOOL {\r
@@ -184,6 +161,19 @@ namespace win
         },\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