ON_EVENT_RANGE的使用方法

Python多线程编程:用Event、Condition等同步原语替代time.sleep 在多线程编程中,线程同步是协调多个线程执行顺序、避免数据竞争的核心机制。其原理是通过锁、条件变量等同步原语,控制线程对共享资源的访问,确保线程安全。这一技术价值在于提升程序并发效率、降低资源消耗,并避免因竞态条件导致的数据不一致问题。应用场景广泛,包括生产者-消费者模型、线程池任务调度、资源池限流等并发控制场景。本文聚焦于Python的threading模块,深入探讨如何用Event、Condition等高级同步原语替代低效的time.sleep轮询,解决线程阻塞与响应延迟问题,实现更优雅的线程间协作。 阅读详情
var kba = new KBAlertz { "Launch Date" = "October 30th, 2013" }
Article ID: 183080 - View products that this article applies to.
This article was previously published under Q183080
If you are a Small Business customer, find additional troubleshooting and learning resources at the Support for Small Business site.

SUMMARY

The following is copied from the Visual C++ online documentation regarding the usage of the ON_EVENT_RANGE macro:
PfnHandler Pointer to a member function that handles the event. This function should have a BOOL return type, a first parameter of type UINT (for the control ID), and additional parameter types that match the event's parameters (see vtsParams). The function should return TRUE to indicate the event was handled; otherwise FALSE.

VtsParams A sequence of VTS_ constants that specifies the types of the parameters for the event. The first constant should be of type VTS_I4, for the control ID. These are the same constants that are used in dispatch map entries such as DISP_FUNCTION.

The vtsParams argument is a space-separated list of values from the VTS_ constants. One or more of these values separated by spaces (not commas) specifies the function's parameter list. For example:

VTS_I2 VTS_BOOL specifies a list containing a short integer followed by a BOOL.
According to this specification, the pfnHandler should have at least one parameter. In addition, the first parameter must be a UINT data type for the control ID. Therefore, the first VTS_ constant for vtsParams must be VTS_I4 (UINT data type).

If pfnHandler has some additional parameters besides the UINT of the control ID, then each VTS_ constant for vtsParams after VTS_I4 must match the data types of these additional parameters of pfnHandler.

To better illustrate the usage of the ON_EVENT_RANGE macro, a simple sample is shown below.

MORE INFORMATION

The sample code below illustrates the use of the ON_EVENT_RANGE() macro in an MFC dialog-based application. CTestDlg is a CDialog-derived class. In the sample code below, TestOnProblem is the pfnHandler and it has two parameters: a control ID of type UINT and an additional parameter of type short. Thus, vtsParams should be:
   VTS_I4 VTS_I2
				
VTS_I4 and VTS_I2 match the data type of the first and second parameters of TestOnProblem(), respectively.

For instance, the function prototype for pfnHandler is below:
   BOOL CTestDlg::TestOnProblem(UINT CtrlID, short Param)
   {
      TRACE("control id = %u, Second parameter = %d\n", CtrlID, Param);
      return TRUE;  // returns TRUE to indicate the event was handled;
   }
				
Then, the event map should look similar to the following:
   BEGIN_EVENTSINK_MAP(CTestDlg, CDialog)
       //{{AFX_EVENTSINK_MAP(CTestDlg)
       //}}AFX_EVENTSINK_MAP
       ON_EVENT_RANGE(
           CTestDlg,      // Class to which this event sink map belongs.
           IDC_FIRSTCTRL, // ID of the first control in the range.
           IDC_LASTCTRL,  // ID of the last control in the range.
           1,             // Dispatch ID of event fired by the control.
           TestOnProblem, // Function for handling events.
           VTS_I4 VTS_I2) // VTS_I4 and VTS_I2 are the first and second
                          // parameters of TestOnProblem() function.
   END_EVENTSINK_MAP()
				
It is important to note that ON_EVENT_RANGE must be added outside of ClassWizard's comment ("//") lines. Otherwise, ClassWizard will give you an error message box whenever you open the dialog box resource template. This is because ClassWizard doesn't recognize the syntax of the ON_EVENT_RANGE macro.

Also, make sure the controls whose events are being handled have IDs within the contiguous range of IDs listed in ON_EVENT_RANGE. Check the Ids by clicking View on the Resource Symbols toolbar in Visual C++ 5.0. Note that the IDs of the controls may be different than expected, depending on the order in which they were created on the dialog box template.

Although one can't create an ON_EVENT_RANGE handler using ClassWizard, it is possible to create an ON_EVENT handler using ClassWizard. Please be aware that in creating an ON_EVENT handler using ClassWizard, the return type of the handler created may be void. This is a bug in ClassWizard. The documentation for both ON_EVENT and ON_EVENT_RANGE is still correct when it says "This function should have a BOOL return type." Returning void usually works correctly, however, so this is not a big problem.

(c) Microsoft Corporation 1998, All Rights Reserved. Contributions by Yeong- Kah Tam, Microsoft Corporation.

About This Article

Article ID: 183080 - Last Review: November 21, 2006 - Revision: 2.2
【VS开发】动态添加的ActiveX控件如何响应事件 http://blog.youkuaiyun.com/xiaoqiqixiao/article/details/574542 今天在csdn上看到一朋友问如何响应动态添加的控件的事件,搜索资料,发现对于一般的应用来说,使用ON_EVENT_RANGE就足以满足需要了,不过,还是希望能够更灵活的实现动态的响应,所以又经过对MFC源码一番探查,发现还是可以的,而且应该也不是很复杂的,下面分别来说说这两种方法 阅读详情

相关推荐

5.2 event 内核实现 — KFD Event 的低延迟、低开销、可扩展技术

本文探讨了GPU完成任务后如何高效通知CPU的机制设计,重点分析了Signal Page架构及其在iGPU和dGPU上的实现差异。通过共享内存区域(Signal Page)实现轮询与中断的折中方案,每个事件占用64-bit槽位,支持用户态轮询和内核阻塞唤醒两种模式。文章详细对比了iGPU(内核分配系统页)和dGPU(用户态预分配GTT BO)的不同实现路径,并揭示了event_id即slot索引的O(1)查找设计。

图形/计算GPU的驱动与虚拟化技术分享园地 1037

on-event事件处理器与addEventListener区别

1. on-event 我们通常将通过on-event函数绑定的叫事件处理器(handler event) on-event 属于 DOM level 0 events,最早提出的规范 这种事件处理方式,是将指定的事件注册到元素上实现的,作为一个元素属性 var t = document.getElementById('demo') t.onclick = function() { } 因为是作...

zmjのblog 4476

index range scan 单块读

--1719 SESSION_ID 1141 SQL_ID drpk7cccd9xhm MACHINE WORKGROUP\TLCB-PC BLOCKING_SESSION SAMPLE_TIME 10-4月 -19 07.50.01.154 下午 MODULE PL/SQL Developer PROGRAM plsqldev.exe EVENT db file sequen...

zhaoyangjian724的专栏 329

关于EventBus的onEvent()、onEventMainThread()、onEventBackgroundThread()、onEventAsync()的解释

几句话概括: 1.onEvent() 使用onEvent来接收事件,那么接收事件和post事件在同一个线程中执行 2.onEventMainThread() 使用onEventMainThread来接收事件,那么不论post事件在哪个线程运行,接收事件永远在UI线程执行 3.onEventBackgroundThread() 使用onEventBackground...

AndroidGuy的专栏 7277

Go事件溯源:Event Sourcing实现

Event Sourcing把状态变更存成不可变事件流,状态由事件回放得到。Event Store负责追加和加载事件,乐观锁防并发覆盖。聚合根快照每N个事件存一次,加速回放。事件结构变更要用upcaster迁移老版本,别直接改老数据。下一篇聊Saga模式,看跨服务的分布式事务怎么用补偿事务保证最终一致。

白话机器学习 90

STM32G070xx将Flash页分块方式存储,固定数据块存储,实现一次擦除多次写入

本例程使用STM32G070xx芯片,Flash大小128KB,Flash每页(2048字节)写满后再擦除。操作存储区分为64块,每块32字节,即写满64次擦除一次;标定存储区分为16块,每块128字节,即写满16次擦除一次,每个存储区的块都有各自的头部标记

RaphaelCeo的博客 1544

动态添加的ActiveX控件如何响应事件

今天在csdn上看到一朋友问如何响应动态添加的控件的事件,搜索资料,发现对于一般的应用来说,使用ON_EVENT_RANGE就足以满足需要了,不过,还是希望能够更灵活的实现动态的响应,所以又经过对MFC源码一番探查,发现还是可以的,而且应该也不是很复杂的,下面分别来说说这两种方法例程为Tdax,对话框程序,使用了Microsoft UpDown Control 6.0控件作为控件,添加了Mouse

七七八八 7879

在thinkBook16的win11基础上安装ubuntu22.04

背景:联想ThinkBook16 pro 32G/512G,系统盘已安装Win11,加装一条M.2-2T固态,想在2T上分一个300GB的EXT4分区,然后把ubuntu22.04安装在该分区上,并实现Win11+Linux多系统共存。 目标:实现多磁盘下分区管理的简化,优化掉一些不必要的多余的维护性质的分区。

QzmAIoT 4002

动态添加的ActiveX控件如何响应事件 .

今天在csdn上看到一朋友问如何响应动态添加的控件的事件,搜索资料,发现对于一般的应用来说,使用ON_EVENT_RANGE就足以满足需要了,不过,还是希望能够更灵活的实现动态的响应,所以又经过对MFC源码一番探查,发现还是可以的,而且应该也不是很复杂的,下面分别来说说这两种方法

http://www.softwareace.cn 王牌软件 644

深度学习二分类实战:用Python+Keras搞定基因表达数据预测(附完整代码)

本文详细介绍了如何使用Python和Keras构建深度学习模型进行基因表达数据的二分类预测。通过数据预处理、特征选择、神经网络构建及优化策略,特别针对小样本场景提供了调参技巧和模型解释方法。文章还包含完整的代码示例,帮助读者快速掌握深度学习在生物信息学中的应用。

weixin_30642561的博客 245

Ant Design Calendar 实战:用 cellRender 绘制跨天事件范围(Event Range)

Ant Design 的 Calendar 组件通过 `cellRender` 属性开放了自定义日期格内容的扩展点。本文围绕官方示例 [event-range 演示](https://link.gitcode.com/i/91d5e15f43e85b51553acd2fdf025e22) 展开,讲解如何根据每个日期判定事件的"开始、中间、结束、单日"四种范围状态,并用带负边距的连续色条把跨天事件(

gitblog_00309的博客 418

DIY电子管耳放实战:12AU7+6V6GT组合的电路设计与调试心得

本文详细分享了DIY电子管耳放的实战经验,重点解析了12AU7与6V6GT经典组合的电路设计、元件选型与调试过程。内容涵盖从核心架构设计、关键元件(如输出变压器、耦合电容)的科学选型,到静态工作点设置、负反馈引入及常见噪声问题的排查,旨在帮助音响DIY爱好者和电子管放大器初学者成功打造一台低失真、高信噪比且富有“胆味”的耳机放大器,享受动手制作的乐趣与温暖音质。

weixin_29230805的博客 552

VC中几个控件处理同一消息方法

ON_CONTROL_RANGE(wNotifyCode, id1, id2, memberFxn ) void memberFxn (UNIT nID) nID是引起消息的控件ID值 ID范围是id1~id2之间 消息 wNotifyCode=STN_CLICKED。。。。。。

zmq5411的专栏 639

智能硬件产品 App 全球发布 第 1 章:全球 App 发布战略设计

本章阐述智能硬件 App 全球发布战略,涵盖市场分析、竞争格局、用户画像及资源配置。通过制定可执行的全球化推广路径,整合地区法规合规、渠道分发策略与营销活动设计,助力团队快速进入主流商店并确立品牌影响力。同时构建可量化的 KPI 监控体系,指导项目进度追踪与效果复盘,确保产品迭代持续优化,降低运营总成本。

moton2017的博客 156

【06】新国都——新国都 嵌入式笔试,校招,题目记录及解析

本文总结了新国都嵌入式校招笔试题目及解析,内容涵盖C语言基础、Linux系统、数据结构与算法等多个方面。主要包括:1)不定项选择题10道,涉及字符串常量、蓝牙与GPRS区别、编译错误识别等;2)判断题10道,考察Linux权限、循环控制、内存管理等;3)填空题5道,包括编码计算、逻辑运算、宏定义等;4)简答题2道,解析全局变量引用和进程线程区别。题目难度适中,重点考察嵌入式开发基础知识和编程能力,并提供详细解析和扩展知识链接,对准备嵌入式相关笔试具有参考价值。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 1431

关于OCX控件批量处理响应函数

在头文件中添加 DECLARE_EVENTSINK_MAP()   CPP中:BEGIN_EVENTSINK_MAP(CXXXDlg, CDialog)//{{AFX_EVENTSINK_MAP(CXXXDlg)ON_EVENT_RANGE(CXXXDlg, IDStart, IDEnd, 4 , OnSendXXXMSG, VTS_I4,Param1.....)//}}AFX_EVENT

kofts的专栏 446

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Tornado 3.1.1 发布详解:静态文件 Range 请求修复与 keep-alive 连接关闭回调

Tornado 3.1.1 于 2013 年 9 月 1 日发布,是一个聚焦修复的小版本,仅包含两项关键修正:一是 `StaticFileHandler` 处理超出整个文件大小的 `Range` 请求时不再报错(该问题由 Facebook 爬虫的异常请求行为触发);二是 `RequestHandler.on_connection_close` 在 keep-alive 连接的后续请求上现在能够正确

gitblog_00610的博客 182

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

10分钟点亮Hapticpad:UF2固件刷入RP2040的超简单方法(免编译)

Hapticpad 是一款带 128x64 OLED 屏幕和带触觉反馈滚轮的 6 键宏键盘。本文教你使用官方预编译的 UF2 固件,通过 USB 直接刷入 RP2040 主控芯片,全程无需安装开发环境、无需编译,10 分钟即可点亮你的 Hapticpad,让屏幕显示按钮标签、让滚轮"咔哒咔哒"动起来。 [![Hapticpad宏键盘固件刷机成品:带OLED屏幕与触觉反馈滚轮的6键宏键盘](htt

gitblog_00469的博客 484

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

ESP-32 笔记(4)https 进阶:事件驱动与流式下载实战

本文深入探讨了ESP32开发中`esp_http_client`库的事件驱动机制与流式下载实战技巧。通过解析`esp_http_client_event_t`结构体的7种事件类型,详细介绍了如何处理大文件下载、网络中断及性能优化等关键问题,帮助开发者高效实现https文件下载功能。

weixin_30614109的博客 431

vs中插入IE(1)

MSDN上摘录:Event Sink MapsWhen an embedded OLE control fires an event, the controls container receives the event using a mechanism, called an "event sink map," supplied by MFC. This event sink

crystal_qd的专栏 304
上一篇: How to Load Dialog From a Resource DLL?
下一篇: 动态添加的ActiveX控件如何响应事件
embededvc
博客等级 码龄21年 176粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值