1use std::borrow::Cow;
2
3pub fn win_msg_name(id: u32) -> Cow<'static, str> {
4 match ID_TO_NAME.binary_search_by_key(&id, |&(id, _name)| id) {
5 Ok(idx) => ID_TO_NAME[idx].1.into(),
6 Err(_) => format!("WM_??? (0x{:04x})", id).into(),
7 }
8}
9
10#[cfg(test)]
11#[test]
12fn test() {
13 assert_eq!(win_msg_name(5), "WM_SIZE");
14 assert_eq!(win_msg_name(0x9999), "WM_??? (0x9999)");
15}
16
17const ID_TO_NAME: &[(u32, &str)] = &[
19 (0x0000, "WM_NULL"),
20 (0x0001, "WM_CREATE"),
21 (0x0002, "WM_DESTROY"),
22 (0x0003, "WM_MOVE"),
23 (0x0005, "WM_SIZE"),
24 (0x0006, "WM_ACTIVATE"),
25 (0x0007, "WM_SETFOCUS"),
26 (0x0008, "WM_KILLFOCUS"),
27 (0x000a, "WM_ENABLE"),
28 (0x000b, "WM_SETREDRAW"),
29 (0x000c, "WM_SETTEXT"),
30 (0x000d, "WM_GETTEXT"),
31 (0x000e, "WM_GETTEXTLENGTH"),
32 (0x000f, "WM_PAINT"),
33 (0x0010, "WM_CLOSE"),
34 (0x0011, "WM_QUERYENDSESSION"),
35 (0x0012, "WM_QUIT"),
36 (0x0013, "WM_QUERYOPEN"),
37 (0x0014, "WM_ERASEBKGND"),
38 (0x0015, "WM_SYSCOLORCHANGE"),
39 (0x0016, "WM_ENDSESSION"),
40 (0x0018, "WM_SHOWWINDOW"),
41 (0x001a, "WM_WININICHANGE"),
42 (0x001b, "WM_DEVMODECHANGE"),
43 (0x001c, "WM_ACTIVATEAPP"),
44 (0x001d, "WM_FONTCHANGE"),
45 (0x001e, "WM_TIMECHANGE"),
46 (0x001f, "WM_CANCELMODE"),
47 (0x0020, "WM_SETCURSOR"),
48 (0x0021, "WM_MOUSEACTIVATE"),
49 (0x0022, "WM_CHILDACTIVATE"),
50 (0x0023, "WM_QUEUESYNC"),
51 (0x0024, "WM_GETMINMAXINFO"),
52 (0x0026, "WM_PAINTICON"),
53 (0x0027, "WM_ICONERASEBKGND"),
54 (0x0028, "WM_NEXTDLGCTL"),
55 (0x002a, "WM_SPOOLERSTATUS"),
56 (0x002b, "WM_DRAWITEM"),
57 (0x002c, "WM_MEASUREITEM"),
58 (0x002d, "WM_DELETEITEM"),
59 (0x002e, "WM_VKEYTOITEM"),
60 (0x002f, "WM_CHARTOITEM"),
61 (0x0030, "WM_SETFONT"),
62 (0x0031, "WM_GETFONT"),
63 (0x0032, "WM_SETHOTKEY"),
64 (0x0033, "WM_GETHOTKEY"),
65 (0x0037, "WM_QUERYDRAGICON"),
66 (0x0039, "WM_COMPAREITEM"),
67 (0x003d, "WM_GETOBJECT"),
68 (0x0041, "WM_COMPACTING"),
69 (0x0046, "WM_WINDOWPOSCHANGING"),
70 (0x0047, "WM_WINDOWPOSCHANGED"),
71 (0x0048, "WM_POWER"),
72 (0x004a, "WM_COPYDATA"),
73 (0x004b, "WM_CANCELJOURNAL"),
74 (0x004e, "WM_NOTIFY"),
75 (0x0050, "WM_INPUTLANGCHANGEREQUEST"),
76 (0x0051, "WM_INPUTLANGCHANGE"),
77 (0x0052, "WM_TCARD"),
78 (0x0053, "WM_HELP"),
79 (0x0054, "WM_USERCHANGED"),
80 (0x0055, "WM_NOTIFYFORMAT"),
81 (0x007b, "WM_CONTEXTMENU"),
82 (0x007c, "WM_STYLECHANGING"),
83 (0x007d, "WM_STYLECHANGED"),
84 (0x007e, "WM_DISPLAYCHANGE"),
85 (0x007f, "WM_GETICON"),
86 (0x0080, "WM_SETICON"),
87 (0x0081, "WM_NCCREATE"),
88 (0x0082, "WM_NCDESTROY"),
89 (0x0083, "WM_NCCALCSIZE"),
90 (0x0084, "WM_NCHITTEST"),
91 (0x0085, "WM_NCPAINT"),
92 (0x0086, "WM_NCACTIVATE"),
93 (0x0087, "WM_GETDLGCODE"),
94 (0x0088, "WM_SYNCPAINT"),
95 (0x00a0, "WM_NCMOUSEMOVE"),
96 (0x00a1, "WM_NCLBUTTONDOWN"),
97 (0x00a2, "WM_NCLBUTTONUP"),
98 (0x00a3, "WM_NCLBUTTONDBLCLK"),
99 (0x00a4, "WM_NCRBUTTONDOWN"),
100 (0x00a5, "WM_NCRBUTTONUP"),
101 (0x00a6, "WM_NCRBUTTONDBLCLK"),
102 (0x00a7, "WM_NCMBUTTONDOWN"),
103 (0x00a8, "WM_NCMBUTTONUP"),
104 (0x00a9, "WM_NCMBUTTONDBLCLK"),
105 (0x00ab, "WM_NCXBUTTONDOWN"),
106 (0x00ac, "WM_NCXBUTTONUP"),
107 (0x00ad, "WM_NCXBUTTONDBLCLK"),
108 (0x00fe, "WM_INPUT_DEVICE_CHANGE"),
109 (0x00ff, "WM_INPUT"),
110 (0x0100, "WM_KEYDOWN"),
111 (0x0101, "WM_KEYUP"),
112 (0x0102, "WM_CHAR"),
113 (0x0103, "WM_DEADCHAR"),
114 (0x0104, "WM_SYSKEYDOWN"),
115 (0x0105, "WM_SYSKEYUP"),
116 (0x0106, "WM_SYSCHAR"),
117 (0x0107, "WM_SYSDEADCHAR"),
118 (0x0109, "WM_UNICHAR"),
119 (0x010d, "WM_IME_STARTCOMPOSITION"),
120 (0x010e, "WM_IME_ENDCOMPOSITION"),
121 (0x010f, "WM_IME_COMPOSITION"),
122 (0x0110, "WM_INITDIALOG"),
123 (0x0111, "WM_COMMAND"),
124 (0x0112, "WM_SYSCOMMAND"),
125 (0x0113, "WM_TIMER"),
126 (0x0114, "WM_HSCROLL"),
127 (0x0115, "WM_VSCROLL"),
128 (0x0116, "WM_INITMENU"),
129 (0x0117, "WM_INITMENUPOPUP"),
130 (0x0119, "WM_GESTURE"),
131 (0x011a, "WM_GESTURENOTIFY"),
132 (0x011f, "WM_MENUSELECT"),
133 (0x0120, "WM_MENUCHAR"),
134 (0x0121, "WM_ENTERIDLE"),
135 (0x0122, "WM_MENURBUTTONUP"),
136 (0x0123, "WM_MENUDRAG"),
137 (0x0124, "WM_MENUGETOBJECT"),
138 (0x0125, "WM_UNINITMENUPOPUP"),
139 (0x0126, "WM_MENUCOMMAND"),
140 (0x0127, "WM_CHANGEUISTATE"),
141 (0x0128, "WM_UPDATEUISTATE"),
142 (0x0129, "WM_QUERYUISTATE"),
143 (0x0132, "WM_CTLCOLORMSGBOX"),
144 (0x0133, "WM_CTLCOLOREDIT"),
145 (0x0134, "WM_CTLCOLORLISTBOX"),
146 (0x0135, "WM_CTLCOLORBTN"),
147 (0x0136, "WM_CTLCOLORDLG"),
148 (0x0137, "WM_CTLCOLORSCROLLBAR"),
149 (0x0138, "WM_CTLCOLORSTATIC"),
150 (0x0200, "WM_MOUSEMOVE"),
151 (0x0201, "WM_LBUTTONDOWN"),
152 (0x0202, "WM_LBUTTONUP"),
153 (0x0203, "WM_LBUTTONDBLCLK"),
154 (0x0204, "WM_RBUTTONDOWN"),
155 (0x0205, "WM_RBUTTONUP"),
156 (0x0206, "WM_RBUTTONDBLCLK"),
157 (0x0207, "WM_MBUTTONDOWN"),
158 (0x0208, "WM_MBUTTONUP"),
159 (0x0209, "WM_MBUTTONDBLCLK"),
160 (0x020a, "WM_MOUSEWHEEL"),
161 (0x020b, "WM_XBUTTONDOWN"),
162 (0x020c, "WM_XBUTTONUP"),
163 (0x020d, "WM_XBUTTONDBLCLK"),
164 (0x020e, "WM_MOUSEHWHEEL"),
165 (0x0210, "WM_PARENTNOTIFY"),
166 (0x0211, "WM_ENTERMENULOOP"),
167 (0x0212, "WM_EXITMENULOOP"),
168 (0x0213, "WM_NEXTMENU"),
169 (0x0214, "WM_SIZING"),
170 (0x0215, "WM_CAPTURECHANGED"),
171 (0x0216, "WM_MOVING"),
172 (0x0218, "WM_POWERBROADCAST"),
173 (0x0219, "WM_DEVICECHANGE"),
174 (0x0220, "WM_MDICREATE"),
175 (0x0221, "WM_MDIDESTROY"),
176 (0x0222, "WM_MDIACTIVATE"),
177 (0x0223, "WM_MDIRESTORE"),
178 (0x0224, "WM_MDINEXT"),
179 (0x0225, "WM_MDIMAXIMIZE"),
180 (0x0226, "WM_MDITILE"),
181 (0x0227, "WM_MDICASCADE"),
182 (0x0228, "WM_MDIICONARRANGE"),
183 (0x0229, "WM_MDIGETACTIVE"),
184 (0x0230, "WM_MDISETMENU"),
185 (0x0231, "WM_ENTERSIZEMOVE"),
186 (0x0232, "WM_EXITSIZEMOVE"),
187 (0x0233, "WM_DROPFILES"),
188 (0x0234, "WM_MDIREFRESHMENU"),
189 (0x0238, "WM_POINTERDEVICECHANGE"),
190 (0x0239, "WM_POINTERDEVICEINRANGE"),
191 (0x023a, "WM_POINTERDEVICEOUTOFRANGE"),
192 (0x0240, "WM_TOUCH"),
193 (0x0241, "WM_NCPOINTERUPDATE"),
194 (0x0242, "WM_NCPOINTERDOWN"),
195 (0x0243, "WM_NCPOINTERUP"),
196 (0x0245, "WM_POINTERUPDATE"),
197 (0x0246, "WM_POINTERDOWN"),
198 (0x0247, "WM_POINTERUP"),
199 (0x0249, "WM_POINTERENTER"),
200 (0x024a, "WM_POINTERLEAVE"),
201 (0x024b, "WM_POINTERACTIVATE"),
202 (0x024c, "WM_POINTERCAPTURECHANGED"),
203 (0x024d, "WM_TOUCHHITTESTING"),
204 (0x024e, "WM_POINTERWHEEL"),
205 (0x024f, "WM_POINTERHWHEEL"),
206 (0x0281, "WM_IME_SETCONTEXT"),
207 (0x0282, "WM_IME_NOTIFY"),
208 (0x0283, "WM_IME_CONTROL"),
209 (0x0284, "WM_IME_COMPOSITIONFULL"),
210 (0x0285, "WM_IME_SELECT"),
211 (0x0286, "WM_IME_CHAR"),
212 (0x0288, "WM_IME_REQUEST"),
213 (0x0290, "WM_IME_KEYDOWN"),
214 (0x0291, "WM_IME_KEYUP"),
215 (0x02a0, "WM_NCMOUSEHOVER"),
216 (0x02a1, "WM_MOUSEHOVER"),
217 (0x02a2, "WM_NCMOUSELEAVE"),
218 (0x02a3, "WM_MOUSELEAVE"),
219 (0x02b1, "WM_WTSSESSION_CHANGE"),
220 (0x02c0, "WM_TABLET_FIRST"),
221 (0x02df, "WM_TABLET_LAST"),
222 (0x02e0, "WM_DPICHANGED"),
223 (0x0300, "WM_CUT"),
224 (0x0301, "WM_COPY"),
225 (0x0302, "WM_PASTE"),
226 (0x0303, "WM_CLEAR"),
227 (0x0304, "WM_UNDO"),
228 (0x0305, "WM_RENDERFORMAT"),
229 (0x0306, "WM_RENDERALLFORMATS"),
230 (0x0307, "WM_DESTROYCLIPBOARD"),
231 (0x0308, "WM_DRAWCLIPBOARD"),
232 (0x0309, "WM_PAINTCLIPBOARD"),
233 (0x030a, "WM_VSCROLLCLIPBOARD"),
234 (0x030b, "WM_SIZECLIPBOARD"),
235 (0x030c, "WM_ASKCBFORMATNAME"),
236 (0x030d, "WM_CHANGECBCHAIN"),
237 (0x030e, "WM_HSCROLLCLIPBOARD"),
238 (0x030f, "WM_QUERYNEWPALETTE"),
239 (0x0310, "WM_PALETTEISCHANGING"),
240 (0x0311, "WM_PALETTECHANGED"),
241 (0x0312, "WM_HOTKEY"),
242 (0x0317, "WM_PRINT"),
243 (0x0318, "WM_PRINTCLIENT"),
244 (0x0319, "WM_APPCOMMAND"),
245 (0x031a, "WM_THEMECHANGED"),
246 (0x031d, "WM_CLIPBOARDUPDATE"),
247 (0x031e, "WM_DWMCOMPOSITIONCHANGED"),
248 (0x031f, "WM_DWMNCRENDERINGCHANGED"),
249 (0x0320, "WM_DWMCOLORIZATIONCOLORCHANGED"),
250 (0x0321, "WM_DWMWINDOWMAXIMIZEDCHANGE"),
251 (0x0323, "WM_DWMSENDICONICTHUMBNAIL"),
252 (0x0326, "WM_DWMSENDICONICLIVEPREVIEWBITMAP"),
253 (0x033f, "WM_GETTITLEBARINFOEX"),
254 (0x0358, "WM_HANDHELDFIRST"),
255 (0x035f, "WM_HANDHELDLAST"),
256 (0x0360, "WM_AFXFIRST"),
257 (0x037f, "WM_AFXLAST"),
258 (0x0380, "WM_PENWINFIRST"),
259 (0x038f, "WM_PENWINLAST"),
260 (0x0400, "WM_USER"),
261 (0x8000, "WM_APP"),
262];