- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
CB非可视组件的消息处理技巧
为了给你的非可视组件创立一个隐蔽的窗口,需要有以下:
1.一个私有变量型(Private Variable)的HWnd 来取得窗口句柄。
2.一个用来捕获窗口发送给组件的函数(a WndProc)。
3.对AllcolateHwnd 的调用使之创立窗口句柄并设置WndProc。
为了清晰的解释上述思路和展现创立过程,下面我们将以一个详细的
实例来说明。
首先我们先创立一个新的组件,在C++ Builder 中,选择FILENEW…
双 击组 件 图标 显示 一 个 新 的组 件 对 话 框 转 变 Ancestor Type 为
Tcomponent 和 Class name 为 Ttest 并设置完毕。
然后,切换到新组件的头文件,在类的私有局部(private section)
参加以下声明:
HWnd Fhandle;
void __fastcall WndProc(Tmessage
第一行声明白一个调用Fhandle 的HWnd 变量,这个变量将用于窗口
创立后捕获窗口句柄。
其次行声明白一个用于接收消息的WndProc 函数。这个函数的声明必
需加以标识,以便限定它是一个WndProc,然后在类声明 Public(公有)局
部构造以下声明:
Viod DoIt( );
这个公有函数将被我们用来测试组件,类声明应如下:
class PACKAGE Ttest:public Tcomponent
{
private:
HWnd Fhandle;
void __fastcall WndProc(Tmessage
protected:
public:
__fastcall Ttest(Tcomponent *Owner);
void DoIt( );
__published:
};
现在切换到组件的代码单元,将下面一行参加到单元的顶部(在函数
上或许是不错的地方)
#define MY__Message WM_USER+1
这一行声明白一个在 DoIt 函数被调用时,组件将发送给它自己的用
户自定义消息。此时我们必需为组件安排一个窗口句柄。这个句柄将供应
一个隐蔽的窗口使我们可以捕获组件中的消息。找到组件构造代码,参加
下面代码:
__fastcall Test::Test(Tcomponent *Owner): Tcomponent(Owner)
{
Fhandle=AllocateHWnd(WndProc);
}
好,重要的一步已完成,AllocateHWnd 函数创立了一个隐蔽窗口并
且返回它的句柄,留意这里我们为了使Windows 知道哪里发来了消息,传
递 WndProc 的地址;
现在我们来创立WndProc 的函数局部。在源文件中参加:
void __fastcall Ttest::WndProc(Tmessage
try
{
Dispatch(
}
catch (…)
{
Application-HandleException(this);
}
}
无论何时Windows 发送消息给组件,Windows 都会调用这个函数。这
局部代码完成了两件事。首先,它检查被接收的消息是否是我们用户自定
义的消息。假如是,一个消息框将被显示,你可以看到实际上我们接收到
的消息。其次,这段代码传送了系统 (或 VCL)处理过程中的消息,
try/catch 块用来保证,假如特别消失,它将成为缺省风格下的句柄。
概括地说,WndProc 函数在为缺省句柄传递全部其他消息,监控了全
部客户消息。现在我们创立 DoIt 函数,完成我们的组件,参加我们创立
DoIt 函数,完成我们的组件,参加代码:
void Ttest::DoIt()
{
PostMessage(Fhandle, MY__MESSAGE, 0, 0);
}
这个函数发送一个消息组件的窗口句柄(记住,这个窗口句柄是以前
存入到 Fhand
您可能关注的文档
最近下载
- 2024年新修订《公司法》解读课件.pptx
- 电网企业数字化转型的路径与策略.docx VIP
- 危险化学安全卡—航空煤油.doc VIP
- 碱金属K和Na对配合煤炼焦特性及捣固焦炭质量影响的研究-化学工程与技术专业论文.docx VIP
- 小学美术教育在跨学科教学中的融合与应用教学研究课题报告.docx
- 2025至2030中国建筑工程承包行业市场占有率及有效策略与实施路径评估报告.docx VIP
- 2024红太阳光伏组件用户使用手册.docx VIP
- 2025年梦想启航未来可期班会.pptx VIP
- 职业技术学校《机床电气控制技术》课程标准.doc VIP
- 人教版六年级上册美术教案(全册).pdf VIP
原创力文档


文档评论(0)