win32 standalone gui
This commit is contained in:
parent
1ad6b8db3d
commit
1a595871dd
10 changed files with 1773 additions and 1 deletions
365
src/win32/windowmsg.zig
Normal file
365
src/win32/windowmsg.zig
Normal file
|
@ -0,0 +1,365 @@
|
|||
const std = @import("std");
|
||||
const win32 = @import("win32").everything;
|
||||
|
||||
pub fn pointFromLparam(lparam: win32.LPARAM) win32.POINT {
|
||||
return .{
|
||||
.x = @as(i16, @bitCast(win32.loword(lparam))),
|
||||
.y = @as(i16, @bitCast(win32.hiword(lparam))),
|
||||
};
|
||||
}
|
||||
|
||||
pub const MessageNode = struct {
|
||||
tail_ref: *?*MessageNode,
|
||||
hwnd: win32.HWND,
|
||||
msg: u32,
|
||||
wparam: win32.WPARAM,
|
||||
lparam: win32.LPARAM,
|
||||
old_tail: ?*MessageNode,
|
||||
pub fn init(
|
||||
self: *MessageNode,
|
||||
tail_ref: *?*MessageNode,
|
||||
hwnd: win32.HWND,
|
||||
msg: u32,
|
||||
wparam: win32.WPARAM,
|
||||
lparam: win32.LPARAM,
|
||||
) void {
|
||||
if (tail_ref.*) |old_tail| {
|
||||
std.debug.assert(old_tail.hwnd == hwnd);
|
||||
}
|
||||
self.* = .{
|
||||
.tail_ref = tail_ref,
|
||||
.hwnd = hwnd,
|
||||
.msg = msg,
|
||||
.wparam = wparam,
|
||||
.lparam = lparam,
|
||||
.old_tail = tail_ref.*,
|
||||
};
|
||||
tail_ref.* = self;
|
||||
}
|
||||
pub fn deinit(self: *MessageNode) void {
|
||||
std.debug.assert(self.tail_ref.* == self);
|
||||
self.tail_ref.* = self.old_tail;
|
||||
}
|
||||
pub fn fmtPath(self: *MessageNode) FmtPath {
|
||||
return .{ .node = self };
|
||||
}
|
||||
};
|
||||
|
||||
fn writeMessageNodePath(
|
||||
writer: anytype,
|
||||
node: *MessageNode,
|
||||
) !void {
|
||||
if (node.old_tail) |old_tail| {
|
||||
try writeMessageNodePath(writer, old_tail);
|
||||
try writer.writeAll(" > ");
|
||||
}
|
||||
try writer.print("{s}:{}", .{ msg_name(node.msg) orelse "?", node.msg });
|
||||
switch (node.msg) {
|
||||
win32.WM_NCMOUSEMOVE,
|
||||
win32.WM_NCLBUTTONDOWN,
|
||||
=> {
|
||||
const hit_value = node.wparam;
|
||||
const point = pointFromLparam(node.lparam);
|
||||
try writer.print(
|
||||
"(hit={s}:{},point={},{})",
|
||||
.{ getHitName(@bitCast(hit_value)) orelse "?", hit_value, point.x, point.y },
|
||||
);
|
||||
},
|
||||
win32.WM_NCHITTEST,
|
||||
win32.WM_MOUSEMOVE,
|
||||
=> {
|
||||
const point = pointFromLparam(node.lparam);
|
||||
try writer.print("({},{})", .{ point.x, point.y });
|
||||
},
|
||||
win32.WM_CAPTURECHANGED => {
|
||||
try writer.print("({})", .{node.lparam});
|
||||
},
|
||||
win32.WM_SYSCOMMAND => {
|
||||
try writer.print("(type=0x{x})", .{0xfff0 & node.wparam});
|
||||
},
|
||||
else => {},
|
||||
}
|
||||
}
|
||||
|
||||
const FmtPath = struct {
|
||||
node: *MessageNode,
|
||||
const Self = @This();
|
||||
pub fn format(
|
||||
self: Self,
|
||||
comptime fmt: []const u8,
|
||||
options: std.fmt.FormatOptions,
|
||||
writer: anytype,
|
||||
) @TypeOf(writer).Error!void {
|
||||
_ = fmt;
|
||||
_ = options;
|
||||
try writeMessageNodePath(writer, self.node);
|
||||
}
|
||||
};
|
||||
|
||||
pub fn msg_name(msg: u32) ?[]const u8 {
|
||||
return switch (msg) {
|
||||
0 => "WM_NULL",
|
||||
1 => "WM_CREATE",
|
||||
2 => "WM_DESTROY",
|
||||
3 => "WM_MOVE",
|
||||
5 => "WM_SIZE",
|
||||
6 => "WM_ACTIVATE",
|
||||
7 => "WM_SETFOCUS",
|
||||
8 => "WM_KILLFOCUS",
|
||||
10 => "WM_ENABLE",
|
||||
11 => "WM_SETREDRAW",
|
||||
12 => "WM_SETTEXT",
|
||||
13 => "WM_GETTEXT",
|
||||
14 => "WM_GETTEXTLENGTH",
|
||||
15 => "WM_PAINT",
|
||||
16 => "WM_CLOSE",
|
||||
17 => "WM_QUERYENDSESSION",
|
||||
18 => "WM_QUIT",
|
||||
19 => "WM_QUERYOPEN",
|
||||
20 => "WM_ERASEBKGND",
|
||||
21 => "WM_SYSCOLORCHANGE",
|
||||
22 => "WM_ENDSESSION",
|
||||
24 => "WM_SHOWWINDOW",
|
||||
25 => "WM_CTLCOLOR",
|
||||
26 => "WM_WININICHANGE",
|
||||
27 => "WM_DEVMODECHANGE",
|
||||
28 => "WM_ACTIVATEAPP",
|
||||
29 => "WM_FONTCHANGE",
|
||||
30 => "WM_TIMECHANGE",
|
||||
31 => "WM_CANCELMODE",
|
||||
32 => "WM_SETCURSOR",
|
||||
33 => "WM_MOUSEACTIVATE",
|
||||
34 => "WM_CHILDACTIVATE",
|
||||
35 => "WM_QUEUESYNC",
|
||||
36 => "WM_GETMINMAXINFO",
|
||||
38 => "WM_PAINTICON",
|
||||
39 => "WM_ICONERASEBKGND",
|
||||
40 => "WM_NEXTDLGCTL",
|
||||
42 => "WM_SPOOLERSTATUS",
|
||||
43 => "WM_DRAWITEM",
|
||||
44 => "WM_MEASUREITEM",
|
||||
45 => "WM_DELETEITEM",
|
||||
46 => "WM_VKEYTOITEM",
|
||||
47 => "WM_CHARTOITEM",
|
||||
48 => "WM_SETFONT",
|
||||
49 => "WM_GETFONT",
|
||||
50 => "WM_SETHOTKEY",
|
||||
51 => "WM_GETHOTKEY",
|
||||
55 => "WM_QUERYDRAGICON",
|
||||
57 => "WM_COMPAREITEM",
|
||||
61 => "WM_GETOBJECT",
|
||||
65 => "WM_COMPACTING",
|
||||
68 => "WM_COMMNOTIFY",
|
||||
70 => "WM_WINDOWPOSCHANGING",
|
||||
71 => "WM_WINDOWPOSCHANGED",
|
||||
72 => "WM_POWER",
|
||||
73 => "WM_COPYGLOBALDATA",
|
||||
74 => "WM_COPYDATA",
|
||||
75 => "WM_CANCELJOURNAL",
|
||||
78 => "WM_NOTIFY",
|
||||
80 => "WM_INPUTLANGCHANGEREQUEST",
|
||||
81 => "WM_INPUTLANGCHANGE",
|
||||
82 => "WM_TCARD",
|
||||
83 => "WM_HELP",
|
||||
84 => "WM_USERCHANGED",
|
||||
85 => "WM_NOTIFYFORMAT",
|
||||
123 => "WM_CONTEXTMENU",
|
||||
124 => "WM_STYLECHANGING",
|
||||
125 => "WM_STYLECHANGED",
|
||||
126 => "WM_DISPLAYCHANGE",
|
||||
127 => "WM_GETICON",
|
||||
128 => "WM_SETICON",
|
||||
129 => "WM_NCCREATE",
|
||||
130 => "WM_NCDESTROY",
|
||||
131 => "WM_NCCALCSIZE",
|
||||
132 => "WM_NCHITTEST",
|
||||
133 => "WM_NCPAINT",
|
||||
134 => "WM_NCACTIVATE",
|
||||
135 => "WM_GETDLGCODE",
|
||||
136 => "WM_SYNCPAINT",
|
||||
160 => "WM_NCMOUSEMOVE",
|
||||
161 => "WM_NCLBUTTONDOWN",
|
||||
162 => "WM_NCLBUTTONUP",
|
||||
163 => "WM_NCLBUTTONDBLCLK",
|
||||
164 => "WM_NCRBUTTONDOWN",
|
||||
165 => "WM_NCRBUTTONUP",
|
||||
166 => "WM_NCRBUTTONDBLCLK",
|
||||
167 => "WM_NCMBUTTONDOWN",
|
||||
168 => "WM_NCMBUTTONUP",
|
||||
169 => "WM_NCMBUTTONDBLCLK",
|
||||
171 => "WM_NCXBUTTONDOWN",
|
||||
172 => "WM_NCXBUTTONUP",
|
||||
173 => "WM_NCXBUTTONDBLCLK",
|
||||
255 => "WM_INPUT",
|
||||
256 => "WM_KEYDOWN",
|
||||
257 => "WM_KEYUP",
|
||||
258 => "WM_CHAR",
|
||||
259 => "WM_DEADCHAR",
|
||||
260 => "WM_SYSKEYDOWN",
|
||||
261 => "WM_SYSKEYUP",
|
||||
262 => "WM_SYSCHAR",
|
||||
263 => "WM_SYSDEADCHAR",
|
||||
265 => "WM_UNICHAR",
|
||||
266 => "WM_CONVERTREQUEST",
|
||||
267 => "WM_CONVERTRESULT",
|
||||
268 => "WM_INTERIM",
|
||||
269 => "WM_IME_STARTCOMPOSITION",
|
||||
270 => "WM_IME_ENDCOMPOSITION",
|
||||
271 => "WM_IME_COMPOSITION",
|
||||
272 => "WM_INITDIALOG",
|
||||
273 => "WM_COMMAND",
|
||||
274 => "WM_SYSCOMMAND",
|
||||
275 => "WM_TIMER",
|
||||
276 => "WM_HSCROLL",
|
||||
277 => "WM_VSCROLL",
|
||||
278 => "WM_INITMENU",
|
||||
279 => "WM_INITMENUPOPUP",
|
||||
280 => "WM_SYSTIMER",
|
||||
287 => "WM_MENUSELECT",
|
||||
288 => "WM_MENUCHAR",
|
||||
289 => "WM_ENTERIDLE",
|
||||
290 => "WM_MENURBUTTONUP",
|
||||
291 => "WM_MENUDRAG",
|
||||
292 => "WM_MENUGETOBJECT",
|
||||
293 => "WM_UNINITMENUPOPUP",
|
||||
294 => "WM_MENUCOMMAND",
|
||||
295 => "WM_CHANGEUISTATE",
|
||||
296 => "WM_UPDATEUISTATE",
|
||||
297 => "WM_QUERYUISTATE",
|
||||
305 => "WM_LBTRACKPOINT",
|
||||
306 => "WM_CTLCOLORMSGBOX",
|
||||
307 => "WM_CTLCOLOREDIT",
|
||||
308 => "WM_CTLCOLORLISTBOX",
|
||||
309 => "WM_CTLCOLORBTN",
|
||||
310 => "WM_CTLCOLORDLG",
|
||||
311 => "WM_CTLCOLORSCROLLBAR",
|
||||
312 => "WM_CTLCOLORSTATIC",
|
||||
512 => "WM_MOUSEMOVE",
|
||||
513 => "WM_LBUTTONDOWN",
|
||||
514 => "WM_LBUTTONUP",
|
||||
515 => "WM_LBUTTONDBLCLK",
|
||||
516 => "WM_RBUTTONDOWN",
|
||||
517 => "WM_RBUTTONUP",
|
||||
518 => "WM_RBUTTONDBLCLK",
|
||||
519 => "WM_MBUTTONDOWN",
|
||||
520 => "WM_MBUTTONUP",
|
||||
521 => "WM_MBUTTONDBLCLK",
|
||||
522 => "WM_MOUSEWHEEL",
|
||||
523 => "WM_XBUTTONDOWN",
|
||||
524 => "WM_XBUTTONUP",
|
||||
525 => "WM_XBUTTONDBLCLK",
|
||||
526 => "WM_MOUSEHWHEEL",
|
||||
528 => "WM_PARENTNOTIFY",
|
||||
529 => "WM_ENTERMENULOOP",
|
||||
530 => "WM_EXITMENULOOP",
|
||||
531 => "WM_NEXTMENU",
|
||||
532 => "WM_SIZING",
|
||||
533 => "WM_CAPTURECHANGED",
|
||||
534 => "WM_MOVING",
|
||||
536 => "WM_POWERBROADCAST",
|
||||
537 => "WM_DEVICECHANGE",
|
||||
544 => "WM_MDICREATE",
|
||||
545 => "WM_MDIDESTROY",
|
||||
546 => "WM_MDIACTIVATE",
|
||||
547 => "WM_MDIRESTORE",
|
||||
548 => "WM_MDINEXT",
|
||||
549 => "WM_MDIMAXIMIZE",
|
||||
550 => "WM_MDITILE",
|
||||
551 => "WM_MDICASCADE",
|
||||
552 => "WM_MDIICONARRANGE",
|
||||
553 => "WM_MDIGETACTIVE",
|
||||
560 => "WM_MDISETMENU",
|
||||
561 => "WM_ENTERSIZEMOVE",
|
||||
562 => "WM_EXITSIZEMOVE",
|
||||
563 => "WM_DROPFILES",
|
||||
564 => "WM_MDIREFRESHMENU",
|
||||
640 => "WM_IME_REPORT",
|
||||
641 => "WM_IME_SETCONTEXT",
|
||||
642 => "WM_IME_NOTIFY",
|
||||
643 => "WM_IME_CONTROL",
|
||||
644 => "WM_IME_COMPOSITIONFULL",
|
||||
645 => "WM_IME_SELECT",
|
||||
646 => "WM_IME_CHAR",
|
||||
648 => "WM_IME_REQUEST",
|
||||
656 => "WM_IME_KEYDOWN",
|
||||
657 => "WM_IME_KEYUP",
|
||||
672 => "WM_NCMOUSEHOVER",
|
||||
673 => "WM_MOUSEHOVER",
|
||||
674 => "WM_NCMOUSELEAVE",
|
||||
675 => "WM_MOUSELEAVE",
|
||||
768 => "WM_CUT",
|
||||
769 => "WM_COPY",
|
||||
770 => "WM_PASTE",
|
||||
771 => "WM_CLEAR",
|
||||
772 => "WM_UNDO",
|
||||
773 => "WM_RENDERFORMAT",
|
||||
774 => "WM_RENDERALLFORMATS",
|
||||
775 => "WM_DESTROYCLIPBOARD",
|
||||
776 => "WM_DRAWCLIPBOARD",
|
||||
777 => "WM_PAINTCLIPBOARD",
|
||||
778 => "WM_VSCROLLCLIPBOARD",
|
||||
779 => "WM_SIZECLIPBOARD",
|
||||
780 => "WM_ASKCBFORMATNAME",
|
||||
781 => "WM_CHANGECBCHAIN",
|
||||
782 => "WM_HSCROLLCLIPBOARD",
|
||||
783 => "WM_QUERYNEWPALETTE",
|
||||
784 => "WM_PALETTEISCHANGING",
|
||||
785 => "WM_PALETTECHANGED",
|
||||
786 => "WM_HOTKEY",
|
||||
791 => "WM_PRINT",
|
||||
792 => "WM_PRINTCLIENT",
|
||||
793 => "WM_APPCOMMAND",
|
||||
799 => "WM_DWMNCRENDERINGCHANGED",
|
||||
856 => "WM_HANDHELDFIRST",
|
||||
863 => "WM_HANDHELDLAST",
|
||||
864 => "WM_AFXFIRST",
|
||||
895 => "WM_AFXLAST",
|
||||
896 => "WM_PENWINFIRST",
|
||||
897 => "WM_RCRESULT",
|
||||
898 => "WM_HOOKRCRESULT",
|
||||
899 => "WM_GLOBALRCCHANGE",
|
||||
900 => "WM_SKB",
|
||||
901 => "WM_PENCTL",
|
||||
902 => "WM_PENMISC",
|
||||
903 => "WM_CTLINIT",
|
||||
904 => "WM_PENEVENT",
|
||||
911 => "WM_PENWINLAST",
|
||||
1024 => "WM_USER+0",
|
||||
1025 => "WM_USER+1",
|
||||
1026 => "WM_USER+2",
|
||||
1027 => "WM_USER+3",
|
||||
1028 => "WM_USER+4",
|
||||
1029 => "WM_USER+5",
|
||||
1030 => "WM_USER+6",
|
||||
else => null,
|
||||
};
|
||||
}
|
||||
|
||||
pub fn getHitName(hit: win32.LRESULT) ?[]const u8 {
|
||||
return switch (hit) {
|
||||
win32.HTERROR => "err",
|
||||
win32.HTTRANSPARENT => "transprnt",
|
||||
win32.HTNOWHERE => "nowhere",
|
||||
win32.HTCLIENT => "client",
|
||||
win32.HTCAPTION => "caption",
|
||||
win32.HTSYSMENU => "sysmnu",
|
||||
win32.HTSIZE => "size",
|
||||
win32.HTMENU => "menu",
|
||||
win32.HTHSCROLL => "hscroll",
|
||||
win32.HTVSCROLL => "vscroll",
|
||||
win32.HTMINBUTTON => "minbtn",
|
||||
win32.HTMAXBUTTON => "max",
|
||||
win32.HTLEFT => "left",
|
||||
win32.HTRIGHT => "right",
|
||||
win32.HTTOP => "top",
|
||||
win32.HTTOPLEFT => "topleft",
|
||||
win32.HTTOPRIGHT => "topright",
|
||||
win32.HTBOTTOM => "bottom",
|
||||
win32.HTBOTTOMLEFT => "botmleft",
|
||||
win32.HTBOTTOMRIGHT => "botmright",
|
||||
win32.HTBORDER => "border",
|
||||
win32.HTCLOSE => "close",
|
||||
win32.HTHELP => "help",
|
||||
else => null,
|
||||
};
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue