向控件中添加属性(ATL 教程,第 3 部分)
IPolyCtl
是包含控件的自定义方法和属性的接口,你将向其添加一个属性。
将属性定义添加到项目
在类视图中,展开
Polygon
分支。右键单击
IPolyCtl
。从快捷菜单中,单击“添加”,然后单击“添加属性”。 将显示“添加属性”向导。
键入
Sides
为属性名称。在属性类型的下拉列表中,选择
short
。单击“确定”,完成添加终结点。
在解决方案资源管理器中,打开 Polygon.idl,并在
IPolyCtl : IDispatch
接口末尾替换以下行:short get_Sides(); void set_Sides(short value);
替换为
[propget, id(1), helpstring("property Sides")] HRESULT Sides([out, retval] short *pVal); [propput, id(1), helpstring("property Sides")] HRESULT Sides([in] short newVal);
在解决方案资源管理器中,打开 PolyCtl.h,并在定义
m_clrFillColor
后添加以下行:short m_nSides; STDMETHOD(get_Sides)(short* pval); STDMETHOD(put_Sides)(short newval);
虽然现在有框架函数来设置和检索属性和有变量来存储属性,但必须相应地实现函数。
更新 get 和 put 方法
设置
m_nSides
的默认值。 通过将行添加到 PolyCtl.h 中的构造函数,将默认形状设为三角形:m_nSides = 3;
实现
Get
和Put
方法。 已将get_Sides
和put_Sides
函数声明添加到 PolyCtl.h。 现在,使用以下方法将get_Sides
和put_Sides
的代码添加到 PolyCtl.cpp:STDMETHODIMP CPolyCtl::get_Sides(short* pVal) { *pVal = m_nSides; return S_OK; } STDMETHODIMP CPolyCtl::put_Sides(short newVal) { if (2 < newVal && newVal < 101) { m_nSides = newVal; return S_OK; } else { return Error(_T("Shape must have between 3 and 100 sides")); } }
get_Sides
方法通过 pVal
指针返回 Sides
属性的当前值。 在 put_Sides
方法中,代码可确保用户将 Sides
属性设置为可接受的值。 最小值必须为 3,并且由于每个端将使用点数组,因此 100 是最大值的合理限制。
现在有一个名为 Sides
的属性。 在下一步中,将更改绘图代码以使用它。