没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|其它|编辑:郝浩|2005-05-23 09:36:00.000|阅读 1625 次
概述:
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
用窗口子类化技术改进Windows编辑框控件的功能
1.问题的提出
尽管Windows系统提供了丰富的通用控件(如按钮,编辑框,滑动条等),但
仍不可能满足我们实际应用中千差万别的需求,笔者在某项目的开发工作中就遇见
了这样的问题。项目需要一个供用户输入表格数据的接口界面,要求只接收用户输
入的数据信息,并可以利用键盘上的光标键移动输入位置以避免用户在键盘和鼠标
之间的频繁切换。简单地使用Windows的编辑框控件不仅不能对输入字符进行有效
过滤(如果给编辑框控件加上ES_NUMBER风格则只能接收0~9之间的数字而不能接
收小数点正负号等需要的字符),而且无法移动控件。如果重起炉灶自己编程来实
现,其工作量是相当可观的。为此,笔者经多次尝试,终于通过采用窗口子类化方
法,很好地解决了上述问题。
2.窗口子类化方法
应用程序为了登记一个窗口类,首先要填写好一个WNDCLASS结构,其中的结构
参数lpfnWndProc就是该类窗口函数的地址,接着调用RegisterClass()函数向Windows
系统申请登记这个窗口类。这时Windows会为其分配一块内存来存放该类的全部信息,
这个内存块称为窗口类内存块。
当应用程序要创建一个属于某一已登记窗口类的窗口时,Windows便为这个窗口分
配一块内存,即窗口内存块,用来存放与该窗口有关的专用信息。这些信息一部分来
自传递给窗口创建函数CreateWindow()或CreateWindowEx()的参数信息,另一部分则
来自所属窗口类的窗口类内存块,其中参数lpfnWndProc便被Windows从窗口类内存块
复制到为新创建窗口分配的窗口内存块中。当有消息被发送到这个窗口时,Windows检
查该窗口内存块中的窗口函数地址(lpfnWndProc),并调用该地址上的函数来处理
这些消息。
所谓窗口子类化,实际上就是改变窗口内存块中的有关参数。由于这种修改只涉
及到一个窗口的窗口内存块,因此它不会影响到属于同一窗口类的其它窗口的功能和
表现。窗口子类化中最常见的是修改窗口内存块中的窗口函数地址(lpfnWndProc),
使其指向一个新的窗口函数,从而改变原窗口函数的处理方法,改进其功能。其基本
步骤如下:
(1)编写子类化窗口函数。该函数必须为标准的窗口函数格式即:
LRESULT CALLBACK SubClassWndProc ( HWND , UINT , WPARAM , LPARAM ) ;
在这个函数中对感兴趣的消息进行处理,而把未处理或者需要原窗口函数进一步处
理的消息传送给原窗口函数;
(2)利用待子类化窗口的句柄hWnd,调用GetWindowLong ( hWnd , GWL_WNDPROC )
函数获得原窗口函数的地址并保存起来;
(3)调用SetWIndowLong ( hWnd , GWL_WNDPROC , SubClassWndProc ) 把窗口函
数设置成子类化窗口函数,完成窗口子类化。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com
面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@evget.com
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
慧都科技 版权所有 Copyright 2003-
2025 渝ICP备12000582号-13 渝公网安备
50010702500608号