Skip to content

Commit 52944b9

Browse files
committed
Add edit menu items and implemented mouse wheel zooming in edit control
1 parent 1bc14b1 commit 52944b9

File tree

2 files changed

+58
-2
lines changed

2 files changed

+58
-2
lines changed

include/ids.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,20 @@
2020
#define ID_VIEW_ZOOM_OUT 10
2121
#define ID_VIEW_ZOOM_RESET 11
2222

23+
#define ID_EDIT_UNDO 12
24+
#define ID_EDIT_CUT 13
25+
#define ID_EDIT_COPY 14
26+
#define ID_EDIT_PASTE 15
27+
#define ID_EDIT_DELETE 16
28+
#define ID_EDIT_GEMINI 17
29+
#define ID_EDIT_FIND 18
30+
#define ID_EDIT_FIND_NEXT 19
31+
#define ID_EDIT_FIND_PREV 20
32+
#define ID_EDIT_REPLACE 21
33+
#define ID_EDIT_GOTO 22
34+
#define ID_EDIT_SELECT_ALL 23
35+
#define ID_EDIT_TIMENDATE 24
36+
2337
#define ID_CONTROL_EDIT 500
2438
#define ID_CONTROL_STATUSBAR 501
2539

src/main.c

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,31 @@ static HWND ghStatusBar;
2828

2929
#pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
3030

31+
LRESULT CALLBACK EditSubclassProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_PTR uIdSubclass, DWORD_PTR dwrefData)
32+
{
33+
switch (uMsg)
34+
{
35+
case WM_MOUSEWHEEL:
36+
{
37+
if (GetKeyState(VK_CONTROL) & 0x8000)
38+
{
39+
int nDelta = GET_WHEEL_DELTA_WPARAM(wParam);
40+
41+
if (nDelta > 0)
42+
SendMessage(ghWindow, WM_COMMAND, MAKEWPARAM(ID_VIEW_ZOOM_IN, 0), (LPARAM)hwnd);
43+
else if (nDelta < 0)
44+
SendMessage(ghWindow, WM_COMMAND, MAKEWPARAM(ID_VIEW_ZOOM_OUT, 0), (LPARAM)hwnd);
45+
46+
return 0;
47+
}
48+
49+
break;
50+
}
51+
}
52+
53+
return DefSubclassProc(hwnd, uMsg, wParam, lParam);
54+
}
55+
3156
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
3257
{
3358
switch (uMsg)
@@ -55,8 +80,23 @@ LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
5580
AppendMenu(hFileMenu, MF_STRING | MF_ENABLED | MF_RIGHTJUSTIFY, ID_FILE_EXIT, TEXT("Exit\tAlt+F4"));
5681

5782
HMENU hEditMenu = CreateMenu();
58-
// TODO: Add edit menu
59-
83+
AppendMenu(hEditMenu, MF_STRING | MF_ENABLED | MF_RIGHTJUSTIFY, ID_EDIT_UNDO, TEXT("Undo\tCtrl+Z"));
84+
AppendMenu(hEditMenu, MF_SEPARATOR, 0, NULL);
85+
AppendMenu(hEditMenu, MF_STRING | MF_ENABLED | MF_RIGHTJUSTIFY, ID_EDIT_CUT, TEXT("Cut\tCtrl+X"));
86+
AppendMenu(hEditMenu, MF_STRING | MF_ENABLED | MF_RIGHTJUSTIFY, ID_EDIT_COPY, TEXT("Copy\tCtrl+C"));
87+
AppendMenu(hEditMenu, MF_STRING | MF_ENABLED | MF_RIGHTJUSTIFY, ID_EDIT_PASTE, TEXT("Paste\tCtrl+V"));
88+
AppendMenu(hEditMenu, MF_STRING | MF_ENABLED | MF_RIGHTJUSTIFY, ID_EDIT_DELETE, TEXT("Delete\tDel"));
89+
AppendMenu(hEditMenu, MF_SEPARATOR, 0, NULL);
90+
AppendMenu(hEditMenu, MF_STRING | MF_DISABLED | MF_RIGHTJUSTIFY, ID_EDIT_GEMINI, TEXT("Summarize with Gemini...\tCtrl+E"));
91+
AppendMenu(hEditMenu, MF_STRING | MF_DISABLED | MF_RIGHTJUSTIFY, ID_EDIT_FIND, TEXT("Find...\tCtrl+F"));
92+
AppendMenu(hEditMenu, MF_STRING | MF_DISABLED | MF_RIGHTJUSTIFY, ID_EDIT_FIND_NEXT, TEXT("Find Next\tF3"));
93+
AppendMenu(hEditMenu, MF_STRING | MF_DISABLED | MF_RIGHTJUSTIFY, ID_EDIT_FIND_PREV, TEXT("Find Previous\tShift+F3"));
94+
AppendMenu(hEditMenu, MF_STRING | MF_DISABLED | MF_RIGHTJUSTIFY, ID_EDIT_REPLACE, TEXT("Replace...\tCtrl+H"));
95+
AppendMenu(hEditMenu, MF_STRING | MF_DISABLED | MF_RIGHTJUSTIFY, ID_EDIT_GOTO, TEXT("Go To...\tCtrl+G"));
96+
AppendMenu(hEditMenu, MF_SEPARATOR, 0, NULL);
97+
AppendMenu(hEditMenu, MF_STRING | MF_ENABLED | MF_RIGHTJUSTIFY, ID_EDIT_SELECT_ALL, TEXT("Select All\tCtrl+A"));
98+
AppendMenu(hEditMenu, MF_STRING | MF_DISABLED | MF_RIGHTJUSTIFY, ID_EDIT_TIMENDATE, TEXT("Time/Date\tF5"));
99+
60100
HMENU hFormatMenu = CreateMenu();
61101
AppendMenu(hFormatMenu, MF_STRING | MF_ENABLED, ID_FORMAT_FONT, TEXT("Font..."));
62102

@@ -99,6 +139,8 @@ LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
99139
if (ghEdit == NULL)
100140
ShowLastError(L"Failed to create an EDIT control");
101141

142+
SetWindowSubclass(ghEdit, EditSubclassProc, 0, 0);
143+
102144
ghStatusBar = CreateWindowExW(0, STATUSCLASSNAMEW, NULL,
103145
WS_CHILD | WS_VISIBLE | SBARS_SIZEGRIP, 0, 0, 0, 0,
104146
hwnd, (HMENU)ID_CONTROL_STATUSBAR, ((LPCREATESTRUCT)lParam)->hInstance, NULL

0 commit comments

Comments
 (0)