SDK_按键消息的拦截
按键消息的拦截
拦截是为了在原有功能的基础上增加自己的操作
扩展:当按钮接收到点击消息的时候,响应的是WM_LBUTTONDOWN消息,按钮的会被这个消息打包成一个WM_COMMAND 消息发送给父窗口,父窗口接收到之后再进行处理
关键函数 SetWindowLong \ SetClassLong
区别在于一个修改的是一个窗口,一个会影响到所有使用这个窗口类的窗口
// 保存旧的按钮回调
WNDPROC OldButtonProc = nullptr;
// 用于处理接管到的消息的回调函数
LRESULT CALLBACK ButtonProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
// 1. 按钮作为一个窗口,需要响应 LBUTTONDOWN
case WM_LBUTTONDOWN:
{
// 还原回调函数
SetWindowLong(hWnd, GWL_WNDPROC, (LONG)OldButtonProc);
MessageBox(hWnd, L"设置的处理函数", L"WM_LBUTTONDOWN", MB_OK);
// 获取父窗口(不是重点)
// HWND hParent = GetParent(hWnd);
// PostMessage(hParent, WM_COMMAND, IDC_BUTTON1, (LPARAM)hWnd);
break;
}
}
// 为了保持原有功能不变,应该返回原按钮的回调函数
return OldButtonProc(hWnd, uMsg, wParam, lParam);
}
// 对话框回调函数
INT_PTR CALLBACK DlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
// 响应按钮的点击,修改回调函数
case WM_COMMAND:
{
// 1. 修改【窗口】的回调函数
// 参数1: 想要设置的窗口句柄
// 参数2: 想要设置的类型 GWL
// 参数3: 要替换的内容
// 返回值是修改之前的数据
OldButtonProc = (WNDPROC)SetWindowLong(
(HWND)lParam, GWL_WNDPROC, (LONG)ButtonProc);
// 默认的响应
MessageBox(hWnd, L"默认的处理函数", L"WM_COMMAND", MB_OK);
break;
}
case WM_CLOSE:
{
// 销毁对话框
EndDialog(hWnd, 0);
break;
}
default:
break;
}
return FALSE;
}
动态库
SDK_按键消息的拦截的更多相关文章
- MFC之按键消息(长按处理)
想要实现长按键的一些控制,查了查可以通过捕获键盘事件,然后处理按键时需要进行的操作.下面简单的实现左右按键界面更新数值加减. 1. 重载PreTranslateMessage(MSG* pMsg)函 ...
- 学习windows编程 day5 之按键消息
case WM_KEYDOWN://带sys的按键消息大多是系统需要自己处理的,我们一般不需要,默认处理 //wParam 指定按键的虚拟键代码 //lParam 指定技术,扫描码,闲钱状态,转换状态 ...
- Android通过Intent.ACTION_CLOSE_SYSTEM_DIALOGS监听Home按键消息
Android对屏幕下方经常使用的四个按键消息处理是不一致的: 1.搜索按键的消息在onKeyDown或者onKeyUp中接收: 2.菜单按键的消息在onCreateOptionsMenu.onKey ...
- Formview单文档或对话框项目接受不到按键消息的解决办法
当对话框或formview界面上有控件时,由于焦点在控件上,因此wm_char,wm_keydown等按键消息会被控件捕获,而导致对话框或formview无法接受该类按键消息.这时候通常的解决方法是在 ...
- 【转】Windows按键消息—虚拟键码
来源:http://c.biancheng.net/cpp/html/1253.html 虚拟键码保存在WM_KEYDOWN.WM_KEYUP.WM_SYSKEYDOWN和WM_SYSKEYUP消息的 ...
- PreTranslateMessage()函数捕获键盘按键消息
01. PreTranslateMessage函数,常用于屏蔽MFC对话框中默认的Enter和ESC消息 函数原型:BOOL PreTranslateMessage(MSG* pMsg) 用法举例: ...
- Windows按键消息—虚拟键码(转)
源地址:http://c.biancheng.net/cpp/html/1253.html 虚拟键码保存在WM_KEYDOWN.WM_KEYUP.WM_SYSKEYDOWN和WM_SYSKEYUP消息 ...
- win32收不到F10按键消息解决办法
在WM_KEYDOWN中处理F10(VK_F10)消息总是获取不到,后来用spy++监听窗口消息发现按下F10并没有WM_KEYDOWN消息产生,而是产生了WM_SYSKEYDOWN http://b ...
- 在C#程序中模拟发送键盘按键消息
using System.Runtime.InteropServices; 引入键盘事件函数 [DllImport("user32.dll")]public static exte ...
随机推荐
- 安装Nginx须要系统的辅助软件(linux)
安装Nginx须要系统的辅助软件(linux): yum -y install make gcc gcc-c++ ncurses-devel yum -y install zlib zlib-deve ...
- jdk、jre、spring、java ee、java se
1 java se.java ee和java me 这三个是java的标准.java se是根本,java ee建立在java se上,用于server.java me是java se的子集,用于终端 ...
- 【OI】简单的分块
介绍下简单的分块: 当我们遇到区间类问题的时候,如何保证我们快速而高效地完成操作? 答案是线段树分块. 所谓分块,就是把一个序列分成许多块分别维护.是不是想起了树状数组 这样能大大提高效率: 例如,我 ...
- SpringMVC_1
//@SessionAttributes(value={"user"},types={String.class}) @Controller public class SpringM ...
- YTU 2631: B1 能存各种类型数据的Store类
2631: B1 能存各种类型数据的Store类 时间限制: 1 Sec 内存限制: 128 MB 提交: 245 解决: 177 题目描述 有一种类,海纳百川,可以对任意类型的数据进行存取,造就 ...
- 改造系统alert
/************************************************************************* * 改造系统alert * param str 传 ...
- Spark 决策树--回归模型
package Spark_MLlib import org.apache.spark.ml.Pipeline import org.apache.spark.ml.evaluation.Regres ...
- 私有CA和证书
证书类型 证书授权机构的证书 服务器 用户证书 获取证书两种方法 使用证书授权机构: 生成签名请求(csr ) 将csr发送给CA 从CA处接收签名 自签名的证书: 自已签发自己的公钥 openSSL ...
- Python机器学习算法 — 决策树(Decision Tree)
决策树 -- 简介 决策树(decision tree)一般都是自上而下的来生成的.每个决策或事件(即自然状态)都可能引出两个或多个事件,导致不同的结果,把这种决策分支画成图形很像一棵 ...
- JS中定时器的返回数值ID值
定时器会返回一个数字值id,可以由clearInterval(id)或clearTimeout(id)来实现对对应定时器的清除. setInterval()/setTimeout()BOM中的Wind ...