文档介绍:COM时钟控件
第一页,共27页。
ActiveX
ActiveX控制的包容器程序通常是一个表单或对话框,也可以是复合文档的视窗口或文档对象。
ActiveX控制通过控制站点对象与包容器进行交互。控制站点把包容器的环境属性暴0 ); / / 设置控件尺寸大小
}
为此控件添加属性, 为了易于说明问题, 只添加一个库存属性和一个自定义属性。在ClassWiza rd 下Automation 选项卡中单击Add Proper ty 按钮, 在弹出的“Add Property”对话框中External name 组合框下选择下拉列表中的“BackColor” 表示背景色。再添加一个属性, 在External name 组合框中填入“ClockT ype”, 类型设为BOOL 型, 用于表示时钟样式。
第十一页,共27页。
还需在DoProExchange ( ) 中添加如下数据交换代码。
vo i d CCl ockCt r l ::DoPr opExchange (CPr opExchange* pPX)
{
ExchangeVe r s i on ( pPX, MAKELONG( _wVe rMi no r, _wVe rMa j o r ) );
COl eCon t r o l:: DoPr opExchange ( pPX);
PX_Boo l (pPX, "Cl oc kType ", m_Cl ockType, TRUE); / / 添加自定义属性代码
}
(1 ) 设置计时器
为时钟设置计时器, 每秒钟刷新一次时间显示。用ClassWiza rd 为CClockControl类添加WM _ CREA TE 消息的响应函数OnCr eat e( ) ,在该函数中建立定时器。
i n t CCl ockC t r l ::OnCr e a t e (LPCREATESTRUCT l pCr e a t eS t r uc t )
{
i f (COl eCon t r o l:: OnCr e a t e ( l pCr e a t eS t r uc t )= = - 1 )
r e t u r n - 1;
m_Time r= Se tTime r ( 1, 1000, NULL); / /定时器设为1000ms
r e t u r n 0;
}
第十二页,共27页。
用Clas sWizard 为CClockCt rl 类添加WM _ Timer 消息处理函数On Time r ( ) , 在该函数中调用InvalidateCont rol( ) 重绘控件, 刷新时间显示。
vo i d CCl ockCt r l ::OnTime r (UINT n IDEven t ) / /时钟到时,WM_Time r 响应
{
I nva l i da t eCon t r o l ( ); / /使控件失效, 重绘
COl eCon t r o l ::OnTime r (n IDEven t );
}
用ClassWizard 为CClockCt rl 类的DestoryWindow 消息添加处理函数, 当退出窗口
时销毁计时器。
BOOL CCl ockCt r l:: De s t r oyWi ndow( )
{
Ki l lTime r (m_Time r ); / /销毁计数器
r e t u r n COl eCon t r o l:: De s t r oyWi ndow( ); / /销毁窗口
}
第十三页,共27页。
(2 ) 切换时钟显示样式当用户单击Clock 控件时, 控件在数字时钟与模拟表盘样式之间切换。因此需要为控件窗口创建窗口响应事件, 库存事件中有Click 事件, 可以在Classwiza rd 的ActiveXEvents 选项卡中, 单击Add Events 按钮添加事件, 在弹出的“Add Event” 对话框中的Exte rn name 复合框中选择Click , Clas sWizard 会自动在ClockCtr 文件中添加事件映射和OnClick ( ) 函数的实现代码。
/ / Even t map
BEGIN_EVENT_MAP(CCl ockCt r l, COl eCon t r o l )
/ / {{AFX_EVENT_MAP(CCl oc kCt r l )
EVENT_STOCK_CLICK( )
/ / }}AFX_EVENT_MAP
END_EVENT_MAP( )
···
vo i d