一:步骤和生成的文件
1:文件->新建->项目->Visual C++项目->MFC->MFC ActiveX控件->名称填Clock->确定
->应用程序设置(运行时许可证:构选后会生成一个控件许可文件,当其它程序调用此控件时,如果没有此许可文件
就无法使用此控件,一般不构选).
->控件名称(控件类型ID:CLOCK.ClockCtrl.1,属性页类型ID:CLOCK.ClockPropPage.1)->完成.
2:生成的文件包括:(Clock.h,Clock.cpp对应CClockApp),(CClockPropPage.h, CClockPropPage对应CClockPropPage),
(ClockCtrl.h,ClockCtrl.cpp对应CClockCtrl),(Clock.idl对应_DClock和_DClockEvents).
3:生成动态的时钟控件步骤
(3.1):在CClockCtrl的OnDraw中:
void CClockCtrl::OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
{
if (!pdc) return; //默认代码
//自己添加的代码
CTime time = CTime::GetCurrentTime();
CString str = time.Format("%H:%M:%S");
pdc->TextOut(0,0,str);
}
(3.2):为CClockCtrl添加消息WM_CREATE的处理,其对应的响应函数为OnCreate.
选中CClockCtrl->击右键->属性->点击消息 图标->找到WM_CREATE,将WM_CREATE添加到
CClockCtrl中,会自动创建一个OnCreate函数,在函数中添加定时器代码.
int CClockCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (COleControl::OnCreate(lpCreateStruct) == -1) return -1;
//在此添加您专用的创建代码
::SetTimer(this->m_hWnd,1,1000,NULL); //创建定时器,使其每秒发送一个WM_TIMER消息
return 0;
}
(3.3):为CClockCtrl添加消息WM_TIMER的处理,其对应的响应函数为OnTimer.
选中CClockCtrl->击右键->属性->点击消息 图标->找到WM_TIMER,将WM_TIMER添加到CClockCtrl
中,会自动创建一个OnTimer函数,在函数中添加使窗口重绘的代码.
void CClockCtrl::OnTimer(UINT nIDEvent)
{
if(AmbientUserMode()) //如果运行模式,不是设计模式则执行以下语句(可以不要此句).
this->Invalidate(); //此自带函数使窗口无效,这样窗口就会重绘.
//::InvalidateRect(this->m_hWnd,CRect(0,0,100,100),true);//系统函数使窗口的某一块重绘.
COleControl::OnTimer(nIDEvent);
}
4:添加标准属性
(4.1):选中_DClock->击右键->添加->添加属性->属性名选BackColor或ForeColor,实现类型选常用->完成
(4.2):在CClockCtrl的OnDraw中添加如下代码,填充矩形颜色和设置文字颜色:
CBrush brush(TranslateColor(GetBackColor()));
//GetBackCol