-
Notifications
You must be signed in to change notification settings - Fork 0
/
MainWindowWtl.hpp
112 lines (93 loc) · 2.96 KB
/
MainWindowWtl.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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#pragma once
#include "CapsHotkeyApp.hpp"
class MainWindow : public CDialogImpl<MainWindow>, public CMessageFilter
{
public:
enum
{
IDD = IDD_DIALOG1
};
BEGIN_MSG_MAP(MainWindow)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
MESSAGE_HANDLER(WM_CLOSE, OnClose)
MESSAGE_HANDLER(WM_COMMAND, OnCommand)
MESSAGE_HANDLER(WM_CTLCOLORDLG, OnBackgroundColor)
MESSAGE_HANDLER(WM_CTLCOLORSTATIC, OnBackgroundColor)
MESSAGE_HANDLER(WM_USER + 1, OnUserCmd)
END_MSG_MAP()
// BEGIN_UPDATE_UI_MAP(MainWindow)
// END_UPDATE_UI_MAP()
public:
MainWindow(HICON icon)
: icon_(icon)
{
}
~MainWindow()
{
}
protected:
BOOL PreTranslateMessage(MSG *pMsg) override
{
return ::IsDialogMessage(m_hWnd, pMsg);
}
int OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL & /*bHandled*/)
{
app_ = std::make_unique<CapsHotkeyApp>(icon_, m_hWnd);
SetIcon(icon_, FALSE);
CenterWindow();
SetDlgItemText(IDC_STATIC, app_->name().c_str());
auto listvc = (CListViewCtrl)GetDlgItem(IDC_LIST1);
listvc.SetExtendedListViewStyle(LVS_EX_TRACKSELECT | LVS_EX_ONECLICKACTIVATE | LVS_EX_FULLROWSELECT);
listvc.InsertColumn(0, _T("Key"), LVCFMT_LEFT | TVIS_BOLD, 100, 0);
listvc.InsertColumn(1, _T("Description"), LVCFMT_LEFT, 400, 1);
auto row = 0;
for (auto &&[k, it] : app_->hooks())
{
listvc.AddItem(row, 0, std::format(L"[Capslock] + {}", str::wide(KeyCodes::key2str(k))).c_str());
listvc.AddItem(row, 1, str::wide(it.desc).c_str());
row++;
}
auto loop = wtl::Loop();
loop->AddMessageFilter(this);
// loop->AddIdleHandler(this);
return 0;
}
int OnClose(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL & /*bHandled*/)
{
ShowWindow(SW_HIDE);
return 0;
}
int OnCommand(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL & /*bHandled*/)
{
if (!app_)
return 0;
switch (MenuAction(LOWORD(wParam)))
{
case MenuAction::Exit:
app_->quit_current_app();
break;
case MenuAction::Help:
app_->show_main_window();
break;
case MenuAction::AutoRun:
app_->toggle_autorun_enabled();
break;
}
return 0;
}
int OnBackgroundColor(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL & /*bHandled*/)
{
return (INT_PTR)GetStockObject(WHITE_BRUSH);
}
int OnUserCmd(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL & /*bHandled*/)
{
if (lParam == WM_RBUTTONUP)
{
app_->show_context_menu();
}
return 0;
}
private:
HICON icon_;
std::unique_ptr<CapsHotkeyApp> app_{ nullptr };
};