向控件中添加属性(ATL 教程,第 3 部分)

IPolyCtl 是包含控件的自定义方法和属性的接口,你将向其添加一个属性。

将属性定义添加到项目

  1. 类视图中,展开 Polygon 分支。

  2. 右键单击 IPolyCtl

  3. 从快捷菜单中,单击“添加”,然后单击“添加属性”。 将显示“添加属性”向导。

  4. 键入 Sides属性名称

  5. 属性类型的下拉列表中,选择 short

  6. 单击“确定”,完成添加终结点。

  7. 解决方案资源管理器中,打开 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);
    
  8. 解决方案资源管理器中,打开 PolyCtl.h,并在定义 m_clrFillColor 后添加以下行:

    short m_nSides;
    STDMETHOD(get_Sides)(short* pval);
    STDMETHOD(put_Sides)(short newval);
    

虽然现在有框架函数来设置和检索属性和有变量来存储属性,但必须相应地实现函数。

更新 get 和 put 方法

  1. 设置 m_nSides 的默认值。 通过将行添加到 PolyCtl.h 中的构造函数,将默认形状设为三角形:

    m_nSides = 3;
    
  2. 实现 GetPut 方法。 已将 get_Sidesput_Sides 函数声明添加到 PolyCtl.h。 现在,使用以下方法将 get_Sidesput_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 的属性。 在下一步中,将更改绘图代码以使用它。

返回到第2 步 | 转到第 4 步

另请参阅

教程