Adding a Property to the Control (ATL Tutorial, Part 3)

 

The new home for Visual Studio documentation is Visual Studio 2017 Documentation on docs.microsoft.com.

The latest version of this topic can be found at Adding a Property to the Control (ATL Tutorial, Part 3).

IPolyCtl` is the interface that contains the control's custom methods and properties, and you will add a property to it.

To add a property using the Add Property Wizard

  1. In Class View, expand the Polygon branch.

  2. Right-click IPolyCtl.

  3. On the shortcut menu, click Add, and then click Add Property.

    The Add Property Wizard will appear.

  4. In the drop-down list of property types, select SHORT.

  5. Type Sides as the Property name.

  6. Click Finish to finish adding the property.

When you add the property to the interface, MIDL (the program that compiles .idl files) defines a Get method for retrieving its value and a Put method for setting a new value. The methods are named by prepending put_ and get_ to the property name.

The Add Property Wizard adds the necessary lines to the .idl file. It also adds the Get and Put function prototypes to the class definition in PolyCtl.h and adds an empty implementation to PolyCtl.cpp. You can check this by opening PolyCtl.cpp and looking for the functions get_Sides and put_Sides.

Although you now have skeleton functions to set and retrieve the property, it needs a place to be stored. You will create a variable to store the property and update the functions accordingly.

To create a variable to store the property, and update the put and get methods

  1. From Solution Explorer, open PolyCtl.h and add the following line after the definition of m_clrFillColor:

       short m_nSides;
    
  2. Set the default value of m_nSides. Make the default shape a triangle by adding a line to the constructor in PolyCtl.h:

          m_nSides = 3;
    
  3. Implement the Get and Put methods. The get_Sides and put_Sides function declarations have been added to PolyCtl.h. Replace the code in PolyCtl.cpp for get_Sides and put_Sides with the following code:

    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"));
       }
    }
    

The get_Sides method returns the current value of the Sides property through the pVal pointer. In the put_Sides method, the code ensures the user is setting the Sides property to an acceptable value. The minimum must be 2, and because an array of points will be used for each side, 100 is a reasonable limit for a maximum value.

You now have a property called Sides. In the next step, you will change the drawing code to use it.

Back to Step 2 | On to Step 4

See Also

Tutorial