SimpleWindow
载入中...
搜索中...
未找到
RoutedEventArgs.h
1#pragma once
2
3#include "Keys.h"
4#include "Point.h"
5#include "RoutedEvent.h"
6#include "ScrollEnums.h"
7#include "Size.h"
8#include <type_traits>
9
10namespace sw
11{
12 // clang-format off
13
19 template <RoutedEventType Type, typename TBase = RoutedEventArgs>
20 struct TypedRoutedEventArgs : TBase
21 {
22 // TBase必须派生自RoutedEventArgs
23 static_assert(
24 std::is_base_of<RoutedEventArgs, TBase>::value,
25 "TBase must be derived from RoutedEventArgs.");
26
30 static constexpr RoutedEventType EventType = Type;
31
36 };
37
38 /*================================================================================*/
39
43 template <typename T, typename = void>
44 struct _HasEventType : std::false_type {
45 };
46
50 template <typename T>
51 struct _HasEventType<T, decltype(void(T::EventType))> : std::true_type {
52 };
53
57 template <typename T>
60
61 /*================================================================================*/
62
66 struct SizeChangedEventArgs : TypedRoutedEventArgs<UIElement_SizeChanged> {
67 Size newClientSize; // 用户区的新尺寸
68 SizeChangedEventArgs(Size newClientSize) : newClientSize(newClientSize) {}
69 };
70
74 struct PositionChangedEventArgs : TypedRoutedEventArgs<UIElement_PositionChanged> {
75 Point newClientPosition; // 移动后用户区左上角的位置
76 PositionChangedEventArgs(Point newClientPosition) : newClientPosition(newClientPosition) {}
77 };
78
82 struct GotCharEventArgs : TypedRoutedEventArgs<UIElement_GotChar> {
83 wchar_t ch; // 输入的字符
84 KeyFlags flags; // 附加信息
85 GotCharEventArgs(wchar_t ch, KeyFlags flags) : ch(ch), flags(flags) {}
86 };
87
92 template <RoutedEventType Type>
94 VirtualKey key; // 虚拟按键
95 KeyFlags flags; // 附加信息
96 KeyEventArgs(VirtualKey key, KeyFlags flags) : key(key), flags(flags) {}
97 };
98
102 struct KeyDownEventArgs : KeyEventArgs<UIElement_KeyDown> {
103 using KeyEventArgs<UIElement_KeyDown>::KeyEventArgs;
104 };
105
109 struct KeyUpEventArgs : KeyEventArgs<UIElement_KeyUp> {
110 using KeyEventArgs<UIElement_KeyUp>::KeyEventArgs;
111 };
112
117 template <RoutedEventType Type>
119 Point mousePosition; // 鼠标位置
120 MouseKey keyState; // 按键状态
121 MouseEventArgs(Point mousePosition, MouseKey keyState) : mousePosition(mousePosition), keyState(keyState) {}
122 };
123
127 struct MouseMoveEventArgs : MouseEventArgs<UIElement_MouseMove> {
128 using MouseEventArgs<UIElement_MouseMove>::MouseEventArgs;
129 };
130
134 struct MouseWheelEventArgs : MouseEventArgs<UIElement_MouseWheel> {
135 int wheelDelta; // 滚轮滚动的距离,为120的倍数
136 MouseWheelEventArgs(int wheelDelta, Point mousePosition, MouseKey keyState)
137 : MouseEventArgs<UIElement_MouseWheel>(mousePosition, keyState), wheelDelta(wheelDelta) {}
138 };
139
144 template <RoutedEventType Type>
146 MouseKey key; // 按下/抬起的按键(左键、中间、右键)
147 MouseButtonEventArgs(MouseKey key, Point mousePosition, MouseKey keyState)
148 : MouseEventArgs<Type>(mousePosition, keyState), key(key) {}
149 };
150
154 struct MouseButtonDownEventArgs : MouseButtonEventArgs<UIElement_MouseButtonDown> {
155 using MouseButtonEventArgs<UIElement_MouseButtonDown>::MouseButtonEventArgs;
156 };
157
161 struct MouseButtonUpEventArgs : MouseButtonEventArgs<UIElement_MouseButtonUp> {
162 using MouseButtonEventArgs<UIElement_MouseButtonUp>::MouseButtonEventArgs;
163 };
164
169 bool cancel = false; // 是否取消事件,默认为false
170 };
171
175 struct ShowContextMenuEventArgs : TypedRoutedEventArgs<UIElement_ShowContextMenu, CancelableEventArgs> {
176 bool isKeyboardMsg; // 消息是否由按下快捷键(Shift+F10、VK_APPS)产生
177 Point mousePosition; // 鼠标在屏幕中的位置
178 ShowContextMenuEventArgs(bool isKeyboardMsg, Point mousePosition)
179 : isKeyboardMsg(isKeyboardMsg), mousePosition(mousePosition) {}
180 };
181
185 struct DropFilesEventArgs : TypedRoutedEventArgs<UIElement_DropFiles> {
186 HDROP hDrop; // 描述拖入文件的句柄
187 DropFilesEventArgs(HDROP hDrop) : hDrop(hDrop) {}
188 };
189
193 struct WindowClosingEventArgs : TypedRoutedEventArgs<Window_Closing, CancelableEventArgs> {
194 };
195
199 struct ScrollingEventArgs : TypedRoutedEventArgs<Layer_Scrolling, CancelableEventArgs> {
200 ScrollOrientation scrollbar; // 滚动条类型
201 ScrollEvent event; // 滚动条事件
202 double pos; // 当event为ThumbPosition或ThubmTrack时表示当前滚动条位置,其他情况固定为0
203 ScrollingEventArgs(ScrollOrientation scrollbar, ScrollEvent event, double pos)
204 : scrollbar(scrollbar), event(event), pos(pos) {}
205 };
206
212 template <RoutedEventType Type, typename TBase = RoutedEventArgs>
214 int index; // 发生事件的项的索引
215 ListViewItemEventArgs(int index) : index(index) {}
216 };
217
223 template <RoutedEventType Type, typename TBase = RoutedEventArgs>
225 int subIndex; // 发生事件的子项的索引
226 ListViewSubItemEventArgs(int index, int subIndex)
227 : ListViewItemEventArgs<Type, TBase>(index), subIndex(subIndex) {}
228 };
229
233 struct ListViewCheckStateChangedEventArgs : ListViewItemEventArgs<ListView_CheckStateChanged> {
234 using ListViewItemEventArgs<ListView_CheckStateChanged>::ListViewItemEventArgs;
235 };
236
240 struct ListViewHeaderClickedEventArgs : ListViewItemEventArgs<ListView_HeaderClicked> {
241 using ListViewItemEventArgs<ListView_HeaderClicked>::ListViewItemEventArgs;
242 };
243
247 struct ListViewHeaderDoubleClickedEventArgs : ListViewItemEventArgs<ListView_HeaderDoubleClicked> {
248 using ListViewItemEventArgs<ListView_HeaderDoubleClicked>::ListViewItemEventArgs;
249 };
250
255 using ListViewSubItemEventArgs<ListView_ItemClicked>::ListViewSubItemEventArgs;
256 };
257
262 using ListViewSubItemEventArgs<ListView_ItemDoubleClicked>::ListViewSubItemEventArgs;
263 };
264
268 struct ListViewEndEditEventArgs : ListViewItemEventArgs<ListView_EndEdit, CancelableEventArgs> {
269 wchar_t *newText; // 新的文本
270 ListViewEndEditEventArgs(int index, wchar_t *newText)
272 };
273
278 template <RoutedEventType Type>
280 SYSTEMTIME time; // 时间的新值
281 TimeChangedEventArgs(const SYSTEMTIME &time) : time(time) {}
282 };
283
287 struct DateTimePickerTimeChangedEventArgs : TimeChangedEventArgs<DateTimePicker_TimeChanged> {
288 using TimeChangedEventArgs<DateTimePicker_TimeChanged>::TimeChangedEventArgs;
289 };
290
294 struct MonthCalendarTimeChangedEventArgs : TimeChangedEventArgs<MonthCalendar_TimeChanged> {
295 using TimeChangedEventArgs<MonthCalendar_TimeChanged>::TimeChangedEventArgs;
296 };
297
302 wchar_t *id; // 被单击链接的id
303 wchar_t *url; // 被单击链接的url(即href)
304 SysLinkClickedEventArgs(wchar_t *id, wchar_t *url) : id(id), url(url) {}
305 };
306
310 struct HotKeyValueChangedEventArgs : TypedRoutedEventArgs<HotKeyControl_ValueChanged> {
311 VirtualKey key; // 按键
312 HotKeyModifier modifier; // 辅助按键
313 HotKeyValueChangedEventArgs(VirtualKey key, HotKeyModifier modifier) : key(key), modifier(modifier) {}
314 };
315
319 struct SplitButtonDropDownEventArgs : TypedRoutedEventArgs<SplitButton_DropDown, CancelableEventArgs> {
320 };
321
322 // clang-format on
323}
值转换器接口
Definition IValueConverter.h:14
SimpleWindow框架的顶级命名空间,所有公共类型、控件、枚举和工具函数均定义于此。
Definition Alignment.h:4
MouseKey
鼠标事件时用于判断按键状态
Definition Keys.h:291
ScrollOrientation
滚动条方向
Definition ScrollEnums.h:10
VirtualKey
虚拟按键
Definition Keys.h:65
HotKeyModifier
表示热键框控件中的辅助按键,可以是一个或多个按键
Definition Keys.h:309
ScrollEvent
滚动条事件
Definition ScrollEnums.h:18
RoutedEventType
路由事件类型枚举
Definition RoutedEvent.h:12
@ UIElement_KeyUp
键盘按键抬起,参数类型为sw::KeyUpEventArgs
Definition RoutedEvent.h:44
@ UIElement_KeyDown
键盘按键按下,参数类型为sw::KeyDownEventArgs
Definition RoutedEvent.h:41
@ UIElement_MouseButtonUp
鼠标按键抬起,参数类型为sw::MouseButtonUpEventArgs
Definition RoutedEvent.h:59
@ DateTimePicker_TimeChanged
DateTimePicker控件的时间改变,参数类型为sw::DateTimePickerTimeChangedEventArgs
Definition RoutedEvent.h:122
@ ListView_ItemDoubleClicked
鼠标左键单击列表视图某个项,参数类型为sw::ListViewItemDoubleClickedEventArgs
Definition RoutedEvent.h:104
@ MonthCalendar_TimeChanged
月历控件的时间改变,参数类型为sw::MonthCalendarTimeChangedEventArgs
Definition RoutedEvent.h:125
@ UIElement_MouseButtonDown
鼠标按键按下,参数类型为sw::MouseButtonDownEventArgs
Definition RoutedEvent.h:56
@ ListView_HeaderClicked
鼠标左键单击列表视图的列标题,参数类型为sw::ListViewHeaderClickedEventArgs
Definition RoutedEvent.h:95
@ ListView_ItemClicked
鼠标左键单击列表视图某个项,参数类型为sw::ListViewItemClickedEventArgs
Definition RoutedEvent.h:101
@ ListView_CheckStateChanged
列表视图某个复选框的选中状态改变,参数类型为sw::ListViewCheckStateChangedEventArgs
Definition RoutedEvent.h:92
@ ListView_HeaderDoubleClicked
鼠标左键双击列表视图的列标题,参数类型为sw::ListViewHeaderDoubleClickedEventArgs
Definition RoutedEvent.h:98
@ UIElement_MouseMove
鼠标移动,参数类型为sw::MouseMoveEventArgs
Definition RoutedEvent.h:47
可取消事件参数类型,包含一个cancel字段用于指示是否取消事件
Definition RoutedEventArgs.h:168
DateTimePicker控件时间改变事件参数类型
Definition RoutedEventArgs.h:287
文件拖放事件参数类型
Definition RoutedEventArgs.h:185
输入字符事件类型参数
Definition RoutedEventArgs.h:82
热键框值改变事件参数类型
Definition RoutedEventArgs.h:310
键盘按键按下事件参数类型
Definition RoutedEventArgs.h:102
键盘事件参数类型模板
Definition RoutedEventArgs.h:93
https://learn.microsoft.com/en-us/windows/win32/inputdev/about-keyboard-input#keystroke-message-flags
Definition Keys.h:12
键盘按键抬起事件参数类型
Definition RoutedEventArgs.h:109
列表视图某个复选框选中状态改变的事件参数类型
Definition RoutedEventArgs.h:233
列表视图编辑状态结束事件参数类型
Definition RoutedEventArgs.h:268
列表视图的列标题单击事件参数类型
Definition RoutedEventArgs.h:240
列表视图的列标题双击事件参数类型
Definition RoutedEventArgs.h:247
列表视图项单击事件参数类型
Definition RoutedEventArgs.h:254
列表视图项双击事件参数类型
Definition RoutedEventArgs.h:261
列表视图某个项事件参数类型模板,适用于单击、双击等事件
Definition RoutedEventArgs.h:213
列表视图某个子项事件参数类型模板,适用于单击、双击等事件
Definition RoutedEventArgs.h:224
月历控件时间改变事件参数类型
Definition RoutedEventArgs.h:294
鼠标按键按下事件参数类型
Definition RoutedEventArgs.h:154
鼠标按键事件参数类型模板
Definition RoutedEventArgs.h:145
鼠标按键抬起事件参数类型
Definition RoutedEventArgs.h:161
鼠标事件参数类型模板
Definition RoutedEventArgs.h:118
鼠标移动事件参数类型
Definition RoutedEventArgs.h:127
鼠标滚轮滚动事件参数类型
Definition RoutedEventArgs.h:134
表示相对于左上角的点坐标
Definition Point.h:15
位置改变事件参数类型
Definition RoutedEventArgs.h:74
路由事件的参数
Definition RoutedEvent.h:154
RoutedEventType eventType
事件类型
Definition RoutedEvent.h:158
窗口/面板滚动条滚动事件参数类型
Definition RoutedEventArgs.h:199
显示用户自定义上下文菜单的事件参数类型
Definition RoutedEventArgs.h:175
尺寸改变事件参数类型
Definition RoutedEventArgs.h:66
尺寸
Definition Size.h:15
分割按钮的下拉箭头单击事件参数类型
Definition RoutedEventArgs.h:319
SysLink控件链接被单击事件参数类型
Definition RoutedEventArgs.h:301
时间改变事件参数类型模板,适用于DateTimePicker和MonthCalendar控件
Definition RoutedEventArgs.h:279
表示特定类型路由事件的事件参数类型,继承自该类的类型可以直接作为AddHandler函数的模板参数
Definition RoutedEventArgs.h:21
TypedRoutedEventArgs()
构造函数,初始化事件类型为EventType
Definition RoutedEventArgs.h:35
static constexpr RoutedEventType EventType
路由事件的类型,AddHandler模板函数使用此字段注册事件
Definition RoutedEventArgs.h:30
窗口正在关闭事件参数类型
Definition RoutedEventArgs.h:193
结构体模板,用于检测类型T是否含有名为EventType的静态字段
Definition RoutedEventArgs.h:44
结构体模板,用于检测类型T是否包含事件类型信息
Definition RoutedEventArgs.h:58