32 lines
1.2 KiB
Markdown
32 lines
1.2 KiB
Markdown
---
|
||
title: 响应按键输入
|
||
updated: 2022-01-20 03:20:40Z
|
||
created: 2022-01-20 02:51:56Z
|
||
---
|
||
|
||
`ctrl.wndproc = function(hwnd,message,wParam,lParam){}`
|
||
处理控件的消息回调
|
||
# 输入法的影响
|
||
中文输入法会影响条件判断,在不需要的场合要进行屏蔽,可以通过`key.capsLk()`屏蔽,
|
||
或`key.ime.setOpenStatus(0)//避免输入法干扰`,
|
||
==最优解可能是==`ctrl.disableInputMethod()`,基于edit控件的都支持:
|
||
```js
|
||
disableInputMethod = function(){
|
||
::Imm32 := ..raw.loadDll("Imm32.dll");
|
||
var imc = ::Imm32.ImmGetContext(owner.hwnd);
|
||
if (imc) {
|
||
::Imm32.ImmAssociateContext(owner.hwnd,null);
|
||
::Imm32.ImmReleaseContext(owner.hwnd,imc);
|
||
}
|
||
};
|
||
```
|
||
以上方法可配合`message == 0x102/*_WM_CHAR*/`对输入字符进行过滤
|
||
|
||
[编辑框数据有效性判断](编辑框数据有效性判断.md) 中编辑框激活后屏蔽中文等非eng输入法以避免非法字符的输入
|
||
# 字符类
|
||
`message == 0x102/*_WM_CHAR*/`只能过滤==CHAR==,对控制类、功能类按键无效,
|
||
|
||
# 非字符类
|
||
此类按键的过滤需要使用`message == 0x101/*_WM_KEYUP*/`,即==按键消息==。
|
||
# 非按键输入
|
||
通过鼠标等的输入无法通过按键捕获,需要额外处理 |