基于VC++中ATL创建ActiveX控件的探讨
2009-06-16 20:07:13 来源:WEB开发网图1 图2
3)为ActiveX控件添加自定义属性
现在来添加Circle控件的一个基本属性——Radius。
在Workspace Windows中Class View状态下,右击 ICircleCtl接口,选择Add Property,属性类型为short,名为Radius,参数为空。系统会自动生成get_Radius和put_Radius两个成员函数。在CCircleCtl中添加m_radius变量,用来存储半径。在CCircleCtl的构造函数中将其初始化为50,并在get_Radius函数中添加*pVal=m_radius; 在put_Radius函数中添加m_radius=newVal; FireViewChange();用来及时更新视图。对于Radius的属性,我们通过修改控件的绘制代码来使它起作用。
4) 修改ActiveX控件的绘制代码实现属性交换
首先,在CCircleCtl的构造函数中对绘制圆的填充色进行初始化,将它的初始值设为红色,即m_clrFillColor=RGB(255,0, 0)。
接下来,我们需要几个全局变量来保存控件区域的信息,在CircleCtl.h中添加如下变量:
static POINT CenterPt;
static long RectHt = 0;
static long RectWd = 0;
然后修改OnDraw函数,在该绘制函数中,使用 Windows API中标准的HDC、HPEN、HBRUSH以及SelectObject、Ellipse等结构和函数来实现绘制的。例如:
// 创建画笔和画刷并选中颜色画圆
hPen = (HPEN)GetStockObject(BLACK_PEN);
hOldPen = (HPEN)SelectObject(hdc, hPen);
hBrush = (HBRUSH)GetStockObject(WHITE_BRUSH);
hOldBrush = (HBRUSH)SelectObject(hdc, hBrush);
hBrush = CreateSolidBrush(colFore);
SelectObject(hdc, hBrush);
Ellipse (hdc, (CenterPt.x - m_radius), (CenterPt.y - m_radius), (CenterPt.x +m_radius),(CenterPt.y+ m_radius));
更多精彩
赞助商链接