Шаг 78 - Управление приложениями из VC++

Создание проекта

Итак, запускайте MFC AppWizard. Дайте имя проекту Test1. В шаге 1 - Single Document. Шаг 2 без изменений. Шаг 3 установите Container и смело жмите Finish.

78_1.gif (5107 b)

Итак, немного теории. Практически все современные приложения являются серверами OLE. То есть они написаны так, что ими может управлять любая программа, которая является контейнером. Вобщем-то за нас это сделал AppWizard. Мы только ему пояснили, что и где. Информация о функциях данного элемента хранится в специальных файлах TLB,OLB. Например, информация о функциях и классах Excel находится здесь.

..\Programm Files\Microsoft Office\Office\Excel8.olb

Дайте поиск по дискам расширений OLB и Вы найдете много интересного. Итак, давайте добавим классы Excel к нашему приложению. Запускайте ClassWizard. Выбирайте вкладку Automation. Дальше Add class и из выпадающих вариантов From type library. Найдите Excel8.olb и нажмите OK. У Вас появится диалоговое окно со списком классов, которые Вы можете сформировать. Нас пока интересует _Application найдите его и выделите.

78_2.gif (5397 b)

После этого жмите OK и закрываете окно ClassWizard. Смотрите окно ClassView появился класс _Application в двух файлах excel8.h и excel8.cpp.

78_3.gif (2870 b)

Ну, все пора писать код. Мы по щелчку мышки будем активизировать Excel получать имя текущего принтера, показывать его на несколько секунд на экране и закрывать.

Создаем код

Нам необходимо поместить ссылку на класс _Application вот так.

static char THIS_FILE[] = __FILE__;
#endif
#include "excel8.h"
/////////////////////////////////////////////////////////////////////////////
// CTest1View

Теперь мы перегрузим события нажатия левой кнопки в окне и напишем код.

void CTest1View::OnLButtonDown(UINT nFlags, CPoint point) 
{
_Application ap; // объект приложение
ap.CreateDispatch("Excel.Application"); // связаться
CString thePrinter = ap.GetActivePrinter(); // получить текущйи принтер
AfxMessageBox(thePrinter); // показать принтер
ap.SetVisible(TRUE); // показать Excel
Sleep(1000); // подождать немного
CView::OnLButtonDown(nFlags, point);
}

Вот такое окно будет, потом запуститься Excel.

78_4.gif (4673 b)

Описание

Смотрите сами. Создаем экземпляр класса. Связываем класс с реальным объектом. А теперь обращаемся к функции Excel взять текущий принтер. Выводим полученную строку на экран. Выводим сам Excel на экран. Задержка для того, чтобы увидеть чего-нибудь. Компилируйте, запускайте и наслаждайтесь. Это очень приятно, не нужен никакой VBA!. Реальная работа сложнее и требует других классов, но начало положено !

Шпаргалка

Automation позволяет управлять Вашими приложениями из программ VC++. Для этого нужно найти соответствующею библиотеку типов, и на основе ее создать классы для использования в приложении. Но в этом случает, Ваше приложение будет сильно привязано к приложению функции которого оно использует и может выступать только в качестве дополнения.


Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 07.01.2000 (обновлено 26.07.2001)