VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 309|回复: 1

VC++基础班-[11]对话框程序响应组合按键

[复制链接]
51_avatar_middle
online_admins Syc 发表于 2018-1-22 20:14:41 | 显示全部楼层 |阅读模式
------------------------------------------ Begin ----------------------------------------
①、利用 GetKeyState 函数获得某一按键的按下、弹起状态;
#define IsKeyPressed(nVirtKey)  ((GetKeyState(nVirtKey) & (1<<(sizeof(SHORT)*8-1))) != 0)
#define IsKeyToggled(nVirtKey)  ((GetKeyState(nVirtKey) & 1) != 0)

//用 PreTranslateMessage 的方法,判断 Ctrl+Q 是否同时按下:
if(pMsg->message == WM_KEYDOWN && pMsg->wParam == 'Q' && IsKeyPressed(VK_CONTROL)) {
        AfxMessageBox("Ctrl + Q 组合键被按下");
        return TRUE;
}

②、通过载入快捷键资源,并建立快捷键与消息映射的方法来实现:
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 函数中进行拦截处理:
switch(pMsg->message)
{
case WM_KEYDOWN:
case WM_SYSKEYDOWN: // Alt、F10 键
        if(TranslateAccelerator(m_hWnd, hAcc, pMsg))
                return TRUE;
}

③、两种方法的比较:
第一种方法比较直接,使用方便,但一般只应用于快捷键比较少的程序;
第二种方法比较实用,虽然实现起来代码量稍微大一些,但是适用于快捷键比较多的程序中;

④、弊端:只在程序为当前活动窗口的时候有效,最小化、非活动窗口时无效!
解决方法:注册全局系统热键,下节课给大家讲解!
------------------------------------- End -------------------------------------------

相关课程演示细节还请观看视频教程!
本套教程由VC驿站原创,提供视频教程+售后答疑服务!
教程介绍及详情请见:https://www.cctry.com/thread-17282-1-1.html
VC驿站Vip会员详情请见:https://www.cctry.com/static/vip/index.html




上一篇:VC++基础班-[10]对话框响应鼠标及键盘消息
下一篇:VC++基础班-[12]注册全局系统热键

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

71_avatar_middle
在线会员 zzw843 发表于 2018-1-23 11:07:44 | 显示全部楼层
谢谢syc,继续学习中

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2018-12-11 05:06

Powered by Discuz! X3.4

© 2009-2018 cctry.com

快速回复 返回顶部 返回列表