Лабораторная работа № .
Тема: Использование ActiveX компонентов в серде Visual C++.
Цель: Изучение возможностей использования ActiveX компонентов и вызова интерфейсов в среде Visual C++.
Содержание отчета:
1.Название работы.
2.Тема работы.
3.Цель работы.
4.Описание использованных элементов и функций среды разработки и операционной системы.
5.Индивидуальное задание.
6.Фрагменты текстов программных модулей решения задания.
7.Результат работы.
8.Выводы.
Для ознакомления создадим приложение с таблицами (рис.24)
Порядок выполнения работы:
Часть 1 Использование средств VisualC++.
Рис 1.
Рис.2
Рис.3
Рис 4.
Среда автоматически создаст классы для доступа к методам и свойствам данного компонента (рис.5) и добавит соответствующую икону к палитре компонентов(рис.6). Файлы созданных классов показаны на рис.7.
Рис.5
Рис.6
Рис.7
Подробно рассмотрев заголовочный (рис.8) и файл реализации (рис.9) можно заметить, что данные классы являются промежуточной обверткой для прямых вызовов методов интерфейса IDispatch.
Рис.8
Рис.9
3.Помещаем элемент таблицы из палитры компонентов на форму. Нажав правую кнопку мыши можно просмотреть и изменить свойства компонента(рис.10-12).
Рис.10
Рис.11
Рис.12
4.Добавляем инициализацию ActiveX системы.
BOOL CComTestApp::InitInstance()
{
...
AfxEnableControlContainer();
CComTestDlg dlg;
m_pMainWnd = &dlg;
...
}
5. В Class Wizard'е создаем для элемента таблицы переменную(рис.13)
Рис.13
Добавленная переменная появилась в инспекторе объектов.
6. В методе инициализации окна изменяем свойства компонента-таблицы через созданную переменную.
BOOL CComTestDlg::OnInitDialog()
{
...
// TODO: Add extra initialization here
m_Grid.SetBorderStyle(0); //Изменяем стиль границы (рис.14)
m_Grid.SetBackColorBkg(GetSysColor(COLOR_3DFACE));// Изменяем цвет фона
m_Grid.SetCols(2); // Изменяем количество столбцов
m_Grid.SetRows(6); // Изменяем количество строк
m_Grid.SetFixedRows(1); //Уснанавливаем количество фиксированных строк и столбцов
m_Grid.SetFixedCols(1);
m_Grid.SetTextMatrix(0,0,"Parameters"); // Устанавливаем текст ячеек заголовков. Нумераци с 0. Первый параметр – номер строки, второй – номер столбца, третий - текст
m_Grid.SetTextMatrix(0,1,"Values");
char szTmp[4];
for(int i=1;i<=5;i++) //Заполняем названия строк
{
m_Grid.SetTextMatrix(i,0,szParametersName[i-1]);
m_Grid.SetTextMatrix(i,1,itoa(rand()%255,szTmp,10));
}
m_Grid.SetColSel(1); //Устанавливаем выбранную ячейку
m_Grid.SetRowSel(1);
return TRUE; // return TRUE unless you set the focus to a control
}
Рис.14
Значения некоторых элементов во время разработки определить невозможно. В этом случае нужно воспользоваться утилитой OLE/COM Object Viewer из меню Tools.
Раскрываем категорию Controls
Рис.15
Находим компонент Microsoft FlexGrid Control и, нажав правую кнопку, мыши выбираем команду View Type information.
Рис.16
Появляется окно TypeLib Viewer, в котором в правой части отображены все элементы компонента. При выборе любого элементы в остальной части окна отображается его описание.
Рис.18
Например, уже знакомый нам флаг границы 0 – flexBorderNone.
Рис.19
7. С помощью Class Wizard'а создаем обработчик двух команд – EnterCell - вход в ячейку таблицы и LeaveCell – выход из нее.
Рис.20
8.В обработчике входа изменяем выравнивание текста на "Выровнять влево" и делаем шрифт жирным.
void CComTestDlg::OnEnterCellMsflexgrid1()
{
// TODO: Add your control notification handler code here
m_Grid.SetCellAlignment(2);
m_Grid.SetCellFontBold(TRUE);
}
9. В обработчике выхода из ячейки устанавливаем выравнивание вправо и обычный шрифт.
void CComTestDlg::OnLeaveCellMsflexgrid1()
{
// TODO: Add your control notification handler code here
m_Grid.SetCellAlignment(7);
m_Grid.SetCellFontBold(FALSE);
}
9.Запускаем приложение и перемещаемся по ячейкам таблицы.
К сожалению не для любых компонентов и интерфейсов возможно создание классов описанным методом. Для некоторых компонентов нужно указать явный импорт библиотеки типов из файла(tlb,dll,exe) командой
#import "c:\MyComponent\Grid.dll" no_namespace ...
При импорте будут созданы классы – оболочки для интерфейсов, а далее все, как описано выше.
Но и данный метод не универсален. В этом случае необходимо использовать явное обращение к методам интерфейса. Рассмотрим этот вариант.
Часть 2. Прямой вызов методов интерфейса IDispatch
1. Для доступа к методам подключаем заголовочный файл библиотеки ATL и саму библиотеку в файле реализации диалогового окна:
#include <Atlbase.h>
#pragma comment(lib,"atl.lib")
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.