在MFC中手动添加消息处理函数PreTranslateMessage和自定义消息

开发基于MFC的ActiveX控件的时候的一些消息处理 MFC有PreTranslageMessage() 可以处理一些基于MFC的消息处理。 可是有时候如果你开发一个基于MFC的ActiveX作为容器,内部实现是Win32 或者其他框架会发现,好多消息都不能正常收到。 除非把你现有的内部的控件基于各种MFC的基类实现(会重载各种MFC的PreTranslateMessage)才能收到各种消息。 根本原因是基于MFC的ActiveX控件没有自己的 阅读详情


一、添加消息处理函数PreTranslateMessage,此函数可以通过MFC ClassWizard添加

  1. BOOL CPreTranslateMessageDlg::PreTranslateMessage(MSG* pMsg)
  2. {
  3.     if (pMsg->message==WM_LBUTTONDOWN)
  4.     {
  5.         MessageBox("三三四四");
  6.     }
  7.     
  8.     return CDialog::PreTranslateMessage(pMsg);
  9. }

此函数为手动添加的消息函数,可通过pMsg->message来判断是什么消息,比如WM_LBUTTONDOWN是左键单击消息,那当单击左键时就会执行此函数,同样当敲击一下键盘也会执行PreTranslateMessage函数

 

 

二、手动添加消息和消息处理函数

1、由于是用户自己定义的消息,所以首先要定义一个消息宏如下:

#define WM_MYMESSAGE (WM_USER+1)

注意:为防止用户定义的宏和系统定义宏冲突,所以系统提供了一个WM_USER,只要是大于WM_USER可供用户使用

2、定义一个消息响应宏,即将此宏映射的函数,如下:

ON_MESSAGE(WM_MYMESSAGE,OnMyMssage)

WM_MYMESSAGE为自定义的宏,OnMyMssage为消息处理函数名

3、在头文件中声明自己的消息处理函数,如下:

afx_msg LRESULT OnMyMssage(WPARAM w,LPARAM l);

4、定义消息处理函数,如下:

LRESULT CPostMessageDlg::OnMyMssage(WPARAM wParam, LPARAM lParam)
{
     MessageBox("SADFA");
     return 1;
}

5、通过PostMessage函数将OnMyMssage添加到消息队列中,如下:

void CPostMessageDlg::OnButton1() //按钮响应事件
{
     PostMessage(WM_MYMESSAGE,IDC_BUTTON1);//发送之后立即返回
     //SendMessage(WM_MYMESSAGE);//发送之后等待返回

}

关于mfc和消息有关系的虚函数问题解读:如果WindowProc是消息循环那PreTranslateMessage是干什么的? 🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。 阅读详情

相关推荐

MFC中PreTranslateMessage用法

详细介绍了MFC中PreTranslateMessage的使用方法

PreTranslateMessage函数

在这个函数中,你可以根据自己的需求对消息进行处理,然后返回一个布尔值来指示是否继续分派消息。需要注意的是,在PreTranslateMessage函数中处理消息时,应该尽量避免耗时的操作,以免影响消息循环的响应速度。另外,如果在PreTranslateMessage函数中处理了某个消息,并且返回了TRUE,那么该消息将不会被传递给窗口的默认消息处理机制。PreTranslateMessage函数的作用是拦截并处理消息,而不是简单地将消息传递给默认的消息处理机制。

weixin_49146002的博客 1460

MySQL根据idb文件恢复数据

恢复前提 MySQL 5.* 和 8.* 的恢复方式大同小异,最基本的区别是8.* 中,不再有表结构frm文件,所以要恢复 8.* 的数据,就必须要有完整的建表语句。 而恢复 5.* 的数据,就需要idb文件和 frm文件,当然,如果有完整的建表语句的话,不用frm文件也行。 恢复步骤 需要注意的是,以下操作需要选定数据库后执行。 5.* 恢复表结构 确定表列数 首先创建一张 与需要恢复数据的表 的名字相同的新表,如果已知原表的字段数量的话,就按照原表字段数建表,字段名和类型都不用考虑,如果不知道数量的话,

weixin_45121446的博客 5449

MFC中的PreTranslateMessage

最近用了一段时间的MFC,主要来做图像交互操作,缩放、拖拽、画框、删框、改变框等。用的最多的就是这个虚函数,我觉得我有必要总结一下,让自己更了解这个函数,以后用起来有个参考也更方便。 1.PreTranslateMessage 百度百科:PreTranslateMessage是消息在送给TranslateMessage函数之前被调用的,绝大多数本窗口的消息都要通过这里,比较常用,当你需

尽人事,听天命 1万+

基于知识图谱的电影推荐系统——Neo4j&Python

也可直接从这里下载:链接: https://pan.baidu.com/s/1l6wjwcUzy5G_dIlVDbCkpw 提取码: pkq6。修改main.py中的driver,输入自己数据库的用户名与密码。系统会询问是否需要重新加载并创建知识图谱,在第一次时输入1。

weixin_46351593的博客 6356

【飞控】PX4 Autopilots与MATLAB/Simulink联合仿真环境搭建全攻略

本文详细介绍了在Windows系统上搭建PX4 Autopilots与MATLAB/Simulink联合仿真环境的完整流程。通过WSL2安装Ubuntu,配置UAV Toolbox支持包,并重点解决了PX4源码克隆、子模块更新等网络难题,最终实现软件在环(SITL)仿真。文章还涵盖了硬件在环(HITL)配置及常见问题排查,为无人机飞控算法开发与测试提供了高效、可靠的解决方案。

weixin_29201933的博客 549

在MFC中手动添加消息处理函数PreTranslateMessage

一、添加消息处理函数PreTranslateMessage,此函数可以通过MFC ClassWizard添加 BOOL CPreTranslateMessageDlg::PreTranslateMessage(MSG* pMsg) {     if (pMsg->message==WM_LBUTTONDOWN)     {         MessageBox("三三四四");

foreverhuylee的专栏 2万+

Ubuntu24.04/20.04设置网络共享文件夹

Ubuntu20.04利用向日葵远程控制时,不能传输文件。使用linux版本QQ来传输是可以的,不过linuxqq功能真的很弱。因此,打算在Ubuntu系统中建立一个共享文件夹,可在局域网中访问。 1、新建共享文件夹 获取root权限,或者登陆root账户。可在/home文件夹(或其它文件夹)下新建一个文件夹,如share。 右击文件夹,选择“本地网络共享”菜单。按下图设置。 点击确定。如果系统已经安装了samba服务器,就可以进入第3步。如果没有,会提示安装,按提示安装,可能会出错,可进.

willhu2008的专栏 2万+

【MFC】在MFC中PreTranslateMessage()的使用方法

BOOL CSearchuserDlg::PreTranslateMessage(MSG* pMsg) { if (pMsg->message==WM_KEYDOWN) // 判断是否有按键按下 { switch (pMsg->wParam) { c...

al_qaeda8888的博客 684

rv1126平台spi屏调试

st7789v2 i2c调试

zuoanyouzhuan_的博客 2038

OFDM调制matlab仿真详细代码

MATLAB仿真代码 % ================================================== % 作者: 肆拾伍 % 时间:11/30 2019 % 版本:V3 % =================OFDM仿真参数说明:================ % % 子载波数 carrier_count ---200 % 总符号数 symbol_count ...

肆拾伍的博客 3万+

MFC中手动添加消息处理函数PreTranslateMessage截获按键等消息

C++

u011555996的博客 2088

零基础入门simulink仿真--通信领域的调制解调技术:基于Simulink的PM信号调制与解调仿真建模示例

PM的基本原理是将基带信号(如语音或音乐信号)加载到高频载波信号的相位上。通过改变载波的瞬时相位,可以实现信息的传输。PM的优点包括抗噪声能力强、频谱利用率较高等,但其解调过程相对复杂。通过Simulink,我们可以通过模块化的建模方式实现PM信号的调制和解调过程,并观察信号在信道中的传输效果。通过本指南,我们介绍了如何基于Simulink搭建一个完整的PM信号调制与解调仿真模型,并进行仿真和性能评估。背景介绍:理解PM信号调制与解调的基本原理及其应用。所需工具和环境:列出进行PM仿真所需的工具和环境。

amy_mhd的博客 605

PreTranslateMessage处理键盘消息

PreTranslateMessage作用和使用方法 PreTranslateMessage和TranslateMessage主要处理键盘的消息  PreTranslateMessage是消息在送给TranslateMessage函数之前被调用的,绝大多数本窗口的消息都要通过这里,比较常用,当需要在MFC之前处理某些消息时,常常要在这里添加代码.          MFC消息控制流最

hanyujianke的专栏 2710

[SoC]SoC验证中bootcode与firmware相关验证经验总结

本文总结了SoC验证中bootcode和firmware的验证经验。重点介绍了两种数据加载方法:1)使用Verilog系统函数$readmemh/$readmemb直接写入ROM/ARAM,需注意文件路径、格式和斜杠方向;2)通过Memory Hierarchy在initial块中操作,需要添加适当延时并注意路径拼接。文章还提供了在testcase phase中先读取数据到HASH再写入SRAM的示例,并强调加载后需使能edc_bypass以避免ECC错误。验证过程中需特别注意文件位置、格式要求及路径处理等

元直的博客 2498

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

PreTranslateMessage作用和使用方法

 PreTranslateMessage是消息在送给TranslateMessage函数之前被调用的,绝大多数本窗口的消息都要通过这里,比较常用,当需要在MFC之前处理某些消息时,常常要在这里添加代码.                MFC消息控制流最具特色的地方是CWnd类的虚拟函数PreTranslateMessage(),通过重载这个函数,可以改变MFC的消息控制流程,甚至可以作一个

wzyzb的专栏 4万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

PreTranslateMessage虚函数,用来截获消息

在MFC中,PreTranslateMessage是虚函数,是用来截获消息的。我们可以通过重载它来处理键盘和鼠标消息。在sdk中,这有所不同,我们必须在回调函数LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)中处理消息。 它和PreTranslateMessage起的作用是类似的,只是MFC封装的更好而已。 PreTranslateMessage是消息在送给TranslateMessage函..

小雨滴答滴答的博客 669

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

MFC中PretranslateMessage的实现

1.函数原型:(MSDN)virtual BOOL PreTranslateMessage( MSG *pMsg );功能:    Override   this   function   to   filter   window   messages   before   they   are   dispatched   to   the   Windows   functions

gxj1680的专栏 2189

MFC消息处理流程概述

Win32下的消息流程清晰明了,但在MFC下,由于封装的缘故,隐藏的有点深,对一般的开发人员而言,就不甚明了喽。本文试图粗略展示出MFC下消息处理的基本流程。 一、先看一下Win32下的消息处理流程 每一个线程都对应有一个消息队列,利用API函数GetMessage从消息队列中获取消息,然后利用TranslateMessage翻译消息(主要是一些键盘消息),再利用Dispatc

ronghuahh的专栏 815

VC++ PreTranslateMessage和WindowProc的使用总结

一、先看基础知识 windows消息处理机制是这种: 首先系统(也就是windows)把来自硬件(鼠标,键盘等消息)和来自应用程序的消息 放到一个系统消息队列中去.而应用程序须要有自己的消息队列,也就是线程消息队列,每个线程有自己的消息队列,对于多线程的应用程序就有和线程数目相等的线程消息队列. windows消息队列把得到的消息发送到线程消息队列,线程消息队列每次取出一条消息发...

$firecat利白的代码足迹$ 1594

MFC的PreTranslateMessage()函数浅析

作用:       PreTranslateMessage是消息在送给TranslateMessage函数之前被调用的,绝大多数本窗口的消息都要通过这里,比较常用,当需要在MFC之前处理某些消息时,常常要在这里添加代码.                  MFC消息控制流最具特色的地方是CWnd类的虚拟函数PreTranslateMessage(),通过重载这个函数,可以改变MFC的消息控制

ximi19881011的专栏 1174

用PreTranslateMessage使dialog接收消息

       最近做了一个无边框无标题栏的dialog ,此dialog设为全屏。  由此dialog接收键盘的上、下、左、右消息,并能屏蔽掉enter消息。  关于PreTranslateMessage()  1.函数原型:(MSDN)               virtual BOOL PreTranslateMessage( MSG *pMsg

huangjn213的专栏 1758
上一篇: MFC OCX 控件事件的添加和处理
下一篇: vs2008生成的ocx控件的classid查看
wd_cloud
博客等级 码龄19年 733粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值