时钟控件-鼠标事件.docVIP

  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文档。上传文档
查看更多
????? 例2 利用MFC创建一个ActiveX控件Clock,该控件用数字时钟显示当前时间。并且,当用鼠标单击控件时,数字时钟就变成了表盘查模拟钟。 ????? [编程说明与实现] ????? (1)执行命令,选择Project页,选择MFC ActiveX ControlWizard项目,类型,项目名称为Clock,单击OK按钮。在向导Step of 2设置控件的数目,并选择是否需要口令、注释和帮助文件,本例选择默认值。在向导Step?2 of 2确定控件的类名Clock和文件名,选择控件属性、控件的基类,确定ActiveX高级特性。 ????? (2)控件类CClockCtrl的OnDraw()函数用于绘制控件,但调用OnDraw()函数只能显示一次当前时间。要想使时钟走动起来,需要处理WM_TIMER消息。利用ClassWizard为类CClockCtrl添加WM_TIMER的消息处理函数OnTimer(),在函数中通过不断调用重画控件函数,从而自动调用OnDraw()函数动态显示当前时间。 Cpp代码 ? \o 收藏这段代码 void?CClockCtrl::OnTimer(UINT?nIDEvent)? ?? { ?? ????//?TODO:?Add?your?message?handler?code?here?and/or?call?default ?? ????InvalidateControl();????//重画控件 ?? ????COleControl::OnTimer(nIDEvent); ?? }?? ???? (3)在控件窗口创建时建立定时器,利用ClassWizard为类CClockCtrl添加消息WM_CREATE的处理函数CClockCtrl::OnCreate();在控件窗口销毁时删除所建立的定时器,利用ClassWizard为类CClockCtrl添加消息DestroyWindow的处理函数。为类CClockCtrl添加属性为protected、类型为UINT的成员变量m_timer。 Cpp代码 ? \o 收藏这段代码 int?CClockCtrl::OnCreate(LPCREATESTRUCT?lpCreateStruct)? ?? { ?? ????if?(COleControl::OnCreate(lpCreateStruct)?==?-1) ?? ????????return?-1; ?? ???? ?? ????//?TODO:?Add?your?specialized?creation?code?here ?? ????//建立定时器,时间间隔为m_updateInterval(在第5步添加该成员变量) ?? ????m_timer=SetTimer(1,(UINT)m_updateInterval,NULL); ?? ????return?0; ?? }?? Cpp代码 ? \o 收藏这段代码 BOOL?CClockCtrl::DestroyWindow()? ?? { ?? ?//?TODO:?Add?your?specialized?code?here?and/or?call?the?base?class ?? ?KillTimer(m_timer);???//销毁时钟 ?? ?return?COleControl::DestroyWindow(); ?? }?? ????? (4)为了在控件窗口响应单击事件,必须添加该控件事件,该事件是ActiveX控件的库存(stock)事件。启动ClassWizard,选择ActiveEvents页面,单击Add Event按钮,在打开对话框Add Event的External name下列框中选择click。库存事件不需要添加代码,ClassWizard自动在ClockCtl.cpp文件中合适位置加入以下事件映射。 Cpp代码 ? \o 收藏这段代码 EVENT_STOCK_CLICK()?? ????? 再利用ClassWizard为类CClockCtrl添加单击消息OnClick的处理函数 Cpp代码 ? \o 收藏这段代码 void?CClockCtrl::OnClick(USHORT?iButton)? ?? { ?? ????//?TODO:?Add?your?specialized?code?here?and/or?call?the?base?class ?? ????//单击控件时,切换钟表的显示方式 ?? ????m_ifDigitShape=!m_ifDigitShape;?????//m_ifDigitShape是控件的自定义属性成员变量 ?? ????InvalidateCont

文档评论(0)

134****7338 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档