IOleCommandTarget інтерфейс дозволяє об'єктів і їх контейнерах, перекидання команди одної. Наприклад, об'єкта панелі інструментів можуть містити кнопки для команд, таких як Друк, Попередній перегляд, збереження, новийі Масштаб. Якщо такий об'єкт були вбудовані в контейнері, який підтримує IOleCommandTarget, об'єкт може ввімкнути його кнопок і вперед команди контейнера для обробки, коли користувач натиснув їх. Якщо контейнер впроваджений об'єкт, щоб надрукувати себе, вона може зробити цей запит за допомогою команди через інтерфейс IOleCommandTarget впроваджений об'єкт.
IOleCommandTarget — це інтерфейс автоматизації, як в тому, що клієнт використовується для виклику методів на сервері. Однак, за допомогою IOleCommandTarget зберігає накладні здійснення дзвінків через автоматизації інтерфейси, тому що програмісти не потрібно використовувати метод зазвичай дорогі Invoke IDispatch.
У MFC IOleCommandTarget інтерфейс використовується активного документа сервери для активного документа контейнерах, перекидання команди на сервер. Клас сервера активного документа, CDocObjectServerItem, використовує MFC інтерфейс карти (див TN038: MFC/OLE IUnknown реалізації) реалізувати інтерфейс IOleCommandTarget.
IOleCommandTarget також реалізована в COleFrameHook клас. COleFrameHook є недокументовані MFC клас, який реалізує функціональність рамка вікна редагування контейнерів на місці. COleFrameHook також використовує інтерфейс карти MFC впровадити інтерфейс IOleCommandTarget . COleFrameHookреалізації IOleCommandTarget вперед OLE команди на COleDocObjectItem-отриманих контейнери активного документа. Це дозволяє будь-MFC активного документа контейнер отримувати повідомлення з серверів міститься активного документа.
MFC OLE команда карти
MFC розробники можуть використовувати IOleCommandTarget за допомогою MFC OLE команда карт. OLE: команда карт, як повідомлення карти, тому що вони можуть бути використані, щоб зіставити OLE команди функцій-членів класу, яка містить команду карта. Щоб зробити цю роботу, місце макроси в команду карта, щоб визначити групу OLE команда команди, які ви хочете, щоб впоратися, команда OLE і команда Ідентифікатор на WM_COMMAND повідомлення, яке надсилається в команди OLE, отримане. MFC також забезпечує ряд попередньо макросів для стандартних команд OLE. Список стандартних OLE команди, які були спочатку призначені для використання з додатків Microsoft Office, побачити OLECMDID нумерації, що визначено у docobj.h.
OLE-команди, отримане MFC застосунок, що містить команду карту OLE, MFC намагається знайти команди ID і команда група виконати команду в карті OLE команди програми. Якщо знайдено збіг, WM_COMMAND повідомлення направлені до програми, яка містить команду карта з ID виконати команду. (Див. опис ON_OLECMD нижче). Таким чином OLE команди направлені до застосунку перетворилися на WM_COMMAND повідомлень на MFC. На WM_COMMAND потім переадресовується через програми повідомлення карти за допомогою стандартних MFC команда маршрутизації архітектура.
На відміну від повідомлення карти MFC OLE команда карти не підтримує ClassWizard. MFC розробники повинні додати OLE команду карта підтримки і OLE команду карта записів вручну. OLE команда карти можуть бути додані до MFC активного документа серверів в будь-який клас, що в ланцюжку WM_COMMAND маршрутизацію повідомлення під час активного документа активна на місці в контейнері. Ці класи включити додатки класи, отриманих від CWinApp, CView, CDocumentі COleIPFrameWnd. У Тара активного документа, OLE команда карти можна додавати лише до COleDocObjectItem-отриманих клас. Крім того, у Тара активного документа, WM_COMMAND повідомлення будуть лише надіслані повідомлення карту в COleDocObjectItem-класу, отриманих.
OLE: команда карта макроси
Використовуйте такі макроси, щоб додати команду карта функціональності вашого класу:
DECLARE_OLECMD_MAP)
Цей макрос йде в класі декларації (як правило, у файлі заголовка) класу, яка містить команду карта.
BEGIN_OLECMD_MAP (theClass, baseClass)
theClass
Ім'я класу, який містить команду карта.
baseClass
Ім'я базового класу, класу, яка містить команду карта.
Цей макрос знаменує початок Карта команди. Використовувати цей макрос у файлі реалізації класу, яка містить команду карта.
END_OLECMD_MAP()
Цей макрос означає кінець команду карта. Використовуйте цей макрос у файлі реалізації класу, яка містить команду карта. Цей макрос завжди повинні слідувати з BEGIN_OLECMD_MAP макросів.
ON_OLECMD (pguid, olecmdid, id)
pguid
Вказівник на GUID OLE команда команда групи. Цей параметр є NULL групі командного стандартних OLE.
olecmdid
OLE команди ID команду, щоб викликати.
id
ID WM_COMMAND повідомлення буде відправлено заявку, яка містить команду карта, коли викликається ця команда OLE.
Використання в ON_OLECMD макрос у карті команду Додати записи для ОЛЕ команд, що ви хочете, щоб впоратися. Коли OLE команди надходять, вони будуть перетворюються на вказаний WM_COMMAND повідомлення і через програми повідомлення карті за допомогою стандартних MFC команда маршрутизації архітектура.
Приклад
Наступний приклад показує, як додати можливості обробки команди OLE MFC активного документа сервер для обробки на OLECMDID_PRINT OLE команди. У цьому прикладі припускається, що ви використовували AppWizard для створення MFC програма, яка є сервером активного документа.
DECLARE_OLECMD_MAP макрос до класу декларації.Приміткаnbsp; Використання CView-отриманих клас, тому що це один з класів в активному документі сервера, який в ланцюжку маршрутизацію повідомлення WM_COMMA&ND.
клас CMyServerView: Громадська CView
{
Охоронювані: / / створити з серіалізацією тільки
CMyServerView();
DECLARE_DYNCREATE(CMyServerView)
DECLARE_OLECMD_MAP()
. . .
}
BEGIN_OLECMD_MAP і END_OLECMD_MAP макросів:BEGIN_OLECMD_MAP (CMyServerView, CView)
END_OLECMD_MAP()
BEGIN_OLECMD_MAP (CMyServerView, CView)
ON_OLECMD(NULL,OLECMDID_PRINT,ID_FILE_PRINT)
END_OLECMD_MAP()
Зверніть увагу, що один із стандартних OLE команди макроси, визначені в afxdocob.h, можуть бути використані на місці ON_OLECMD макросів, оскільки OLECMDID_PRINT ідентифікатора командного стандартних OLE ON_OLECMD_PRINT макрос буде вирішувати же завданням як ON_OLECMD макрос, показано вище.
Коли програми-контейнера надсилає цей сервер команду OLECMDID_PRINT через інтерфейс IOleCommandTarget сервера, MFC обробник друку команда буде викликати на сервері, викликаючи сервера друку застосування. Активний документ-контейнер код для виклику команди друку, додані в дії, описані вище буде виглядати приблизно так:
недійсним CContainerCntrItem::DoOleCmd()
{
IOleCommandTarget * pCmd = NULL;
HRESULT hr = E_FAIL;
OLECMD-ocm = {OLECMDID_PRINT, 0};
hr = m_lpObject gt;QueryInterface (IID_IOleCommandTarget, reinterpret_cast < порожнечу ** >(&pCmd));
IF(FAILED(HR))
повернення;
hr = pCmd - > QueryStatus (NULL, 1 & ocm, NULL);
IF(SUCCEEDED(HR) & & ("ocm.cmdf" і "OLECMDF_ENABLED"))
{
//Command є доступні і включити так назвати його
COleVariant vIn;
Обрати можна COleVariant;
hr = pCmd - > Exec (NULL, OLECMDID_PRINT,
OLECMDEXECOPT_DODEFAULT та vIn та обрати можна);
ASSERT(SUCCEEDED(HR));
}
pCmd - > Release();
}
Технічні примітки за номером |nbsp; Технічні примітки за категоріями