第十九课:ActiveX控件
本讲主要内容:
1、 首先认识什么叫ActiveX控件(VB演示MonthView控件与DatePicker控件)
演示一下在VB下的如何得到DTPicker下的日期内容及星期的内容,进而讲到属性,除了属性外还有方法和事件、属性页依次演示。
2、 VB中是很方便的,要是在VC中也能用就好了,开始在VC中演示如何使用ActiveX控件。同上一例子。(更进一步讲到属性、方法、事件的概念及容器与控件之间的关系等概念)演示如何得到日期的各个部分的内容。在此要讲到变体类型的变量(VARIANT结构及CComVariant类型及_variant_t类型的区别与联系)
3、 ActiveX控件中使用的技术分析,为了保证在各种开发工具上都能使用,对于在其内容实现时会有一些具体的要求。(字符串要使用(BSTR),颜色OLE_CORLOR,变体类型)
4、 注册与反注册(Regsvr32.exe工具的使用)
5、 创建一个ActiveX控件的方法,及常用工具的比较
6、 自动动手写一个时钟控件(工具介绍及常用选项说明及向导生成代码分析)
7、 修改图标
8、 在OnDraw中增加控件外观代码如下:(注意颜色转换的问题)
CBrush br;
br.CreateSolidBrush(TranslateColor(GetBackColor()));
pdc->FillRect(rcBounds,&br);
CTime tm=CTime::GetCurrentTime();
CString str=tm.Format("%H:%M:%S");
pdc->SetBkMode(TRANSPARENT);
pdc->SetTextColor(TranslateColor(GetForeColor()));
pdc->TextOut(0,0,str);
9、 解决不能自动更新的问题
a) 为控件响应WM_CREATE和WM_TIMER事件
b) 在OnCreate()中增加
SetTimer(1,1000,NULL);
c) 在响应onTimer中增加
InvalidateControl();
10、 增加一个新的属性,时间间隔(short UpdateInterval)
a) 在OnUpdateIntervalChanged 函数中修改(注:此时应该修改定时器的时间间隔)
SetTimer(1,m_updateInterval,NULL);
b) 进一步分析问题,解决输入时间不正确时的对策,对OnUpdateIntervalChanged函数中的代码做如下修改
if(m_updateInterval<1000||m_updateInterval>5000)//解决输入值不合要求的问题
m_updateInterval=1000;
m_updateInterval=m_updateInterval/1000*1000;//解决输入值不是整数的问题
SetTimer(1,m_updateInterval,NULL);
SetModifiedFlag();
11、 增加对字体的支持OnDraw()
CFont* pOldFont=SelectStockFont(pdc);
pdc->TextOut(0,0,tm.Format("%H:%M:%S"));
pdc->SelectObject(pOldFont);
12、 增加一个方法Beep()
MessageBox(“This is in Beep Method!”);
13、 增加自定义属性页
a) 修改属性页资源
b) 在DoPropExchange函数中增加一个相应的属性子项
PX_Short(pPX,"UpdateInterval",m_updateInterval,1000);
c) 增加一个成员变量并将其与属性相关的部分补全
14、 增加系统属性页
修改属性页映射宏
BEGIN_PROPPAGEIDS(CMyActiveXCtrl, 3)
PROPPAGEID(CMyActiveXPropPage::guid)
PROPPAGEID(CLSID_CColorPropPage)
PROPPAGEID(CLSID_CFontPropPage)
END_PROPPAGEIDS(CMyActiveXCtrl)
15、 增加控件事件
a) 系统内部事件OnClick
b) 自定义事件 NewMinute
在OnDraw函数中触发,增加如下代码:
if(tm.GetSecond()==0)
FireNewMinute();
16、 编写相应的客户端(VB与VC下)
(本部分略)
评论