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