From: Patrick Schönberger Date: Mon, 10 Jan 2022 12:46:49 +0000 (+0100) Subject: little fings X-Git-Url: https://gitweb.ps.run/autorec/commitdiff_plain/e00ad6704b8538b1a553960531af7b50d367fe73 little fings --- diff --git a/src/main.cpp b/src/main.cpp index 805932d..7366104 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -101,32 +101,32 @@ int main(int argc, char **argv) lay_context *ctx = &window.ctx; lay_id root = window.lId; - win::Hwnd row1(&window, &window, 0, 0, 0, 25, LAY_ROW, LAY_LEFT); - lay_set_margins_ltrb(ctx, row1.lId, 5, 5, 5, 5); - win::Hwnd row2(&window, &window, 0, 0, 0, 0, LAY_ROW, LAY_FILL); - lay_set_margins_ltrb(ctx, row2.lId, 5, 5, 5, 5); + lay_id row1 = win::createLayId(&window.ctx, window.lId, 0, 25, LAY_ROW, LAY_LEFT); + lay_set_margins_ltrb(ctx, row1, 5, 5, 5, 5); + lay_id row2 = win::createLayId(&window.ctx, window.lId, 0, 0, LAY_ROW, LAY_FILL); + lay_set_margins_ltrb(ctx, row2, 5, 5, 5, 5); - win::CheckBox cbWindowTitle(&window, &row1, "Window Title", 100, 25, 0, 0); - win::CheckBox cbFullscreenWindow(&window, &row1, "Any Fullscreen Application", 200, 25, 0, 0); + win::CheckBox cbWindowTitle(&window, "Window Title", row1, 100, 25, 0, 0); + win::CheckBox cbFullscreenWindow(&window, "Any Fullscreen Application", row1, 200, 25, 0, 0); - win::Button btnConnect(&window, &row1, "Connect", 100, 25, 0, 0); + win::Button btnConnect(&window, "Connect", row1, 100, 25, 0, 0); btnConnect.onClick([&]() { ws::connect("ws://127.0.0.1:4444"); }); - win::ListBox lstActiveProcesses(&window, &row2, 0, 0, 0, LAY_FILL); + win::ListBox lstActiveProcesses(&window, row2, 0, 0, 0, LAY_FILL); - win::Hwnd col1(&window, &row2, 0, 0, 80, 0, LAY_COLUMN, LAY_VCENTER); - lay_set_margins_ltrb(ctx, col1.lId, 5, 0, 5, 0); + lay_id col1 = win::createLayId(&window.ctx, row2, 80, 0, LAY_COLUMN, LAY_VCENTER); + lay_set_margins_ltrb(ctx, col1, 5, 0, 5, 0); - win::ListBox lstMonitoredProcesses(&window, &row2, 0, 0, 0, LAY_FILL); + win::ListBox lstMonitoredProcesses(&window, row2, 0, 0, 0, LAY_FILL); lstActiveProcesses.addStyle(WS_VSCROLL); lstMonitoredProcesses.addStyle(WS_VSCROLL); - win::Button btnUpdateWindows(&window, &col1, "Update", 85, 25, 0, 0); - win::Button btnStartMonitoringName(&window, &col1, "Exe name >>", 85, 25, 0, 0); - win::Button btnStartMonitoringPath(&window, &col1, "Full path >>", 85, 25, 0, 0); - win::Button btnStopMonitoring(&window, &col1, "Remove", 85, 25, 0, 0); + win::Button btnUpdateWindows(&window, "Update", col1, 85, 25, 0, 0); + win::Button btnStartMonitoringName(&window, "Exe name >>", col1, 85, 25, 0, 0); + win::Button btnStartMonitoringPath(&window, "Full path >>", col1, 85, 25, 0, 0); + win::Button btnStopMonitoring(&window, "Remove", col1, 85, 25, 0, 0); btnUpdateWindows.onClick([&]() { lstActiveProcesses.clear(); for (HWND hwnd = GetTopWindow(NULL); hwnd != nullptr; diff --git a/src/win.h b/src/win.h index fe58ebe..1e761b6 100644 --- a/src/win.h +++ b/src/win.h @@ -13,321 +13,6 @@ processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") #include #include -// namespace wnin { -// namespace _ { -// using CallbackFn = std::function; -// std::map> handlers; -// std::map lIds; - -// NOTIFYICONDATA niData = { 0 }; -// void -// ShowNotificationIcon() -// { -// Shell_NotifyIconA(NIM_ADD, &_::niData); -// Shell_NotifyIconA(NIM_SETVERSION, &_::niData); -// } - -// void -// HideNotificationIcon() -// { -// Shell_NotifyIconA(NIM_DELETE, &_::niData); -// } - -// lay_context ctx; -// lay_id root; - -// LRESULT CALLBACK -// WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) -// { -// switch (msg) { -// case WM_CLOSE: -// DestroyWindow(hwnd); -// break; -// case WM_DESTROY: -// Shell_NotifyIconA(NIM_DELETE, &niData); -// lay_destroy_context(&ctx); -// PostQuitMessage(0); -// break; -// case WM_SIZE: -// if (wParam == SIZE_MINIMIZED) { -// ShowNotificationIcon(); -// ShowWindow(hwnd, false); -// } -// else { -// lay_set_size_xy(&_::ctx, _::root, LOWORD(lParam), HIWORD(lParam)); -// lay_run_context(&_::ctx); - -// for (auto &lId : lIds) { -// lay_vec4 rect = lay_get_rect(&_::ctx, lId.second); -// SetWindowPos(lId.first, HWND_TOP, -// rect[0], -// rect[1], -// rect[2], -// rect[3], -// SWP_NOZORDER -// ); -// } -// RedrawWindow(hwnd, 0, 0, RDW_ERASE | RDW_INVALIDATE | RDW_ALLCHILDREN); -// } -// break; -// case WM_COMMAND: -// if (handlers.find((HWND)lParam) != handlers.end()) { -// auto handler = handlers[(HWND)lParam]; -// if (handler.find(HIWORD(wParam)) != handler.end()) { -// auto cb = handler[HIWORD(wParam)]; -// cb(); -// } -// } -// break; -// case WM_NOTIFY: -// break; -// case WM_APP + 1: -// if (LOWORD(lParam) == NIN_SELECT) { -// HideNotificationIcon(); -// ShowWindow(hwnd, true); -// SetForegroundWindow(hwnd); -// SetActiveWindow(hwnd); -// } -// break; -// case WM_CTLCOLORSTATIC: -// return (LONG)GetStockObject(WHITE_BRUSH); -// case WM_GETMINMAXINFO: { -// MINMAXINFO *mmInfo = (MINMAXINFO*)lParam; -// mmInfo->ptMinTrackSize.x = 400; -// mmInfo->ptMinTrackSize.y = 200; -// break; -// } -// default: -// return DefWindowProc(hwnd, msg, wParam, lParam); -// } -// return 0; -// } -// } - - -// void -// Callback(HWND hwnd, WORD ev, std::function cb) -// { -// _::handlers[hwnd][ev] = cb; -// } - -// HWND -// Window(string title, string className, HINSTANCE hInstance) -// { -// WNDCLASSEX wc; -// wc.cbSize = sizeof(WNDCLASSEX); -// wc.style = 0; -// wc.lpfnWndProc = _::WndProc; -// wc.cbClsExtra = 0; -// wc.cbWndExtra = 0; -// wc.hInstance = hInstance; -// wc.hIcon = LoadIcon(nullptr, IDI_APPLICATION); -// wc.hCursor = LoadCursor(nullptr, IDC_ARROW); -// wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); -// wc.lpszMenuName = nullptr; -// wc.lpszClassName = className.c_str(); -// wc.hIconSm = LoadIcon(nullptr, IDI_APPLICATION); -// RegisterClassEx(&wc); - -// lay_init_context(&_::ctx); -// _::root = lay_item(&_::ctx); -// lay_set_contain(&_::ctx, _::root, LAY_COLUMN); - -// HWND result = CreateWindowA(className.c_str(), -// title.c_str(), -// WS_OVERLAPPEDWINDOW, -// CW_USEDEFAULT, -// CW_USEDEFAULT, -// CW_USEDEFAULT, -// CW_USEDEFAULT, -// nullptr, -// nullptr, -// hInstance, -// nullptr); - -// _::niData.cbSize = sizeof(_::niData); -// _::niData.uID = 12345; -// _::niData.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; -// _::niData.hIcon = LoadIconA(hInstance, MAKEINTRESOURCEA(IDI_MY_ICON)); -// _::niData.hWnd = result; -// _::niData.uCallbackMessage = WM_APP+1; -// _::niData.uVersion = NOTIFYICON_VERSION_4; - -// return result; -// } - -// bool -// UpdateWindow(HWND hwnd) -// { -// MSG msg; -// if (GetMessage(&msg, nullptr, 0, 0) > 0) { -// TranslateMessage(&msg); -// DispatchMessage(&msg); -// return true; -// } -// return false; -// } - -// void -// ShowWindow(HWND hwnd) -// { -// ShowWindow(hwnd, true); - -// EnumChildWindows( -// hwnd, -// [](HWND hwnd, LPARAM lParam) -> BOOL { -// HFONT guiFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT); -// SendMessage(hwnd, WM_SETFONT, (WPARAM)guiFont, MAKELPARAM(TRUE, 0)); -// return TRUE; -// }, -// 0); -// } - -// HWND -// Button(HWND hwnd, string title, lay_id parent, lay_scalar w, lay_scalar h, uint32_t contain, uint32_t behave) -// { -// lay_id lId = lay_item(&_::ctx); -// lay_insert(&_::ctx, parent, lId); -// lay_set_size_xy(&_::ctx, lId, w, h); -// lay_set_contain(&_::ctx, lId, contain); -// lay_set_behave(&_::ctx, lId, behave); - -// HWND result = CreateWindowExA(0, -// WC_BUTTONA, -// title.c_str(), -// WS_VISIBLE | WS_CHILD, -// 0, 0, 0, 0, -// hwnd, -// nullptr, -// nullptr, -// nullptr); -// _::lIds[result] = lId; -// return result; -// } - -// HWND -// ListBox(HWND hwnd, lay_id parent, lay_scalar w, lay_scalar h, uint32_t contain, uint32_t behave) -// { -// lay_id lId = lay_item(&_::ctx); -// lay_insert(&_::ctx, parent, lId); -// lay_set_size_xy(&_::ctx, lId, w, h); -// lay_set_contain(&_::ctx, lId, contain); -// lay_set_behave(&_::ctx, lId, behave); - -// HWND result = CreateWindowExA(0, -// WC_LISTBOXA, -// "", -// WS_VISIBLE | WS_CHILD | WS_BORDER | WS_VSCROLL, -// 0, 0, 0, 0, -// hwnd, -// nullptr, -// nullptr, -// nullptr); -// _::lIds[result] = lId; -// return result; -// } - -// void -// ListAddString(HWND hwnd, string str) -// { -// SendMessage(hwnd, LB_ADDSTRING, 0, (LPARAM)str.c_str()); -// } - -// int -// ListGetSelectedIndex(HWND hwnd) -// { -// int sel = SendMessage(hwnd, LB_GETCURSEL, 0, 0); -// return sel; -// } - -// int ListFindString(HWND hwnd, string str) -// { -// return SendMessageA(hwnd, LB_FINDSTRINGEXACT, -1, (LPARAM)str.c_str()); -// } - -// string -// ListGetText(HWND hwnd, int index) -// { -// char buffer[1024]; -// SendMessage(hwnd, LB_GETTEXT, index, (LPARAM)buffer); -// return string(buffer); -// } - -// void -// ListClear(HWND hwnd) -// { -// SendMessageA(hwnd, LB_RESETCONTENT, 0, 0); -// } - -// void ListRemove(HWND hwnd, int index) -// { -// SendMessageA(hwnd, LB_DELETESTRING, index, 0); -// } - -// HWND -// ListView(HWND hwnd, lay_id parent, lay_scalar w, lay_scalar h, uint32_t contain, uint32_t behave) -// { -// lay_id lId = lay_item(&_::ctx); -// lay_insert(&_::ctx, parent, lId); -// lay_set_size_xy(&_::ctx, lId, w, h); -// lay_set_contain(&_::ctx, lId, contain); -// lay_set_behave(&_::ctx, lId, behave); - -// HWND result = CreateWindowExA(0, -// WC_LISTVIEWA, -// "", -// WS_VISIBLE | WS_CHILD | WS_BORDER | WS_VSCROLL, -// 0, 0, 0, 0, -// hwnd, -// nullptr, -// nullptr, -// nullptr); -// _::lIds[result] = lId; -// return result; -// } - -// HWND -// CheckBox(HWND hwnd, string title, lay_id parent, lay_scalar w, lay_scalar h, uint32_t contain, uint32_t behave) -// { -// lay_id lId = lay_item(&_::ctx); -// lay_insert(&_::ctx, parent, lId); -// lay_set_size_xy(&_::ctx, lId, w, h); -// lay_set_contain(&_::ctx, lId, contain); -// lay_set_behave(&_::ctx, lId, behave); - -// HWND result = CreateWindowExA(0, -// WC_BUTTONA, -// title.c_str(), -// WS_VISIBLE | WS_CHILD | BS_CHECKBOX, -// 0, 0, 0, 0, -// hwnd, -// nullptr, -// nullptr, -// nullptr); -// _::lIds[result] = lId; -// return result; -// } - -// void SetStyle(HWND hwnd, DWORD style) -// { -// SetWindowLongPtrA(hwnd, GWL_STYLE, style); -// } -// DWORD GetStyle(HWND hwnd) -// { -// return GetWindowLongPtrA(hwnd, GWL_STYLE); -// } -// void AddStyle(HWND hwnd, DWORD style) -// { -// SetWindowLongPtrA(hwnd, GWL_STYLE, GetStyle(hwnd) | style); -// } -// void RemoveStyle(HWND hwnd, DWORD style) -// { -// SetWindowLongPtrA(hwnd, GWL_STYLE, GetStyle(hwnd) & (~style)); -// } -// } - - - namespace win { @@ -339,7 +24,7 @@ namespace win Window *window; Hwnd() {} - Hwnd(Window *window, Hwnd *parent, LPCSTR className, LPCSTR windowName, lay_scalar w, lay_scalar h, uint32_t contain, uint32_t behave); + Hwnd(Window *window, LPCSTR className, LPCSTR windowName, lay_id parent, lay_scalar w, lay_scalar h, uint32_t contain, uint32_t behave); void setStyle(DWORD style) { @@ -503,8 +188,8 @@ namespace win struct Button : Hwnd { - Button(Window *window, Hwnd *parent, std::string title, lay_scalar w, lay_scalar h, uint32_t contain, uint32_t behave) - : Hwnd(window, parent, WC_BUTTONA, title.c_str(), w, h, contain, behave) + Button(Window *window, std::string title, lay_id parent, lay_scalar w, lay_scalar h, uint32_t contain, uint32_t behave) + : Hwnd(window, WC_BUTTONA, title.c_str(), parent, w, h, contain, behave) { window->handlers[WM_COMMAND].push_back([&](HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { if ((HWND)lParam == this->hwnd && HIWORD(wParam) == BN_CLICKED) @@ -523,8 +208,8 @@ namespace win struct CheckBox : Hwnd { - CheckBox(Window *window, Hwnd *parent, std::string title, lay_scalar w, lay_scalar h, uint32_t contain, uint32_t behave) - : Hwnd(window, parent, WC_BUTTONA, title.c_str(), w, h, contain, behave) + CheckBox(Window *window, std::string title, lay_id parent, lay_scalar w, lay_scalar h, uint32_t contain, uint32_t behave) + : Hwnd(window, WC_BUTTONA, title.c_str(), parent, w, h, contain, behave) { addStyle(BS_CHECKBOX); window->handlers[WM_COMMAND].push_back([&](HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { @@ -536,11 +221,11 @@ namespace win struct ListBox : Hwnd { - ListBox(Window *window, Hwnd *parent, lay_scalar w, lay_scalar h, uint32_t contain, uint32_t behave) - : Hwnd(window, parent, WC_LISTBOXA, "", w, h, contain, behave) + ListBox(Window *window, lay_id parent, lay_scalar w, lay_scalar h, uint32_t contain, uint32_t behave) + : Hwnd(window, WC_LISTBOXA, "", parent, w, h, contain, behave) { addStyle(WS_BORDER); - addStyle(WS_VSCROLL); + //addStyle(WS_VSCROLL); } void addString(std::string str) @@ -561,8 +246,7 @@ namespace win std::string getText(int index) { int len = SendMessageA(hwnd, LB_GETTEXTLEN, index, 0); - std::string result; - result.reserve(len); + std::string result(len, 0); SendMessage(hwnd, LB_GETTEXT, index, (LPARAM)result.data()); return result; } @@ -577,17 +261,26 @@ namespace win SendMessageA(hwnd, LB_DELETESTRING, index, 0); } }; + + lay_id createLayId(lay_context *ctx, lay_id parent, lay_scalar w, lay_scalar h, uint32_t contain, uint32_t behave) + { + lay_id lId = lay_item(ctx); + lay_insert(ctx, parent, lId); + lay_set_size_xy(ctx, lId, w, h); + lay_set_contain(ctx, lId, contain); + lay_set_behave(ctx, lId, behave); + return lId; + } } -win::Hwnd::Hwnd(Window *window, Hwnd *parent, LPCSTR className, LPCSTR windowName, lay_scalar w, lay_scalar h, uint32_t contain, uint32_t behave) + + + +win::Hwnd::Hwnd(Window *window, LPCSTR className, LPCSTR windowName, lay_id parent, lay_scalar w, lay_scalar h, uint32_t contain, uint32_t behave) { this->window = window; - lId = lay_item(&window->ctx); - lay_insert(&window->ctx, parent->lId, lId); - lay_set_size_xy(&window->ctx, lId, w, h); - lay_set_contain(&window->ctx, lId, contain); - lay_set_behave(&window->ctx, lId, behave); + lId = createLayId(&window->ctx, parent, w, h, contain, behave); hwnd = CreateWindowExA(0, className,