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

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

情景:

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

问题是: 模态对话框会拦截窗体的消息流通 , 此时快捷键会无效.如果用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();


登录后方可回帖

登 录
信息栏
 私人小站

本站域名

ChengXu.XYZ

投诉联系:  popdes@126.com



快速上位机开发学习,本站主要记录了学习过程中遇到的问题和解决办法及上位机代码分享

这里主要专注于学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.
如果侵权,联系 Popdes@126.com

友情链接
Aardio官方
Aardio资源网


才仁机械


网站地图SiteMap

Loading...