Добавление взаимодействия элемента управления и контейнера.
Посмотрите внимательно файлы, созданные мастером: 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).