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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
/*
* Copyright (c) 2024. The RigelA open source project team and
* its contributors reserve all rights.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software distributed under the
* License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and limitations under the License.
* Modified by igaisin 2025
*/
use ;
use ;
use UI;
use ;
pub ;
unsafe
unsafe
/**
Расширение для работы со строками.
*/
pub
//noinspection SpellCheckingInspection
/**
Обрабатывает входящие неотложные сообщения, проверяет очередь сообщений потока на наличие
опубликованных сообщений и, если они есть, извлекает их.
`msg` - структура сообщения, которая получает информацию о сообщениях из очереди потока.
`h_wnd` - дескриптор окна, сообщения которого нужно проверить. Окно должно принадлежать текущему потоку.
Если h_wnd равен NULL, PeekMessage извлекает сообщения для любого окна, принадлежащего текущему потоку,
а также любые сообщения в очереди текущего потока со значением h_wnd равным NULL (см. структуру MSG).
Таким образом, если h_wnd равен NULL, обрабатываются как оконные сообщения, так и сообщения потока.
Если h_wnd равен -1, PeekMessage проверяет только сообщения в очереди текущего потока со значением h_wnd равным NULL,
то есть сообщения потока, опубликованные через PostMessage или PostThreadMessage, когда параметр h_wnd равен NULL.
`msg_filter_min` - значение первого сообщения в диапазоне проверяемых сообщений.
Используйте WM_KEYFIRST (0x0100) для указания первого сообщения клавиатуры
или WM_MOUSEFIRST (0x0200) для указания первого сообщения мыши.
Если и msg_filter_min, и msg_filter_max равны нулю, PeekMessage возвращает все доступные сообщения
(т.е. без фильтрации по диапазону).
`msg_filter_max` - значение последнего сообщения в диапазоне проверяемых сообщений.
Используйте WM_KEYLAST для указания последнего сообщения клавиатуры,
WM_MOUSELAST для указания последнего сообщения мыши.
Если и msg_filter_min, и msg_filter_max равны нулю, PeekMessage возвращает все доступные сообщения
(т.е. без фильтрации по диапазону).
`remove_msg` - определяет, как обрабатывать сообщения. Этот параметр может принимать одно или несколько следующих значений:
- PM_NOREMOVE: после обработки сообщение не удаляется из очереди.
- PM_REMOVE: после обработки сообщение удаляется из очереди.
- PM_NOYIELD: предотвращает освобождение системой любых потоков, ожидающих перехода вызывающего потока в состояние простоя
(см. WaitForInputIdle). Комбинируйте это значение с PM_NOREMOVE или PM_REMOVE.
По умолчанию обрабатываются все типы сообщений. Чтобы указать, что следует обрабатывать только определенные сообщения,
укажите одно или несколько из следующих значений:
- PM_QS_INPUT: обрабатывать сообщения мыши и клавиатуры.
- PM_QS_PAINT: обрабатывать сообщения перерисовки.
- PM_QS_POSTMESSAGE: обрабатывать все опубликованные сообщения, включая таймеры и горячие клавиши.
- PM_QS_SENDMESSAGE: обрабатывать все отправленные сообщения.
*/
pub
/**
Обрабатывает все ожидающие сообщения текущего потока.
*/
pub
//noinspection SpellCheckingInspection
/**
Извлекает сообщения из очереди сообщений вызывающего потока. Функция обрабатывает входящие отправленные сообщения,
пока не появятся опубликованные сообщения для извлечения.
В отличие от GetMessage, функция PeekMessage не ожидает публикации сообщений перед возвратом.
`msg` - структура сообщения, которая получает информацию о сообщениях из очереди потока.
`h_wnd` - дескриптор окна, сообщения которого нужно получить. Окно должно принадлежать текущему потоку.
Если h_wnd равен NULL, GetMessage извлекает сообщения для любого окна, принадлежащего текущему потоку,
а также любые сообщения в очереди текущего потока со значением h_wnd равным NULL.
Таким образом, если h_wnd равен NULL, обрабатываются как оконные сообщения, так и сообщения потока.
Если h_wnd равен -1, GetMessage извлекает только сообщения в очереди текущего потока со значением h_wnd равным NULL,
то есть сообщения потока, опубликованные через PostMessage (когда параметр h_wnd равен NULL) или PostThreadMessage.
`msg_filter_min` - целочисленное значение минимального номера сообщения для извлечения.
Используйте WM_KEYFIRST (0x0100) для указания первого сообщения клавиатуры
или WM_MOUSEFIRST (0x0200) для указания первого сообщения мыши.
Используйте WM_INPUT здесь и в msg_filter_max, чтобы указать только сообщения WM_INPUT.
Если и msg_filter_min, и msg_filter_max равны нулю, GetMessage возвращает все доступные сообщения
(т.е. без фильтрации по диапазону).
`msg_filter_max` - целочисленное значение максимального номера сообщения для извлечения.
Используйте WM_KEYLAST для указания последнего сообщения клавиатуры,
WM_MOUSELAST для указания последнего сообщения мыши.
Используйте WM_INPUT здесь и в msg_filter_min, чтобы указать только сообщения WM_INPUT.
Если и msg_filter_min, и msg_filter_max равны нулю, GetMessage возвращает все доступные сообщения
(т.е. без фильтрации по диапазону).
*/
pub
//noinspection SpellCheckingInspection
/**
Создает цикл обработки оконных сообщений в текущем потоке до получения сообщения WM_QUIT.
`slot` - функция обратного вызова, которая уведомляет о получении сообщения,
позволяя выполнить пользовательскую обработку сообщения.
*/
/**
Находит окно верхнего уровня, имя класса и заголовок которого соответствуют указанным строкам.
Эта функция не выполняет поиск среди дочерних окон.
`class_name` - Строка, указывающая имя класса, или атом (atom), который идентифицирует строку имени класса.
Если этот параметр является атомом, он должен быть глобальным атомом, созданным ранее с помощью функции GlobalAddAtom.
Атом (16-битное значение) должен быть помещен в младший байт параметра `class_name`,
а старший байт `class_name` должен быть обнулен.
Если параметр равен NULL, будут найдены все окна, соответствующие параметру `window_name`.
`window_name` - Строка, указывающая имя окна (заголовок окна).
Если этот параметр равен NULL, соответствуют все заголовки окон.
*/