社区
其它技术问题
帖子详情
英文不好真痛苦,资料摆在面前都没用. 关于,是否可以接力把它翻译出来.
0黄瓜0
2007-04-25 06:13:44
http://www.codeproject.com/win32/msgcrackwizard.asp
...全文
538
7
打赏
收藏
英文不好真痛苦,资料摆在面前都没用. 关于,是否可以接力把它翻译出来.
http://www.codeproject.com/win32/msgcrackwizard.asp
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
0黄瓜0
2007-04-26
打赏
举报
回复
非常感谢.
后面是这个工具的使用说明.不用翻译了.我只想了解<windowsx.h>
HewpKanXue
2007-04-25
打赏
举报
回复
我正在努力学习英语,不知翻得对不对,请大家斧正,错了也不要BS 、砖头倒可以扔
第一部分:
介绍:
WINDOWSX.H 头文件为W32SDK的程序员提供方便(工具?)
很多初中级程序员用C/C++编写Windwos API的程序时,经常面对面条式的switch...case语句块
当你在Window过程(回调函数、下称过程)中加入大量诸如WM_COMMAND or WM_CHAR的消息捕获时。真是一场噩梦。
关于上千行代码的Window过程的问题,随着 C/C++ 7.0 编译器和Windows SDK for Windows 3.1发行时带的一个头文件而被解决。
这个头文件是<windowsx.h> 以及所包含的大量的有用的宏。按照微软的说法:这些头文件所带来的便利可重复用于下面这些地方(Groups)
:
.在C程序中使用STRICT宏进行严格的类型检查。
.在windows程序中用宏简化公共性操作。
.使用控件宏同windows控件进行通讯。
.windows环境下的消息解析器(message crackers)(是一个方便的、可移植的、类型安全的处理消息的方法)以及和他相关的参数和返回值
。
因为消息解析器向导是用于消息解析器的,其他由这头文件带来的一些有用的宏,我就跳过不讲了,如果你想看看关于
WINDOWSX.H的简要介绍,可以看 MS Knowledge Base Article #83456.
(http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/q83/4/56.asp)
好,让我们说下消息解析器的优点,当然也包括为什么这里提供的这个工具是如此有用。
当你使用W32 SDK编程,用windows过程(通常叫做WndProc)处理窗口和对话框消息时,使用swich-case来捕获你需要处理的消息是
非常普遍的做法。假设你想处理WM_COMMAND, WM_KEYUP, WM_CLOSE and WM_DESTROY消息,你是这样作的:
LRESULT CALLBACK MainWndProc (HWND hwnd, UINT msg,
WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_COMMAND:
// ...
break;
case WM_KEYUP:
// ...
break;
case WM_CLOSE:
// ...
break;
case WM_DESTROY:
//...
break;
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
}
这是自从Windows1.0诞生以来处理消息最常见的风格了。而且很肯定,它工作得很好。
但问题是,当你加入一个或多个复杂的特色到你的程序中时,如MDI,OLE 公共控件等等,
结果形成了一个上千行的Window过程,你开始用PageDn和PageUp来查找你想要修改的消息处理代码了。
消息解析器的第一个好处就是:他把面条式的case标签转换成类似MFC中易于维护和处理的函数。
第二个好处是:处理函数中合适的参数。你可以简单使用switch(id)代替原先的switch(LOWORD(wparam)),
因为消息解析器传递给你的是"已解析"的参数,他等价于LOWORD(wparam)。
HANDLE_MSG 这个消息处理宏在windowx.h中的定义如下:
#define HANDLE_MSG(hwnd, message, fn) \
case (message) : return HANDLE_##message((hwnd), (wParam), (lParam), (fn))
你想要把你的代码做成"消息解析"版的,你需要提供一个解析宏HANDLE_MSG及其函数来处理你的消息.
在window过程里HANDLE_MSG宏需要三个参数:窗口句柄(hwnd),消息(WM_XXXX),处理你消息的函数(function)。
为更好地解释这个:看下面,我们把上面那段代码转换成了下面的代码:
LRESULT CALLBACK MainWndProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
HANDLE_MSG (hwnd, WM_COMMAND, OnCommand);
HANDLE_MSG (hwnd, WM_KEYUP, OnKeyup);
HANDLE_MSG (hwnd, WM_CLOSE, OnClose);
HANDLE_MSG (hwnd, WM_DESTROY, OnDestroy);
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
}
哇,太好了,紧凑且易于管理的window过程。现在你可以去定义你的消息处理函数了(OnKeyUp, OnClose, and OnDestroy)
还有一个真正的好处,你可以在visual studio IDE 环境中直接跳转到消息处理函数。
图片:...(看原文)
有个问题是:当你每加入一个消息处理,你必须在windowx.h中查找相关参数的定义。
因为消息处理参数的格式是明确的而不能由你随心所欲。但在头文件中进行重复搜索是乏味且易出错的。
消息解析向导工具用于解决这个:他允许你粘贴你需要的函数参数,
而你如果只是打草稿,他也会在在你消息处理中写上一个模板化的window或对话框过程 (??这句有疑问)
消息前驱宏(message fowarding): WINDOWSX.H 的另一个特色 (消息前向?)
WINDOWSX.H另一个特色是消息前驱的可能性,
它是用于"解压"消息处理参数到其他函数调用(如PostMessage, SendMessage, CallWindowProc等)所需要的合适的WPARAM和LPARAM值。
假设我们想用SendMessage发送一个WM_COMMAND消息到父窗口,"模拟"一个在名为IDC_USERCTL控件上的双击(通过发送BN_DBLCLK的通知码)
我们通常这么做的:
SendMessage (hwndParent, WM_COMMAND,
MAKEWPARAM(IDC_USERCTL, BN_DBLCLK),
(LPARAM)GetDlgItem(hwnd, ID_USERCTL));
这是相当复杂的语法。SendMessage希望WPARAM参数的低字是控件ID而高字是通知码,LPARAM参数是控件句柄,句柄我们通过GetDlgItem这
个API函数得到。
上述代码可以被转换为WINDOWSX.H的消息前驱宏,FORWARD_WM_xxxxx。
对于每个消息,消息前向宏用同样的方式"打包"消息解析向导创建的函数参数,
并且传递给你的处理函数"已解压"的参数(LPARAM/WPARAMs)。
例如:对于一个myWnd窗口的WM_COMMAND消息,消息解析器向导将生成如下的函数原形:
void myWnd_OnCommand (HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
那么,这些解析的参数也同样用于消息前驱宏,这样上面那使人混乱的SendMessage调用可以简化为:
FORWARD_WM_COMMAND (hwndParent, IDC_USERCTL,
GetDlgItem(hwnd, ID_USERCTL), BN_DBLCLK, SendMessage);
使用所有这些消息解析器支持的消息简单可行。(第一部分完)
Generics
2007-04-25
打赏
举报
回复
文章实在太长, 为100分不值得.
VCLIFE
2007-04-25
打赏
举报
回复
慢慢用google的语言工具看吧,我也是英文盲,不过计算机英语也就那么几个单词,应该看一阵能搞顶
飞哥
2007-04-25
打赏
举报
回复
工作量比较大
小一郎
2007-04-25
打赏
举报
回复
关注
mLee79
2007-04-25
打赏
举报
回复
计算机英语没啥好翻译的吧, 俺们这种完全的英语白痴看起来毛病都不是很多...
基于开源回测框架与Wind数据构建量化交易系统的实践指南
量化交易系统通过算法模型分析市场数据,自动执行交易决策,其核心在于数据、策略与执行引擎的高效协同。开源回测框架(如Backtrader)提供了事件驱动的策略开发与验证环境,而专业金融数据源(如Wind)则确保了数据的全面性与准确性。将两者结合,能够构建一个从策略研究、历史回测到模拟交易的完整闭环,极大提升了量化策略的开发效率与可靠性。本文以“OpenClaw龙虾之WindClaw量化”项目为例,深入解析了如何利用开源框架的模块化优势,对接Wind API实现数据获取、缓存与格式转换,并详细演示了双均线等策略
基于Python的不聪明时序数据转面板数据方法
下载数据的时候,通常获得的数据是以面板形式排列的,但也会遇到某些以时序形式排列的数据。显然面板形式的数据更便于使用,但有时会出现所需数据只有时序形式的情况,如使用wind数据库的证券分析工具时,就只能下载时序形式的数据。因此,本文提供了一种(不太聪明的)将时序形式转化为面板形式数据的思路。
Python自动化获取股票日线数据实战指南
股票日线数据是量化交易和技术分析的基础数据源,记录了每日开盘价、收盘价、成交量等关键指标。通过Python实现自动化采集,可以显著提升数据获取效率,避免人工操作的错误风险。本文以Tushare和AKShare等主流金融数据接口为例,详细解析数据获取原理、存储方案优化和异常处理机制。在量化策略回测、组合监控等场景中,稳定的日线数据管道能为机器学习模型训练和投资决策提供可靠支持。特别针对数据质量管控、生产环境部署等工程实践问题,提供了可落地的解决方案。
GitSkills:从GitHub构建AI Agent技能数据集,赋能智能体开发
在AI Agent(智能体)开发领域,技能(Skills)是封装了特定功能(如发送邮件、查询数据)的可调用代码单元,是决定智能体能力上限的关键。其核心原理在于通过标准化的接口描述,将功能模块化,使智能体能够理解并调用。这项技术的价值在于解决了技能复用与发现的难题,极大提升了开发效率,降低了智能体构建的门槛。其应用场景广泛,从自动化工作流到复杂任务规划,都依赖于丰富且可靠的技能库。本文聚焦的GitSkills项目,正是通过系统性地从GitHub海量开源项目中挖掘、清洗和标准化这些技能,构建了一个结构化的数据集
GEE平台GFS数据集:全球天气预报数据的高效调用与实战应用
气象数据是进行气候分析、灾害预警和农业规划等空间分析项目的关键基础。传统气象数据获取往往面临流程繁琐、时效性低等挑战。Google Earth Engine(GEE)作为强大的地理空间云计算平台,集成了多种遥感与模型数据集,其核心价值在于将海量数据与云端计算能力无缝结合,极大地简化了数据处理流程。GFS(全球预报系统)数据集是其中重要的气象预报数据源,它提供了覆盖全球、高时效性的未来天气预测。通过GEE平台调用GFS数据,用户可以直接获取地表温度、风速风向、降水量等关键变量,无需关心底层数据存储与格式转换,
其它技术问题
3,881
社区成员
9,044
社区内容
发帖
与我相关
我的任务
其它技术问题
C/C++ 其它技术问题
复制链接
扫一扫
分享
社区描述
C/C++ 其它技术问题
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章