e1337e4016
docs/Kompas3D_SDK/ становится каноническим источником справки КОМПАС SDK и включается в репозиторий (2491 файл, ~14 МБ). HTML-зеркало docs/KOMPAS_SDK_ru-RU/ (~1.4 ГБ, © АСКОН) и генератор tools/build_kompas3d_sdk.py больше не нужны — регенерация не предполагается. - .gitignore: MD-база разблокирована; зеркало остаётся проигнорированным (safety-net на случай повторной локальной выгрузки). - CLAUDE.md / SKILL.md: убраны упоминания регенерации и зеркала. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
174 lines
20 KiB
Markdown
174 lines
20 KiB
Markdown
---
|
|
title: "WM_KEYDOWN"
|
|
type: guide
|
|
api: [api7]
|
|
tags: [guide, api7, wm]
|
|
sources:
|
|
- wm_keydown.html
|
|
---
|
|
|
|
|
|
## WM_KEYDOWN
|
|
|
|
Событие WM_KEYDOWN посылается в окно с клавиатурным фокусом, если была нажата несистемная клавиша.
|
|
Синтаксис:
|
|
```
|
|
WM_KEYDOWN nVirtKey = (int) wParam; KeyData = lParam;
|
|
```
|
|
Параметры:
|
|
| wParam | - код виртуальной клавиши, |
|
|
| --- | --- |
|
|
| lParamLo | - количество повторений кода клавиши за время удержания ее в нажатом состоянии, |
|
|
| LParamHi | биты 0-7: scan-код клавиши, зависящий от OEM; бит 8: 1, если клавиша относится к расширенным, бит 13: 1, если при нажатии клавиши была нажата <Alt>, бит 14: 1, если клавиша была нажата до возникновения события, бит 15: 1, если после события клавиша отпущена, 0, если после события клавиша остается нажатой. |
|
|
Возвращаемое значение:
|
|
Не используется.
|
|
Умолчательное действие:
|
|
Если нажата клавиша <F10>, функция DEFWINDOWPROC устанавливает внутренний флаг. Когда DEFWINDOWPROC принимает событие WM_KEYUP, она проверяет, установлен ли внутренний флаг, и если это так, посылает событие WM_SYSCOMMAND в окно верхнего уровня. Значение параметра wParam становится равным SC_KEYMENU.
|
|
Примечание:
|
|
1. Приложение должно вернуть 0, если оно обрабатывает это событие.
|
|
2. Для этого события биты 13 и 15 в lParamHi будут нулевыми.
|
|
3. Если ни одно из окон не имеет клавиатурного фокуса, то вместо событий WM_KEYDOWN, WM_CHAR и WM_KEYUP посылаются события WM_SYSKEYDOWN, WM_SYSCHAR и WM_SYSKEYUP.
|
|
4. Благодаря автоматическому повторению кода клавиши при удержанию ее нажатой, до появления события WM_KEYUP может выдаваться несколько событий WM_KEYDOWN. Значение разряда 30 параметра flags позволяет определить, было ли событие WM_KEYDOWN первым или или является повторным во время удержания клавиши нажатой.
|
|
5. Для расширенных 101 и 102 клавишных клавиатур расширенными клавишами являются следующие:
|
|
•правый <ALT> and <CTRL> на основной клавиатуре,
|
|
•<INS>, <DEL>, <HOME>, <END>, <PAGE UP>, <PAGE DOWN> и клавиши со cтрелками в группах слева от дополнительной цифровой клавиатуры,
|
|
•</> и <ENTER> на дополнительной цифровой клавиатуре.
|
|
Другие клавиатуры могут поддерживать бит расширенной клавиатуры при помощи параметра lParam.
|
|
См. также:
|
|
WM_DEADCHAR, WM_SYSCHAR и WM_SYSDEADCHAR.
|
|
|
|
|
|
## WM_KEYUP
|
|
|
|
Событие WM_KEYDOWN посылается в окно с клавиатурным фокусом, если была отпущена несистемная клавиша.
|
|
Синтаксис:
|
|
```
|
|
WM_KEYUP nVirtKey = (int) wParam; lKeyData = lParam;
|
|
```
|
|
Параметры:
|
|
| wParam | - код виртуальной клавиши, |
|
|
| --- | --- |
|
|
| lParamLo | - количество повторений кода клавиши за время удержания ее в нажатом состоянии, |
|
|
| LParamHi | биты 0-7: scan-код клавиши, зависящий от OEM; бит 8: 1, если клавиша относится к расширенным, бит 13: 1, если при нажатии клавиши была нажата <Alt>, бит 14: 1, если клавиша была нажата до возникновения события, бит 15: 1, если после события клавиша отпущена, 0, если после события клавиша остается нажатой. |
|
|
Возвращаемое значение:
|
|
Не используется.
|
|
Умолчательное действие:
|
|
Функция DEFWINDOWPROC посылает событие WM_SYSCOMMAND в окно верхнего уровня, если <F10> или <ALT> была отпущена. Значение параметра wParam становится равным SC_KEYMENU.
|
|
Примечание:
|
|
1. Приложение должно вернуть 0, если оно обрабатывает это событие.
|
|
2. Для этого события биты 13 и 15 в lParamHi будут нулевыми.
|
|
3. Если ни одно из окон не имеет клавиатурного фокуса, то вместо события WM_KEYUP посылается событие WM_SYSKEYUP.
|
|
4. Благодаря автоматическому повторению кода клавиши при удержанию ее нажатой, до появления события WM_KEYUP может выдаваться несколько событий WM_KEYDOWN. Значение разряда 30 параметра flags позволяет определить, было ли событие WM_KEYDOWN первым или или является повторным во время удержания клавиши нажатой.
|
|
5. Для расширенных 101 и 102 клавишных клавиатур расширенными клавишами являются следующие:
|
|
•правый <ALT> and <CTRL> на основной клавиатуре,
|
|
•<INS>, <DEL>, <HOME>, <END>, <PAGE UP>, <PAGE DOWN> и клавиши со cтрелками в группах слева от дополнительной цифровой клавиатуры,
|
|
•</> и <ENTER> на дополнительной цифровой клавиатуре.
|
|
Другие клавиатуры могут поддерживать бит расширенной клавиатуры при помощи параметра lParam.
|
|
|
|
|
|
## WM_SYSCHAR
|
|
|
|
Это событие посылается в окно с клавиатурным фокусом, когда событие WM_SYSKEYDOWN обрабатывается функцией TRANSLATEMESSAGE. Оно позволяет получить код символа нажатой системной клавиши, то есть клавиши, которая была нажата при нажатой <ALT>.
|
|
Синтаксис::
|
|
WM_SYSCHAR chCharCode = (TCHAR) wParam;KeyData = lParam;
|
|
Параметры:
|
|
| wParam | - код клавиши вызова меню окна, |
|
|
| --- | --- |
|
|
| lParamLo | - количество повторений кода клавиши за время удержания ее в нажатом состоянии, |
|
|
| IParamHi | биты 0-7: scan-код клавиши, зависящий от OEM; бит 8: 1, если клавиша относится к расширенным, бит 13: 1, если при нажатии клавиши была нажата <Alt>, бит 14: 1, если клавиша была нажата до возникновения события, бит 15: 1, если после события клавиша отпущена, 0, если после события клавиша остается нажатой. |
|
|
Возвращаемое значение:
|
|
Не используется.
|
|
Умолчательное действие:
|
|
Функция DEFWINDOWPROC посылает событие WM_SYSCOMMAND в окно верхнего уровня если <F10> или <Alt> была отпущена. Значение параметра wParam становится равным SC_KEYMENU.
|
|
Примечание:
|
|
1. Приложение должно вернуть 0, если оно обрабатывает это событие.
|
|
2. Для этого события бит 15 в lParamHi будет нулевым.
|
|
3. Если бит 13 IParamHi (context code) параметра flags =0, это событие может проследовать для обработки функцией TRANSLATEACCELERATOR, которая обработает его как событие нажатия стандартной клавиши, вместо системной. Это позволяет использовать горячие клавиши в активном окне, даже если это окно не имеет клавиатурного фокуса.
|
|
4. Благодаря автоматическому повторению кода клавиши при удержанию ее нажатой, до появления события WM_KEYUP может выдаваться несколько событий WM_KEYDOWN. Значение разряда 30 параметра flags позволяет определить, было ли событие WM_KEYDOWN первым или или является повторным во время удержания клавиши нажатой.
|
|
5. Для расширенных 101 и 102 клавишных клавиатур расширенными клавишами являются следующие:
|
|
•правый <ALT> и <CTRL> на основной клавиатуре,
|
|
•<INS>, <DEL>, <HOME>, <END>, <PAGE UP>, <PAGE DOWN> и клавиши со cтрелками в группах слева от дополнительной цифровой клавиатуры,
|
|
•</> и <ENTER> на дополнительной цифровой клавиатуре.
|
|
Другие клавиатуры могут поддерживать бит расширенной клавиатуры при помощи параметра lParam.
|
|
6. Это событие также генерируется, если нажимается <F10> без нажатой <Alt>.
|
|
7. Событие генерируется вместо WM_KEYUP, если нет окна с клавиатурным фокусом.
|
|
См. также:
|
|
WM_DEADCHAR, WM_CHAR и WM_SYSDEADCHAR.
|
|
|
|
|
|
## WM_SYSDEADCHAR
|
|
|
|
Это событие посылается в окно с клавиатурным фокусом, когда событие WM_SYSKEYDOWN обрабатывается функцией TRANSLATEMESSAGE. Оно позволяет получить код символа нажатой пассивной системной клавиши, то есть пассивной клавиши, которая была нажата при нажатой <ALT>.
|
|
Синтаксис:
|
|
```
|
|
WM_SYSDEADCHAR chCharCode = (TCHAR) wParam; lKeyData = lParam;
|
|
```
|
|
Параметры:
|
|
| wParam | - код клавиши, |
|
|
| --- | --- |
|
|
| lParamLo | - количество повторений кода клавиши за время удержания ее в нажатом состоянии, |
|
|
| IParamHi | биты 0-7: scan-код клавиши, зависящий от OEM; бит 8: 1, если клавиша относится к расширенным, бит 13: 1, если при нажатии клавиши была нажата <Alt>, бит 14: 1, если клавиша была нажата до возникновения события, бит 15: 1, если после события клавиша отпущена, 0, если после события клавиша остается нажатой. |
|
|
Возвращаемое значение:
|
|
Не используется.
|
|
Примечание:
|
|
1. К пассивным клавишам относятся, например, умляуты и ударения.
|
|
2. Событие может использоваться для получения обратной связи для клавиш, нажатие которых необязательно формирует символ как таковой.
|
|
См. также:
|
|
WM_DEADCHAR, WM_CHAR и WM_SYSDEADCHAR.
|
|
|
|
|
|
## WM_SYSKEYDOWN
|
|
|
|
Это событие посылается в окно с клавиатурным фокусом, когда клавиша нажимается при одновременно нажатой <Alt>. Также оно посылается, когда ни одно из окон не имеет клавиатурного фокуса; в этом случае WM_SYSKEYDOWN посылается в активное окно. Окно, которое принимает событие, может различить эти варианты проверкой разряда 29 (context code) параметра lKeyData.
|
|
Синтаксис:
|
|
```
|
|
WM_SYSKEYDOWN nVirtKey = (int) wParam; KeyData = lParam;
|
|
```
|
|
Параметры:
|
|
| wParam | - код виртуальной клавиши, |
|
|
| --- | --- |
|
|
| lParamLo | - количество повторений кода клавиши за время удержания ее в нажатом состоянии, |
|
|
| IParamHi | биты 0-7: scan-код клавиши, зависящий от OEM; бит 8: 1, если клавиша относится к расширенным, бит 13: 1, если при нажатии клавиши была нажата <Alt>, бит 14: 1, если клавиша была нажата до возникновения события, бит 15: 1, если после события клавиша отпущена, 0, если после события клавиша остается нажатой. |
|
|
Возвращаемое значение:
|
|
Не используется.
|
|
Умолчательное действие:
|
|
Функция DEFWINDOWPROC посылает событие WM_SYSCOMMAND в окно верхнего уровня, если F10 или <Alt> была отпущена. Значение параметра wParam становится равным SC_KEYMENU.
|
|
Примечание:
|
|
1. Приложение должно вернуть 0, если оно обрабатывает это событие.
|
|
2. Для этого события бит 15 в lParamHi будет нулевым.
|
|
3. Если бит 13 IParamHi (context code) параметра flags =0, это событие может проследовать для обработки функцией TRANSLATEACCELERATOR, которая обработает его как событие нажатия стандартной клавиши, вместо системной. Это позволяет использовать горячие клавиши в активном окне, даже если это окно не имеет клавиатурного фокуса.
|
|
4. Благодаря автоматическому повторению кода клавиши при удержанию ее нажатой, до появления события WM_KEYUP может выдаваться несколько событий WM_KEYDOWN. Значение разряда 30 параметра flags позволяет определить, было ли событие WM_KEYDOWN первым или или является повторным во время удержания клавиши нажатой.
|
|
5. Для расширенных 101 и 102 клавишных клавиатур расширенными клавишами являются следующие:
|
|
•правый <ALT> и <CTRL> на основной клавиатуре,
|
|
•<INS>, <DEL>, <HOME>, <END>, <PAGE UP>, <PAGE DOWN> и клавиши со cтрелками в группах слева от дополнительной цифровой клавиатуры,
|
|
•</> и <ENTER> на дополнительной цифровой клавиатуре.
|
|
Другие клавиатуры могут поддерживать бит расширенной клавиатуры при помощи параметра lParam.
|
|
6. Это событие также генерируется, если нажимается <F10> без нажатой <Alt>.
|
|
|
|
|
|
## WM_SYSKEYUP
|
|
|
|
Это событие посылается в окно с клавиатурным фокусом, когда отпускается клавиша, которая была нажата при одновременно нажатой <Alt>. Также оно посылается, когда ни одно из окон не имеет клавиатурного фокуса; в этом случае WM_SYSKEYDOWN посылается в активное окно. Окно, которое принимает событие, может различить эти варианты проверкой разряда 29 (context code) параметра lKeyData.
|
|
Синтаксис::
|
|
WM_SYSKEYUP nVirtKey = (int) wParam; lKeyData = lParam;
|
|
Параметры:
|
|
| wParam | - код виртуальной клавиши, |
|
|
| --- | --- |
|
|
| lParamLo | - количество повторений кода клавиши за время удержания ее в нажатом состоянии, |
|
|
| IParamHi | биты 0-7: scan-код клавиши, зависящий от OEM; бит 8: 1, если клавиша относится к расширенным, бит 13: 1, если при нажатии клавиши была нажата <Alt>, бит 14: 1, если клавиша была нажата до возникновения события, бит 15: 1, если после события клавиша отпущена, 0, если после события клавиша остается нажатой. |
|
|
Возвращаемое значение:
|
|
Не используется.
|
|
Умолчательное действие:
|
|
Функция DEFWINDOWPROC посылает событие WM_SYSCOMMAND в окно верхнего уровня, если <F10>или <Alt> была отпущена. Значение параметра wParam становится равным SC_KEYMENU.
|
|
Примечание:
|
|
1. Приложение должно вернуть 0, если оно обрабатывает это событие.
|
|
2. Для этого события бит 15 в lParamHi будет нулевым.
|
|
3. Если бит 13 IParamHi (context code) параметра flags =0, это событие может проследовать для обработки функцией TranslateAccelerator, которая обработает его как событие нажатия стандартной клавиши, вместо системной. Это позволяет использовать горячие клавиши в активном окне, даже если это окно не имеет клавиатурного фокуса.
|
|
4. Благодаря автоматическому повторению кода клавиши при удержанию ее нажатой, до появления события WM_KEYUP может выдаваться несколько событий WM_KEYDOWN. Значение разряда 30 параметра flags позволяет определить, было ли событие WM_KEYDOWN первым или или является повторным во время удержания клавиши нажатой.
|
|
5. Для расширенных 101 и 102 клавишных клавиатур расширенными клавишами являются следующие:
|
|
•правый <ALT> и <CTRL> на основной клавиатуре,
|
|
•<INS>, <DEL>, <HOME>, <END>, <PAGE UP>, <PAGE DOWN> и клавиши со cтрелками в группах слева от дополнительной цифровой клавиатуры,
|
|
•</> и <ENTER> на дополнительной цифровой клавиатуре.
|
|
Другие клавиатуры могут поддерживать бит расширенной клавиатуры при помощи параметра lParam.
|
|
6. Это событие также генерируется, если нажимается <F10> без нажатой <Alt>.
|