ActiveX с нуля

         

Добавление взаимодействия элемента управления и контейнера.


Посмотрите внимательно файлы, созданные мастером: MyСtrl.h b MyСtrl.cpp.

В файле MyCtrl.h приведены методы, которые Вы можете использовать для управления элементом ActiveX (эти методы выделены жирным шрифтом):

class CMyCtrl : public CWnd

{

protected:

     DECLARE_DYNCREATE(CMyCtrl)

public:

     CLSID const& GetClsid()

     {

          static CLSID const clsid

              = { 0x49e2f37f, 0xb48d, 0x11d3, { 0xa2, 0xb0, 0x0, 0xa0, 0xc9, 0x55, 0xfa, 0x9e } };

          return clsid;

     }

     virtual BOOL Create(LPCTSTR lpszClassName,

          LPCTSTR lpszWindowName, DWORD dwStyle,

          const RECT& rect,



          CWnd* pParentWnd, UINT nID,

          CCreateContext* pContext = NULL)

     { return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID); }

    BOOL Create(LPCTSTR lpszWindowName, DWORD dwStyle,

          const RECT& rect, CWnd* pParentWnd, UINT nID,

          CFile* pPersist = NULL, BOOL bStorage = FALSE,

          BSTR bstrLicKey = NULL)

     { return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID,

          pPersist, bStorage, bstrLicKey); }

// Attributes

public:

     short GetShape();

     void SetShape(short);

     short Get_Shape();

     void Set_Shape(short);

     BOOL GetSelected();

     void SetSelected(BOOL);

     OLE_COLOR GetForeColor();

     void SetForeColor(OLE_COLOR);

     unsigned long GetSelectColor();

     void SetSelectColor(unsigned long);

     CString GetCaption();

     void SetCaption(LPCTSTR);

     COleFont GetFont();

     void SetFont(LPDISPATCH);

     unsigned long GetTextColor();

     void SetTextColor(unsigned long);

// Operations

public:

     void AboutBox();

};

 

Добавьте в диалог кнопки, позволяющие менять свойства элемента. В примере добавлены 4 элемента. Элемент – кнопка “Сменить форму”с идентификатором IDC_SHAPE позволит менять форму, отображаемую в элементе. Элемент редактирования с идентификатором IDC_NEWTEXT позволит указать текст, выводимый в элементе ActiveX. Кнопка “Сменить текст” с идентификатором IDC_TEXT позволит при нажатии на нее  изменить текст в элементе ActiveX.


Элемент типа статического текста с идентификатором IDC_MESSAGE будет отображать текст, изменяющийся при щелчках мыши на элементе.

Запустите ClassWizard и на закладке Member Variables задайте переменные для элементов с иденгтификаторами IDC_MESSAGE, IDC_NEWTEXT, IDC_MYCTRL.

На закладке Message Map выберете класс СtestMyCtrlDlg. Задайте обработку событий, связанных с щелчками на кнопках IDC_TEXT и IDC_SHAPE. Если Вы выберете в списке Object Ids элемент IDC_MYCTRL, то в списке событий Вы увидите то единственное событие, которое мы посылаем в контейнер – Select. Добавьте обработчик для него – функцию с именем OnSelectMyCtrl.

Измените текст в файле TestMyCtrl.cpp:

void CTestMyCtrlDlg::OnSelectMyctrl(BOOL IsSelected)

{

     if ( IsSelected )

     m_Message = "Выбран";

     else

     m_Message = "Не выбран";    

     UpdateData(FALSE);

}

void CTestMyCtrlDlg::OnShape()

{

     short shape = m_MyCtrl.Get_Shape();

     if ( shape < 2 )

     m_MyCtrl.Set_Shape(++shape);

     else

     m_MyCtrl.Set_Shape(0);

}

void CTestMyCtrlDlg::OnText()

{

     UpdateData(TRUE);

     m_MyCtrl.SetCaption(m_newText);

         

}

Обратите внимание на использование методов элемента ActiveX: вызовы методов выделены жирным шрифтом.

Перестройте приложение и запустите его (рис. 22).




Содержание раздела