软件中弹出模态对话框后的快捷键的处理方式

By admin at 2021-09-10 • 0人收藏 • 194人看过

情景:

软件中有快捷键, 某种情况下弹出了模态对话框 , 但是此时仍然需要快捷键有效.

问题是: 模态对话框会拦截窗体的消息流通 , 此时快捷键会无效.如果用key.hook是可以拦截全局按键, 但是会影响到其他软件或文件的按键操作.


解决办法:

这里仍然可以使用key.hook来设置快捷键 , hook里判断前置窗口是主窗体还是弹窗(判断弹窗的父窗口仍然是主窗体), 然后操作.


GIF.gif

import win.ui;
/*DSG{{*/
mainForm = win.form(text="模态对话框快捷键测试";right=397;bottom=318)
mainForm.add(
button={cls="button";text="弹出模态对话框";left=12;top=222;right=387;bottom=307;db=1;dl=1;dr=1;z=1};
edit={cls="edit";left=12;top=11;right=387;bottom=206;db=1;dl=1;dr=1;dt=1;edge=1;multiline=1;vscroll=1;z=2}
)
/*}}*/

var index = 1;

import key.hook;
mainForm.hook = key.hook(); 
mainForm.hook.proc = function(msg,vkcode,scancode,injected,flags,timeStamp,extraInfo){ 
    if( injected ) return; //模拟鼠标不处理
    if( win.getForeground() != mainForm.hwnd and  mainForm.hwnd != win.getParentOwner(win.getForeground())) return ; 
   	select(msg) {
        case 0x100/*_WM_KEYDOWN*/ ,0x104/*_WM_SYSKEYDOWN*/ {
            select(vkcode) 
            {
            	case 0x26/*_VK_UP*/ 
   	            {
       	            mainForm.edit.appendText(index++'顶顶顶顶顶_VK_UP'++'\r\n');
       	            index++;
   					return true;
                }
				case 0x25/*_VK_LEFT*/
   	            {
       	            mainForm.edit.appendText(index++'踩踩踩踩踩_VK_LEFT'++'\r\n');
       	            index++;
   					return true;
                }
			}
		}
	}
}


mainForm.button.oncommand = function(id,event){
	mainForm.msgboxTest("测试快捷键");
}

mainForm.show();
return win.loopMessage();


登录后方可回帖

登 录
信息栏
本站永久域名:HtmLayout.Cn
纯私人站,当笔记本用的,学到哪写到哪,目前在学aardio+halcon机器视觉.
AARDIO语言QQ群:70517368
Aardio 官方站:Aardio官方
Aardio最新功能:Aardio官方更新日志
C大Aardio论坛:Aar爱好者论坛
本 站 主 站:Stm32cube中文网
Sciter中文在线文档Sciter在线学习文档
赞助商:才仁机械




Loading...