-
Notifications
You must be signed in to change notification settings - Fork 0
/
MainWindowW32Wrap.hpp
78 lines (68 loc) · 2.58 KB
/
MainWindowW32Wrap.hpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#pragma once
#include "CapsHotkeyApp.hpp"
#include "res/resource.h"
#include "thWin32App.h"
int run_mainwindow_use_win32_wrap(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nShowCmd)
{
static int span = 10;
static int height = 24;
auto logo = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON2));
thWin32App app;
thForm form(logo, TEXT("Capslock Hotkey v2.8"));
form.Width = 600;
form.Height = 400;
form.X = (GetSystemMetrics(SM_CXSCREEN) - form.Width) / 2;
form.Y = (GetSystemMetrics(SM_CYSCREEN) - form.Height) / 2;
thLabel label(&form, span, 6);
label.Width = form.Width - span * 2;
label.Height = height;
label.Text = TEXT("Capslock Hotkey Mappings");
label.Font.SetSize(12);
thListView table(&form, span, span + height);
table.Width = label.Width;
table.Height = form.Height - label.Height - span * 2;
table.Anchors.Right = true;
table.Anchors.Bottom = true;
table.Columns.Add(TEXT("Key"), 160);
table.Columns.Add(TEXT("Description"), table.Width - span * 3 - 160);
table.SetView(thListView::eViewType_t::view_details);
auto hwnd = form.GetHandle();
CapsHotkeyApp cha(logo, hwnd);
auto i = 0;
for (auto &&[k, it] : cha.hooks())
{
table.Items.Add(std::format(L"[Capslock] + {}", str::wide(KeyCodes::key2str(k))).c_str());
table.Items[i++].SubItems[1].SetText(str::wide(it.desc).c_str());
}
form.UserMessage[WM_USER + 1] = [&cha](auto &&obj, auto &&arg) -> LRESULT {
if (arg.lParam == WM_RBUTTONUP)
{
cha.show_context_menu();
}
return 0;
};
form.UserMessage[WM_ERASEBKGND] = [&cha](auto &&, auto &&) -> LRESULT { return (INT_PTR)GetStockObject(WHITE_BRUSH); };
form.UserMessage[WM_CLOSE] = [hwnd](auto &&, auto &&) -> LRESULT {
ShowWindow(hwnd, SW_HIDE);
return TRUE;
};
form.UserMessage[WM_CTLCOLORSTATIC] = [&cha](auto &&, auto &&) -> LRESULT { return (INT_PTR)GetStockObject(WHITE_BRUSH); };
form.UserMessage[WM_COMMAND] = [&cha](auto &&obj, auto &&arg) -> LRESULT {
switch (MenuAction(LOWORD(arg.wParam)))
{
case MenuAction::Exit:
cha.quit_current_app();
break;
case MenuAction::Help:
cha.show_main_window();
break;
case MenuAction::AutoRun:
cha.toggle_autorun_enabled();
break;
}
return 0;
};
app.Run();
DestroyIcon(logo);
return EXIT_SUCCESS;
}