CB非可视组件的消息处理技巧.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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

文档评论(0)

182****9516 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档