diff options
Diffstat (limited to 'src/main.cpp')
| -rw-r--r-- | src/main.cpp | 101 |
1 files changed, 88 insertions, 13 deletions
diff --git a/src/main.cpp b/src/main.cpp index 7366104..d89c199 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -15,16 +15,52 @@ #include <windows.h>
#include <shlwapi.h>
+bool recording = false;
+HANDLE process = NULL;
+HWND hwnd;
+HINSTANCE hInstance;
+
+
+NOTIFYICONDATAA niData = { 0 };
+const UINT ICON_MSG = WM_APP+1;
+void
+ShowNotificationIcon()
+{
+ Shell_NotifyIconA(NIM_ADD, &niData);
+ Shell_NotifyIconA(NIM_SETVERSION, &niData);
+}
+
+void
+HideNotificationIcon()
+{
+ Shell_NotifyIconA(NIM_DELETE, &niData);
+}
+
+void changeIcon(HWND hwnd, HINSTANCE hInstance, WORD id)
+{
+ HICON icon = LoadIcon(hInstance, MAKEINTRESOURCE(id));
+ HideNotificationIcon();
+ niData.hIcon = icon;
+ if (! IsWindowVisible(hwnd))
+ ShowNotificationIcon();
+ SendMessage(hwnd, WM_SETICON, 0, (LPARAM)icon);
+ SendMessage(hwnd, WM_SETICON, 1, (LPARAM)icon);
+}
+
+
+
void
startRecording()
{
ws::sendRequest("StartRecord");
+ changeIcon(hwnd, hInstance, IDI_ICON_GREEN);
}
void
stopRecording()
{
ws::sendRequest("StopRecord");
+ changeIcon(hwnd, hInstance, IDI_ICON_RED);
}
bool
@@ -84,19 +120,49 @@ checkForegroundProcess(std::string exeName) return strcmp(filename, exeName.c_str()) == 0;
}
-bool recording = false;
-HANDLE process = NULL;
-
-// int WINAPI
-// WinMain(HINSTANCE hInstance,
-// HINSTANCE hPrevInstance,
-// LPSTR lpCmdLine,
-// int nCmdShow)
-int main(int argc, char **argv)
+int WINAPI
+WinMain(HINSTANCE hInstance,
+ HINSTANCE hPrevInstance,
+ LPSTR lpCmdLine,
+ int nCmdShow)
+//int main(int argc, char **argv)
{
+ hInstance = GetModuleHandle(0);
+
+ win::Window window("Title", "MyWindowClass", hInstance);
+ hwnd = window.hwnd;
+
+ niData.cbSize = sizeof(niData);
+ niData.uID = 12345;
+ niData.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
+ niData.hIcon = LoadIconA(hInstance, MAKEINTRESOURCEA(IDI_ICON_WHITE));
+ niData.hWnd = window.hwnd;
+ niData.uCallbackMessage = ICON_MSG;
+ niData.uVersion = NOTIFYICON_VERSION_4;
+
+ window.handlers[WM_SIZE].push_back([](HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
+ if (wParam == SIZE_MINIMIZED) {
+ ShowNotificationIcon();
+ ShowWindow(hwnd, false);
+ }
+ });
+ window.handlers[WM_DESTROY].push_back([](HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
+ HideNotificationIcon();
+ });
+ window.handlers[ICON_MSG].push_back([](HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
+ if (LOWORD(lParam) == NIN_SELECT) {
+ HideNotificationIcon();
+ ShowWindow(hwnd, true);
+ SetForegroundWindow(hwnd);
+ SetActiveWindow(hwnd);
+ }
+ });
- //win::Window window("Title", "MyWindowClass", hInstance);
- win::Window window("Title", "MyWindowClass", GetModuleHandle(0));
+ window.handlers[WM_GETMINMAXINFO].push_back([](HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
+ MINMAXINFO *mmInfo = (MINMAXINFO*)lParam;
+ mmInfo->ptMinTrackSize.x = 400;
+ mmInfo->ptMinTrackSize.y = 200;
+ });
lay_context *ctx = &window.ctx;
lay_id root = window.lId;
@@ -113,14 +179,19 @@ int main(int argc, char **argv) btnConnect.onClick([&]() {
ws::connect("ws://127.0.0.1:4444");
});
+ win::Button btnTest(&window, "Test", row1, 100, 25, 0, 0);
+ btnTest.onClick([&]() {
+ changeIcon(window.hwnd, hInstance, IDI_ICON_GREEN);
+ });
win::ListBox lstActiveProcesses(&window, row2, 0, 0, 0, LAY_FILL);
lay_id col1 = win::createLayId(&window.ctx, row2, 80, 0, LAY_COLUMN, LAY_VCENTER);
+ lstActiveProcesses.addStyle(WS_VSCROLL);
+
lay_set_margins_ltrb(ctx, col1, 5, 0, 5, 0);
win::ListBox lstMonitoredProcesses(&window, row2, 0, 0, 0, LAY_FILL);
- lstActiveProcesses.addStyle(WS_VSCROLL);
lstMonitoredProcesses.addStyle(WS_VSCROLL);
win::Button btnUpdateWindows(&window, "Update", col1, 85, 25, 0, 0);
@@ -173,12 +244,16 @@ int main(int argc, char **argv) });
window.show();
+ window.setDefaultFont();
+ ws::onConnect = [&]() {
+ changeIcon(window.hwnd, hInstance, IDI_ICON_RED);
+ };
ws::init();
SetTimer(window.hwnd, 10123, 100, [](HWND, UINT, UINT_PTR, DWORD) {
if (!recording) {
- if (checkForegroundProcess("League of Legends.exe")) {
+ if (checkForegroundProcess("notepad.exe")) {
recording = true;
process = getHwndProcess(GetForegroundWindow());
startRecording();
|
