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*/`,即==按键消息==。
|
|||
|
# 非按键输入
|
|||
|
通过鼠标等的输入无法通过按键捕获,需要额外处理
|