b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

vb.net 组合键_vb.net 响应多个热键_registerhotkey

电脑杂谈  发布时间:2017-03-02 08:13:53  来源:网络整理

registerhotkey_vb.net 组合键_vb.net 响应多个热键

registerhotkeyregisterhotkey

①、利用 GetKeyState 函数获得某一按键的按下、弹起状态;

//用 PreTranslateMessage 的方法,判断 Ctrl+Q 是否同时按下:

②、通过载入快捷键资源,并建立快捷键与消息映射的方法来实现:

1> 添加快捷键资源;

2> 修改快捷键资源中的组合键配置;

3> 添加响应函数声明,格式为:afx_msg void OnCtrlW();

4> 添加消息映射,格式为:ON_BN_CLICKED(ID_ACC_1, OnCtrlW) 或者 ON_BN_CLICKED(ID_ACC_1, &CMFCTestDlg::OnCtrlW)

5> 添加响应函数的实现:

void CMFCTestDlg::OnCtrlW()

{

MessageBox(_T("您按下了 Ctrl+W 键!"));

}

6> 初始化快捷键资源;//添加到初始化函数中

hAcc = LoadAccelerators(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDR_ACCELERATOR1));

7> 在 PreTranslateMessage 函数中进行拦截处理:

vb.net 组合键_vb.net 响应多个热键_registerhotkey

③、两种方法的比较:

第一种方法比较直接,使用方便,但一般只应用于快捷键比较少的程序;

第二种方法比较实用,虽然实现起来代码量稍微大一些,但是适用于快捷键比较多的程序中;

④、弊端:只在程序为当前活动窗口的时候有效,最小化、非活动窗口时无效!

解决方法:注册全局系统热键

①、注册全局系统热键的优点:

即使程序的窗口不是当前活动窗口、或者窗口最小化、隐藏后,也都可以响应热键;

比如QQ软件的默认呼出热键:Ctrl+Alt+Z 就是注册了全局系统热键;

②、注册窗口全局系统热键的步骤:

1> 调用 RegisterHotKey 函数注册全局系统热键;

BOOL RegisterHotKey(

HWND hWnd,

int id,

UINT fsModifiers,

UINT vk

);

hWnd : 指定响应该热键的窗口句柄;

id : 热键的标识,有点类似于 SetTimer 中的标识,作用域为线程内;

fsModifiers : 指定组合键,这个值可以由 MOD_ALT、MOD_CONTROL、MOD_SHIFT、MOD_WIN 中的一个或几个组成;

vk : 指定热键的虚拟键盘码,如:'A'

备注:这里的 Ctrl+Alt+A 这个组合键的作用域是全局的;

示例:RegisterHotKey(m_hWnd, 1000, MOD_CONTROL|MOD_ALT, 'Q');

2> 响应目标窗口的 WM_HOTKEY 消息;//也可以重写对话框的PreTranslateMessage函数 WM_HOTKEY

3> 调用 UnregisterHotKey 卸载热键:

BOOL UnregisterHotKey(

HWND hWnd,

int id

);

hWnd : 热键关联的窗口句柄;

id : 热键的标识;

可以放到对话框类的 OnDestroy() 函数中进行调用,这样模态与非模态对话框都可以成功的进行卸载;


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-35348-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...